introduzione
Sei amico di un curatore di un museo d'arte, che ha avuto la recente delizia di ottenere arte moderna da quattro artisti ( alcuni dei quali potrebbero dare al curatore zero opere d'arte, giovani mascalzoni ). Poiché si tratta di arte moderna, tutti i pezzi di un determinato artista sembrano esattamente uguali. Il tuo amico vuole usare un computer per decidere in quale ordine posizionare questi pezzi.
Requisiti del programma
Il tuo programma deve prendere cinque numeri interi (passati a una funzione o immessi tramite stdin (o in qualche altro modo)). I primi quattro sono il numero di dipinti forniti da ciascuno dei quattro artisti. L'ultimo valore è un indice di permutazione i
(contando da 1, non da 0). Il curatore desidera vedere la i
permutazione per ordine lessicografico dei dipinti.
L'output del programma must questa permutazione in qualsiasi formato ragionevole: per esempio abbccd
o [0 1 1 2 2 3]
. Il tempo di esecuzione dell'input per un totale di meno di dieci dipinti deve richiedere meno di un'ora (si spera che questo non sia un problema).
Non è consentito utilizzare alcuna funzione integrata per elaborare le permutazioni
Esempi
Ingresso: 0 1 2 0 2
Dato che abbiamo un dipinto dell'artista B e due dell'artista C (e sembrano tutti uguali), le permutazioni in ordine lessicografico sono:
['bcc', ' cbc ', 'ccb']
La permutazione evidenziata sarebbe l'output corretto, perché è il secondo in ordine lessicografico.
Ingresso: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
analisi
Ecco alcuni test che dovrebbero essere corretti.
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 breve pezzo di codice in Python3 che dovrebbe generare casualmente input e output è disponibile qui (non valido per l'inserimento, utilizza l'importazione di permutazioni 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]))
tabellone segnapunti
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
è valido J e funziona, ma utilizza A.
per la maggior parte del lavoro, quindi non è valido. Se potessi scrivere una funzione che la sostituisce A.
e la sostituisce in questa funzione, avresti una risposta valida.
{:A.[:I.}:
... Il fatto è che, ma ancora non credo che A.
sarebbe valido: jsoftware.com/help/dictionary/dacapdot.htm