Einführung
Du bist ein Verbrecher, der einige geheime Pläne des neuen Tech-Startups Dejavu stehlen muss. Sie schleichen sich über die Rückwand hinein, finden aber eine Tür, für deren Öffnen ein Stift erforderlich ist. Sie erkennen die Marke des Schlosses und wissen, dass es eine 5-stellige PIN mit allen Ziffern von 0 bis 4 benötigt. Nach jeder eingegebenen Ziffer überprüft das Schloss die letzten 5 eingegebenen Ziffern und öffnet sich, wenn der Code korrekt ist. Du musst an dieser Schleuse vorbeikommen und zwar schnell.
Superpermutationen auf den Punkt gebracht
Eine Permutation sind alle möglichen Kombinationen eines bestimmten Ziffernsatzes. Beispielsweise lauten alle Permutationen der Ziffern 0, 1, 2 wie folgt:
012, 021, 102, 120, 201 und 210.
Wenn wir alle diese Permutationen miteinander verketten, erhalten wir eine Superpermutation:
012021102120201210
Diese Superpermutation enthält alle Permutationen von 0, 1, 2, aber es ist möglich, eine kürzere zu machen. Ich werde hier etwas überspringen, aber die kürzeste Superpermutation dieser Ziffern ist:
012010210
Für unsere Absichten und Zwecke ist dies im Wesentlichen die kürzeste Ziffernfolge, die alle möglichen Permutationen dieser Ziffern enthält, dh eine Superpermutation.
Aufgabe
Ihre Aufgabe ist etwas schwieriger als das oben gezeigte Beispiel für Superpermutation, da Sie sich um zwei weitere Stellen Sorgen machen müssen. - Wenn Sie nicht über Superpermutationen gelesen haben oder mein Beispiel oben etwas unklar war, empfehle ich Ihnen dringend, diesen großartigen Artikel von Patrick Honner zu diesem Thema zu lesen (diese Herausforderung war sehr stark von seinem Artikel inspiriert, also ein großes Lob an ihn): https://www.quantamagazine.org/unscrambling-the-hidden-secrets-of-superpermutations-20190116/ . Ihr Ziel ist es, das kürzestmögliche Programm zu schreiben, das eine Superpermutation der Ziffern 0 bis 4 erzeugt.
Wertung
Ihr Programm nimmt keinerlei Eingaben entgegen und erzeugt eine Superpermutation der Ziffern von 0 bis 4. Diese resultierende Superpermutation muss auf der Konsole ausgedruckt oder dem Benutzer sichtbar angezeigt werden, soweit dies von der Sprache Ihrer Wahl vorgegeben wird. Dies muss nicht die kürzestmögliche Permutation sein, es muss nur eine gültige Superpermutation sein. Aus diesem Grund besteht das Ziel darin, das kürzeste Programm mit der kürzesten Superpermutation zu schreiben. Berechnen Sie Ihre Punktzahl also wie folgt:
Dateigröße (Bytes) * generierte Superpermutationslänge (Ziffern)
Wenn ich zum Beispiel ein 40-Byte-Programm hatte und meine Superpermutation 153 Stellen lang ist, lautet meine Punktzahl:
40 * 153 = 6120
Ziel ist es wie immer, diese Punktzahl so niedrig wie möglich zu halten.
Vorlage
So kannst du deine Antwort posten:
Sprache | Ergebnis
Link zum Code in der Arbeitsumgebung (falls möglich)
code snippet
Code Erklärung usw.
Finalitäten
Dies ist eine meiner ersten Fragen auf dieser Site. Sagen Sie mir bitte, wenn ich etwas vermisse oder ein Teil meiner Herausforderung unklar ist. Vielen Dank und viel Spaß beim Golfen!
quelle
Antworten:
05AB1E , Score = 1673 (7 Bytes · 239)
Probieren Sie es online!
Wie es funktioniert
Pyth , score = 1944 (9 Bytes · 216)
Probieren Sie es online!
Wie es funktioniert
quelle
vy3yJ
speichert ein Bytem+d
->+R
ein Byte.Brachylog , Score = 2907 (19 Bytes × 153)
Zu langsam , etwas zu sehen, aber wenn Sie ändern ,
4
indem2
Sie es testen können: Online ausprobieren!Dies findet die kürzeste Superpermutation als solche:
quelle
JavaScript (ES6), 26975 (325 * 83 Byte)
Bei diesem Scoring-System gibt es wenig Raum für etwas zwischen "Hardcode für die optimale Supermutation" und "Verwenden einer kurzen integrierten Funktion zum Verketten aller Permutationen". , zumindest in Nicht-Esolangs.
Hier ist sowieso ein Versuch.
Probieren Sie es online!
Es generiert eine Zeichenfolge von 325 Bytes:
quelle
26975/153-153>23
)n
Suffix, dasconsole.log
ausgegeben wird, nicht zählen )Python 2 , Score:
24327151471285212628 (154 * 82 Byte)Probieren Sie es online!
Ebenfalls:
Python 2 , 12628 (154 * 82 Byte)
Probieren Sie es online!
quelle
05AB1E , Score:
53552160 (216 * 10 Byte )Port von @AndersKaseorgs Pyth-Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus.
Erläuterung:
quelle
Oktave 27 x 442 = 11934
Probieren Sie es online!
Es stellt sich also heraus, dass es kürzer ist , naiv alle Permutationen zu generieren und dann auf die kürzeste Teilzeichenfolge zu kürzen, die noch eine gültige Superpermutation ist, als die kürzeste Superpermutation zu generieren. Leider ist die Partitur diesmal kein Palindrom.
Oktave 97 x 153 = 14841
Probieren Sie es online!
Eintrag für ein paar Dinge aktualisiert
a++
ist nicht für symbolische Zahlen implementiert.contains()
ist in Octave nicht implementiert. Ersetzt durchany(regexp())
.a
sehr nahe an der 153-Länge liegende Superpermutation eingegeben . Dadurch kann die Lösung überprüft werden.quelle
CJam (6 * 240 = 1440)
Online-Demo , Validierung (gibt den Index aus, bei dem jede Permutation von gefunden werden
0..4
kann; er muss die Ausgabe reduzieren, da das Originalprogramm eine geeignete Ausgabe für stdout liefert, aber was es auf dem Stapel ablegt, ist nicht direkt verwendbar).Nähern Sie sich von Sanchises gestohlen , obwohl die Permutation der Reihenfolge der CJam unterschiedlich ist, eine andere Teilkette geben.
CJam (22 * 207 = 4554)
Online-Demo , Validierung .
Präparation
Dies verwendet eine einfache rekursive Konstruktion.
quelle
Gelee , 3000 (600 * 5 Bytes)
Probieren Sie es online!
quelle
Kohle , 29 Bytes, Ausgabelänge 153, Punktzahl 4437
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung: Wie bei @TFeld drucke ich nur die Hälfte einer Superpermutation und spiegele sie. Ich habe die Superpermutation mit folgendem Code berechnet:
Dies entspricht einem 45-Byte-Programm in Charcoal und hätte somit 6885 Punkte erzielt.
quelle
MATL , 16 × 442 = 7072
Probieren Sie es online!
MATL Port meiner Octave Antwort. -442 dank Luis Mendo
quelle
Japt-P, 2376 (11 x 216)
Versuch es!
-1 Byte danke an @ Shaggy!
Port of Anders Kaseorgs Pyth-Antwort .
quelle
q<space>
;)Perl 6 , 7191 (153 * 47 Byte)
Probieren Sie es online!
Findet die erste Zahl, die alle Permutationen der Ziffern 0 bis 4 enthält. Die Ausführung nimmt viel Zeit in Anspruch, aber Sie können sie mit den ersten beiden Permutationen
0
und testen0,1
quelle
Wolfram Language (Mathematica) , 153 × 95 Bytes, 14535
Probieren Sie es online!
quelle