Introducción
Usted es amigo de un curador de un museo de arte, que recientemente tuvo el placer de obtener arte moderno de cuatro artistas ( algunos de los cuales pueden darle al curador cero piezas de arte, jóvenes sinvergüenzas ). Como se trata de arte moderno, todas las piezas de cualquier artista se ven exactamente iguales. Tu amigo quiere usar una computadora para ayudar a decidir en qué orden colocar estas piezas.
Requerimientos del programa
Su programa debe tomar cinco enteros (pasados a una función o ingresados a través de stdin (o de otra manera)). Los primeros cuatro son el número de pinturas proporcionadas por cada uno de los cuatro artistas. El último valor es un índice de permutación i
(contando desde 1, no desde 0). El curador desea ver la i
permutación por orden lexicográfico de las pinturas.
Su programa debe generar esta permutación en cualquier formato razonable: por ejemplo, abbccd
o [0 1 1 2 2 3]
. El tiempo de ejecución para la entrada por un total de menos de diez pinturas debe tomar menos de una hora (con suerte esto no debería ser un problema)
No está permitido usar ninguna función incorporada para resolver las permutaciones
Ejemplos
Entrada: 0 1 2 0 2
Dado que tenemos una pintura del artista B y dos del artista C (y todas se ven iguales), las permutaciones en orden lexicográfico son:
['bcc', ' cbc ', 'ccb']
La permutación resaltada sería la salida correcta, porque es la segunda en orden lexicográfico.
Entrada: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
Pruebas
Aquí hay algunas pruebas que deberían ser correctas.
1 2 4 1 5 - ABBDCCCC
2 2 3 1 86 - ABBCACDC
4 1 2 0 24 - AACACBA
1 4 3 2 65 - ABBCBBDCDC
Aquí está disponible un pequeño fragmento de código en Python3 que debería generar aleatoriamente entradas y salidas (no válido para la entrada, esto usa la importación de permutaciones de Python):
from itertools import permutations
from random import randint
a,b,c,d,n = randint(1,2),randint(1,2),randint(1,3),randint(1,3),randint(1,15)
print(str(a) + " " + str(b) + " " + str(c) + " " + str(d) + " " + str(n) + " - " + str(sorted(set([''.join(p) for p in permutations(a * "a" + b * "b" + c * "c" + d * "d")]))[n-1]))
Marcador
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
es válida J y funciona, pero se usa A.
para la mayor parte del trabajo, por lo que no es válida. Si pudiera escribir una función que la reemplace A.
y la sustituya en esta función, tendría una respuesta válida.
{:A.[:I.}:
... Lo que pasa es eso, pero todavía no creo A.
que sea válido: jsoftware.com/help/dictionary/dacapdot.htm