Ihre Aufgabe ist es, das Quine mit der längsten Iterationsdauer zu erstellen , wobei die Länge jedes Programms in der Sequenz durch 500 Bytes begrenzt ist.
Das heißt, wenn Sie die folgenden Schritte wiederholen:
- Beginnen Sie mit Ihrem ersten Programm
- Führen Sie das aktuelle Programm aus
- Fahren Sie mit Schritt 2 fort
Sie kehren schließlich zu Ihrem ursprünglichen Programm zurück. Die Anzahl der Programme im Zyklus ist Ihre Punktzahl, die Sie maximieren möchten.
Keines der Programme kann Fehler auslösen. Jedes Programm muss auf die gleiche Weise ausgeführt werden (z. B. keine unterschiedlichen Versionen, Implementierungen, Compileroptionen, Plattformen usw.) (BEARBEITEN: Ja, ein externer Status wie der eines Pseudozufallszahlengenerators wurde in den letzten eingeschlossen Anweisung. Der externe Zustand muss nach jedem Lauf "zurückgesetzt" werden. Wenn Sie echte Zufallszahlen verwenden, wird der ungünstigste Fall angenommen.)
Was diese Herausforderung von der am längsten wiederholten Quine unterscheidet (außer 100 gegenüber 500), ist, dass jedes Programm im Zyklus auch 500 Byte oder weniger umfassen muss. Dies bedeutet, dass der längste mögliche Zyklus (256 ^ 501 - 1) / 255 oder weniger beträgt. Das ist natürlich eine große Zahl, aber nicht so groß, wie viel Code für die Berechnung benötigt wird. Bei der Herausforderung geht es also darum, so viele der (256 ^ 501 - 1) / 255-Möglichkeiten wie möglich zu nutzen, und nicht um eine geschäftige Biber-Herausforderung.
Die Programme dürfen nicht auf ihren eigenen Quellcode zugreifen. Ein leeres Programm ist jedoch zulässig, wenn Sie möchten (solange Sie die anderen Regeln befolgen).
Da es schwierig wäre, die Programme manuell zu überprüfen, können Sie die Punktzahl mit theoretischen Methoden ermitteln. Sie müssen Ihrem Programm eine Erläuterung der Punktzahl und der Richtigkeit beifügen. Wenn Sie die Punktzahl nicht herausfinden können, können Sie stattdessen eine Untergrenze der Anzahl der Programme im Zyklus als Defacto-Punktzahl verwenden. Sie können dies aktualisieren, wenn Sie bessere Untergrenzen finden oder wenn Sie die genaue tatsächliche Punktzahl finden.
Dies ist eine Code-Herausforderung , daher gewinnt die höchste Punktzahl!
BEARBEITEN: Es wird empfohlen, dass Sie schreiben, was Ihre Partitur in wissenschaftlicher Notation ist, damit die Antworten leichter vergleichbar sind. Es ist vollkommen in Ordnung, auch andere Formen der Partitur zu haben, insbesondere wenn diese klarer mit Ihrem Programm verbunden sind. Die Leser werden außerdem aufgefordert, frühere Antworten zu bearbeiten, um dies zu berücksichtigen.
quelle
Antworten:
Perl 6 ,126398≈ 8,86 × 10835 Iterationen
Probieren Sie es online!
Dies durchläuft alle möglichen Kombinationen der ersten 126 Bytes mit einer Länge von 398 und darunter (mit Ausnahme von Zeichenfolgen mit führenden NUL-Bytes). Wenn Sie sehen möchten, dass es tatsächlich zur ersten Iteration zurückkehrt, können Sie die Länge auf 1 reduzieren, indem Sie das Limit wie folgt ändern .
Erläuterung:
Bei jeder Iteration wird die Zeichenfolge inkrementiert, die in der Form der Basis 126 gespeichert ist, und anschließend wieder in die Basis 126 konvertiert. Dies geschieht so lange, bis eine Zeichenfolge mit der Länge 399 erreicht wird, und anschließend wird die Zeichenfolge zurückgesetzt, um sie wieder zu leeren. Stellen Sie sich die Zahl stattdessen mit zehn Bytes vor, wenn Sie Probleme bei der Konzeption haben. Erhöhen Sie ab104 - 1 Iterationen (einschließlich
0
bis zu 4 Stellen1000
und setzen Sie sie zurück. Dies sind0
oder leere Zeichenfolge in meinem Programm).quelle
Runische Enchantments ,
64654 106; 122 387 -1 ≈ 2,638 × 10 807 IterationenProbieren Sie es online!
Warnung: Das
€
wird falsch angezeigt, es sollte `` (0x80) sein.Verwenden Sie
͍
anstelle des Stapels eine Zeichenfolge und die mit geänderten Stapeloperatoren, um eine Zeichenfolge anstelle des Stapels zu ändern (siehe vorherige Überarbeitung). Als solches ist jedes Zeichen auf 1 Byte begrenzt (Bereich 0-127, abzüglich der problematischen Zeichen), jedoch mit mehr als 3-mal so vielen Zeichen (aufgrund der geringeren Verarbeitungsrate, da Unicode-Zeichen nicht übersprungen werden müssen) neben einigen anderen Byteeinsparungen) wird eine höhere Anzahl von Iterationen erzielt.Wenn die Codierung als echter Big-Endian zulässig ist ( dh , wenn Bytewerte über 127 vorliegen, ohne dass
0x00
Bytes dazwischengeschoben werden), kann dies zu Iterationen von 251 387 -1 ≈ 4.717 × 10 928 führen . Die lateinische Kodierung von TIO verhindert dies jedoch, wie Erik der Outgolfer in seiner Antwort auf Python 2 festgestellt hat. Ich müsste überprüfen, ob es lokal funktioniert, bevor ich diese Punktzahl beanspruche.Sollte der Lage sein , zu ersetzen ,
f1+0B
mit'0B
(es gibt eine unprinting0x16
dort), aber es kämpfte mich (Dinge wollte nicht Zweig / Überspringen / Rückkehr richtig), so dass ich es allein gelassen. Dies würde die Big-Endian-Struktur von 387 auf 388 erhöhen.quelle
DOS COM, 49 Bytes, Periode 2 ^ 3608
Originalbaugruppe zum Erstellen:
Dieses kleine Juwel schreibt die nächste Phase an q.com und nicht an die Standardausgabe, da das Terminal keine Nullen und andere Dinge verarbeiten kann. Die Root-Quine-Technik entspricht der Stringifizierung, und der Nutzlastraum wird als 3608-Bit-Zähler verwendet. Aufgrund der Funktionsweise von DOS enthält der Anfangszustand des Zählers Ablagerungen von allem, was sich vor seiner ersten Ausführung im Speicher befand.
Die ursprüngliche 49-Byte-Eingabe ist nicht erreichbar. Wenn Sie diese also mit 500 Byte bewerten möchten, fahren Sie fort.
quelle
C # (Visual C # Interactive Compiler) , Flags:
/u:System.Numerics.BigInteger
und/r:System.Numerics
Prüfungsergebnis: 10 332
Vielen Dank an JoKing, der meine Punktzahl von 10 255 * 2 - 1 auf jetzt erhöht hat !
Probieren Sie es online!
Erläuterung
Inkrementiert eine BigInteger-Zahl bei jeder Iteration, bis ihre Länge zu groß wird. In diesem Fall kehren wir sofort zum ursprünglichen Quine zurück.
quelle
Beachten Sie, dass eine nachgestellte Zeile vorhanden ist. Es könnte oben entfernt werden, wenn der Syntax-Textmarker seinen Weg erzwingt.
Leider können Sie dieses Programm nicht in TIO ausführen, da es in Latin-1 codiert ist.
Oben,
s
enthält 219 0x01 Bytes. Nachdem das Programm ausgeführt wurde, wird die Quelle mit Ausnahme eines Unterschiedss
ausgegeben : Wurde wie eine Big-Endian-Zahl zur Basis 252 inkrementiert, sodass das Zeichen ganz links auf 0x02 "inkrementiert" wurde. Die Bytes 0x00, 0x22, 0x25 und 0x5C werden vermieden. Wenn also ein Zeichen der Zeichenfolge nach der Inkrementierung eines dieser Zeichen wird, wird das Zeichen selbst erneut inkrementiert."
): Es besteht die Gefahr, dass sich drei 0x22-Bytes in einer Reihe bilden"""
oder das letzte Zeichen der Zeichenfolge wird"
, sodass die Zeichenfolge vorzeitig geschlossen wird.%
): printf artige Zeichenfolge Formatierung vor Beendigung des quine Skeletts verwendet wird, so dass ein%
nicht benachbart zu einem anderen%
ins
wird zu Problemen führen. Leider ist es nicht möglich, die Formatierung neu zu ordnen, um diese Einschränkung zu vermeiden.\
): Es besteht die Möglichkeit, dass das\
Zeichen nicht wörtlich, sondern als Escape-Zeichen in der Zeichenfolge verwendet wird, sodass es vermieden wird.Daher sind 252 von 256 Bytes verwendbar. Wenn es
s
219 0xFF (ÿ
) Bytes enthält, wird es einfach auf 219 0x01 Bytes zurückgesetzt, wodurch der Zyklus abgeschlossen wird.quelle
251 39Abhängigkeit von entferntText
251 122Golf-Inkrementierungsfunktion251 128kombinierte Präfix- und Suffix-Quellzeichenfolgen251 188entfernte Abhängigkeit vonGast.GenLibTest
Präsentiert im xxd-Format wegen nicht druckbarer / ungültiger UTF-8:
Probieren Sie es online!
Erhöht einen 226-Byte - String durch alle Byte - Werte ohne
\0
,\n
,\r
,'
und\
.Der Grund, warum wir diese Zeichen vermeiden, ist:
\0
macht den Compiler wütend\n
und\r
kann nicht in Charlists angezeigt werden'
würde die Charlist beenden\
könnte Probleme verursachen, wenn es vor einem flüchtigen Charakter kommtSobald die Zeichenfolge vollständig ist, wird sie mit allen Zeichenfolgen
\377
umgebrochen\001
, wodurch das ursprüngliche Programm erhalten wird.quelle
C2 80
. Entspricht dies dem Verhalten auf Ihrem lokalen Computer?Gol> <> , 70 Bytes, 39039000 Iterationen
Wow, das ist viel niedriger als ich dachte ... Nächster Schritt! Machen Sie es mehr Iterationen !!!
Probieren Sie es online!
quelle