introduction
Vous êtes l'ami d'un conservateur pour un musée d'art, qui a récemment eu le plaisir d'obtenir de l'art moderne de quatre artistes (dont certains peuvent donner au conservateur zéro œuvres d'art, de jeunes scélérats ). Comme il s'agit d'art moderne, toutes les pièces d'un artiste donné se ressemblent exactement. Votre ami veut utiliser un ordinateur pour décider dans quel ordre placer ces pièces.
Exigences du programme
Votre programme doit prendre cinq entiers (passés à une fonction ou entrés via stdin (ou d'une autre manière)). Les quatre premiers sont le nombre de tableaux fournis par chacun des quatre artistes. La dernière valeur est un indice de permutation i
(à partir de 1, pas de 0). Le conservateur souhaite voir la i
permutation par ordre lexicographique des tableaux.
Votre programme doit produire cette permutation dans n'importe quel format raisonnable: par exemple abbccd
ou [0 1 1 2 2 3]
. Le temps d'exécution pour une saisie totalisant moins de dix tableaux doit prendre moins d'une heure (cela ne devrait pas poser de problème, espérons-le).
Vous n'êtes pas autorisé à utiliser des fonctions intégrées pour élaborer des permutations
Exemples
Entrée: 0 1 2 0 2
Étant donné que nous avons un tableau de l'artiste B et deux de l'artiste C (et ils se ressemblent tous), les permutations dans l'ordre lexicographique sont:
['bcc', ' cbc ', 'ccb']
La permutation mise en évidence serait la sortie correcte, car elle est la deuxième dans l'ordre lexicographique.
Entrée: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
Essai
Voici quelques tests qui devraient être corrects.
1 2 4 1 5 - ABBDCCCC
2 2 3 1 86 - ABBCACDC
4 1 2 0 24 - AACACBA
1 4 3 2 65 - ABBCBBDCDC
Un court morceau de code en Python3 qui devrait générer aléatoirement des entrées et des sorties est disponible ici (non valide pour l'entrée, il utilise l'importation Python de permutations):
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]))
Tableau d'affichage
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
est un J valide et fonctionne, mais utilise A.
pour la plupart du travail, il n'est donc pas valide. Si vous pouviez écrire une fonction qui la remplace A.
et la remplace dans cette fonction, vous auriez une réponse valide.
{:A.[:I.}:
... Le problème est que, mais je ne pense toujours pas que ce A.
serait valide: jsoftware.com/help/dictionary/dacapdot.htm