Einführung
Sie sind ein Freund eines Kurators eines Kunstmuseums, der in letzter Zeit die Freude hatte, moderne Kunst von vier Künstlern zu erhalten ( von denen einige dem Kurator möglicherweise keine Kunstwerke geben, junge Schurken ). Da es sich um moderne Kunst handelt, sehen alle Werke eines Künstlers genau gleich aus. Ihr Freund möchte einen Computer verwenden, um zu entscheiden, in welcher Reihenfolge diese Teile platziert werden sollen.
Programmanforderungen
Ihr Programm muss fünf Ganzzahlen annehmen (an eine Funktion übergeben oder über stdin (oder anderswo) eingegeben). Die ersten vier sind die Anzahl der von jedem der vier Künstler gelieferten Gemälde. Der letzte Wert ist ein Permutationsindex i
(von 1 bis 0). Der Kurator möchte die i
th Permutation nach lexikographischer Reihenfolge der Bilder sehen.
Ihr Programm muss diese Permutation in einem angemessenen Format ausgeben: z . B. abbccd
oder [0 1 1 2 2 3]
. Die Laufzeit für die Eingabe von insgesamt weniger als zehn Gemälden muss weniger als eine Stunde betragen (dies sollte hoffentlich kein Problem sein).
Sie dürfen keine eingebauten Funktionen verwenden, um Permutationen zu berechnen
Beispiele
Eingabe: 0 1 2 0 2
Da wir ein Gemälde von Künstler B und zwei von Künstler C haben (und alle gleich aussehen), lauten die Permutationen in lexikografischer Reihenfolge:
['bcc', ' cbc ', 'ccb']
Die hervorgehobene Permutation wäre die richtige Ausgabe, da sie die zweite in lexikografischer Reihenfolge ist.
Eingabe: 1 2 0 1 5
['abbd', 'abdb', 'adbb', 'babd', ' badb ', 'bbad', 'bbda', 'bdab', 'bdba', 'dabb', 'dbab', 'dbba']
Testen
Hier sind einige Tests, die korrekt sein sollten.
1 2 4 1 5 - ABBDCCCC
2 2 3 1 86 - ABBCACDC
4 1 2 0 24 - AACACBA
1 4 3 2 65 - ABBCBBDCDC
Hier ist ein kurzer Code in Python3 verfügbar, der zufällig Ein- und Ausgaben generieren soll (nicht für die Eingabe gültig, dies verwendet den Python-Import von Permutationen):
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]))
Anzeigetafel
Optimizer - CJam - 39 - Confirmed - Bruteforce
EDC65 - JavaScript - 120 - Confirmed - Bruteforce
Jakube - Python2 - 175 - Confirmed - Algorithmic
{:A.a.{~97+[:I.}:
ist gültig J und funktioniert, wird aber A.
für den größten Teil der Arbeit verwendet, sodass er nicht gültig ist. Wenn Sie eine Funktion schreiben könnten, die diese Funktion ersetzt A.
und ersetzt , hätten Sie eine gültige Antwort.
{:A.[:I.}:
... Die Sache ist die, aber ich denke immer noch nicht, A.
dass sie gültig wäre: jsoftware.com/help/dictionary/dacapdot.htm