Programa A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
El programa B tiene más de 8kB de longitud, tanto que el enlace se rompe, por lo que no pegaré todo. Aquí hay una muestra:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
No pude encontrar una manera de hacer que un NUL
byte funcione, por eso el programa B solo tiene 255 caracteres únicos. El programa B consiste esencialmente en 255 copias de un solo programa, donde se cambia un solo byte irrelevante cada vez, y se ignoran las primeras 254 ejecuciones.
Para la explicación, comenzaré con esta versión simplificada de A para que la B resultante sea más fácil de discutir.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Este programa se basa en la quine Japt básica con capacidad de carga útil . La cadena al comienzo contiene un duplicado del resto del programa, iQ ²
inserta una cita y duplica para crear una representación de cadena de todo el programa, y luego se ¯23
recorta a sí mismo y todo lo que sigue. La cadena resultante es un programa que genera el Programa A :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Me referiré a esta cadena como U
.
La última línea de A se duplica U
varias veces con un pequeño cambio cada vez. Específicamente, para cada número X
en el rango [1...3]
, genera "#c" + U
dónde c
está el carácter con charcode X
. El comportamiento predeterminado de Japt es generar esas cadenas sin comillas y separadas por comas, por lo que esta es la salida de nuestra A simplificada (tenga en cuenta que hay un byte no imprimible entre cada uno #
y "iQ
:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Llamaremos a esto B simplificado .
B simplificado tiene una estructura simple, alternando entre #c
y U
. Afortunadamente para esta respuesta, cada uno #c
, y U
se trata como separados por una coma, y en esta situación el comportamiento de que es todo excepto el último U
no tiene ningún efecto en la salida. La única porción de B simplificado que afecta la salida es esta:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Lo cual es idéntico al U
que ya conocemos salidas A. simplificada
La única diferencia entre A simplificado y Programa A es que, en lugar de generar copias para el rango, [1...3]
el programa real genera copias para el rango [1...256]
. Eso da como resultado 256 versiones de #c
cada una de las cuales tiene un carácter diferente, aunque la última versión "Ā" es un carácter de varios bytes, por lo que no agrega bytes únicos, pero todo, excepto el último, U
aún se ignora.