Programma A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
Il programma B è lungo più di 8 KB, così a lungo che il collegamento si interrompe, quindi non incollerò il tutto. Ecco un esempio:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
Non riuscivo a trovare un modo per far funzionare un NUL
byte, motivo per cui il programma B ha solo 255 caratteri univoci. Il programma B consiste essenzialmente di 255 copie di un singolo programma, in cui un singolo byte irrilevante viene cambiato ogni volta e le prime 254 esecuzioni vengono ignorate.
Per la spiegazione, inizierò con questa versione semplificata di A in modo che la B risultante sia più facile da discutere.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Questo programma si basa sul Japt Quine di base in grado di supportare il payload . La stringa all'inizio contiene un duplicato del resto del programma, iQ ²
inserisce una citazione e duplicati per creare una rappresentazione di stringa dell'intero programma, quindi ¯23
ritaglia se stesso e tutto ciò che lo segue. La stringa risultante è un programma che emette il Programma A :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Mi riferirò a questa stringa come U
.
L'ultima riga di A si duplica più U
volte con una piccola modifica ogni volta. Specificamente, per ogni numero X
nell'intervallo [1...3]
emette "#c" + U
dove c
è il carattere con charcode X
. Il comportamento predefinito di Japt è di generare quelle stringhe senza virgolette e separate da virgole, quindi questo è l'output della nostra A semplificata (nota che c'è un byte non stampabile tra ciascuna #
e "iQ
:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Chiameremo questo B semplificato .
B semplificato ha una struttura semplice, alternando tra #c
e U
. Fortunatamente per questa risposta, ciascuno #c
e U
viene trattato come separato da una virgola, e in questa situazione il comportamento di questo è tutto tranne l'ultimo U
non ha alcun effetto sull'output. L'unica porzione di B semplificata che influenza l'output è questa:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Il che è identico a U
quello che già conosciamo come output semplificato A.
L'unica differenza tra A semplificato e Programma A è che invece di generare copie per l'intervallo [1...3]
il programma reale genera copie per l'intervallo [1...256]
. Ciò si traduce in 256 versioni di #c
ognuna delle quali ha un carattere diverso, sebbene l'ultima versione "Â" sia un carattere multi-byte, quindi non aggiunge alcun byte univoco, ma tutto tranne l'ultimo U
viene comunque ignorato.