Programm A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
Programm B ist über 8 KB lang, so lange, dass die Verknüpfung unterbrochen wird, sodass ich das Ganze nicht einfügen werde. Hier ist ein Beispiel:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
Ich konnte keinen Weg finden, ein NUL
Byte zum Laufen zu bringen, weshalb Programm B nur 255 eindeutige Zeichen enthält. Programm B besteht im Wesentlichen aus 255 Kopien eines einzelnen Programms, wobei jedes Mal ein einzelnes irrelevantes Byte geändert wird und die ersten 254 Ausführungen ignoriert werden.
Zur Erklärung beginne ich mit dieser vereinfachten Version von A, damit das resultierende B leichter zu diskutieren ist.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Dieses Programm basiert auf dem Basis-Japt-Quine, der für Nutzdaten geeignet ist . Die Zeichenfolge am Anfang enthält ein Duplikat des restlichen Programms, iQ ²
fügt ein Zitat und Duplikate ein, um eine Zeichenfolgendarstellung des gesamten Programms zu erstellen, und ¯23
schneidet dann sich selbst und alles danach ab. Die resultierende Zeichenfolge ist ein Programm, das Programm A ausgibt :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Ich werde diese Zeichenfolge als bezeichnen U
.
Die letzte Zeile von A dupliziert U
einige Male mit jeweils einer kleinen Änderung. Genauer gesagt, für jede Zahl X
in dem Bereich [1...3]
gibt es , "#c" + U
wenn c
das Zeichen mit charCode ist X
. Das Standardverhalten von Japt ist die Ausgabe dieser Zeichenfolgen ohne Anführungszeichen und durch Kommas getrennt. Dies ist also die Ausgabe unseres vereinfachten A (beachten Sie, dass zwischen jedem #
und "iQ
:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Wir werden diese nennen Simplified B .
Vereinfachtes B hat eine einfache Struktur, die zwischen #c
und wechselt U
. Zum Glück für diese Antwort wird jedes #c
und U
als durch ein Komma getrennt behandelt, und in dieser Situation hat das Verhalten von allem außer dem allerletzten U
keine Auswirkung auf die Ausgabe. Der einzige Teil von Simplified B, der sich auf die Ausgabe auswirkt, ist folgender:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Das ist identisch mit dem U
, was wir bereits wissen. Outputs Simplified A.
Der einzige Unterschied zwischen "Vereinfachtes A" und "Programm A" besteht darin, dass [1...3]
das echte Programm keine Kopien für den Bereich erstellt , sondern Kopien für den Bereich [1...256]
. Das führt zu 256 Versionen, von denen #c
jede ein anderes Zeichen hat, obwohl die letzte Version "Ā" ein Mehrbytezeichen ist, sodass keine eindeutigen Bytes hinzugefügt werden, aber alles außer dem letzten U
wird weiterhin ignoriert.