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
quelle
{:A.a.{~97+[:I.}:
ist gültig J und funktioniert, wird aberA.
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 ersetztA.
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.htmAntworten:
Python 2:
175163 ZeichenDies ist keine ernsthafte Golfantwort. Mit einem anderen Algorithmus erreichte ich 138 Byte. Ich wollte das nur hier posten, weil es keine rohe Gewalt anwendet. Komplexität ist Theta (#Bilder).
Verwendungszweck:
bearbeiten:
Gleicher Algorithmus, nur ein bisschen Golf: Importieren Sie nicht die Fakultätsmethode und kleine Änderungen in der Reihenfolge der Berechnungen.
Pyth-Übersetzung: 61 Zeichen
Nichts Besonderes hier, genaue Übersetzung meines Python-Codes. Viel zu lange. Ich hatte auch ein paar hässliche (lange) Dinge benutzt. Der erste 9 Buchstabe allein ist die Definition der Fakultät.
Auch Sachen wie
Q[j]-=1
ist viel zu lang:XQNt@QN
(1 Zeichen mehr als Python !!!)Verwendungszweck:
Probieren Sie es hier aus: Pyth Compiler / Executor . Deaktivieren Sie den Debug-Modus und verwenden Sie ihn
[2, 2, 3, 1, 86]
als Eingabe.quelle
from math import*
außerhalb der Funktion bewegen muss . Sie zur Bestenliste hinzufügen!CJam,
50 4339 BytesDies kann viel Golf gespielt werden.
Übernimmt Eingaben von STDIN in folgendem Format:
Gibt das Bild aus. Zum Beispiel für die obige Eingabe:
Probieren Sie es hier online aus
Beachten Sie, dass der Online-Compiler für größere Gemälde aufgibt. Sie müssen größere Eingaben in der Java-Version versuchen
quelle
JavaScript (ES6) 120
138 147Als Funktion mit den erforderlichen fünf Parametern über die Konsole ausgegeben.
Mit Symbolen 0,1,2,3. Ich berechne die Summe der Symbole, baue und überprüfe dann jede Basis-4-Zahl mit der erforderlichen Anzahl von Ziffern. Zahlen mit der falschen Nummer einer Ziffer werden verworfen.
Hinweis: Mit JavaScript 32-Bit-Ganzzahl funktioniert dies für bis zu 15 Bilder.
Bearbeiten Sie kürzer (vermeiden Sie .toString) und viel schneller (geänderte Beendigungsbedingung). Zeit für jeden Test unter 1 Sek.
Edit2 keine Änderung des Algorithmus, mehr Golf (Einrückung zur besseren Lesbarkeit hinzugefügt)
Ungolfed Und kein FireFox erforderlich
Test In FireBug / FireFox Konsole
Ausgabe
quelle
Pyth , 20
Probieren Sie es hier aus.
Die Eingabe erfolgt in Python-Listenform, z
[1, 2, 4, 1, 5]
Die Ausgabe erfolgt auch in Python-Listenform, z. B.
[0, 1, 1, 3, 2, 2, 2, 2]
für die obige Eingabe.Die Lösung ist Brute Force und dauert auf meinem Computer im schlimmsten Fall etwa 10 Sekunden.
Wie es funktioniert:
quelle