> <> , 56 bytes
^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
Pruébalo en línea! o verificar todas las mutaciones .
Cómo funciona el programa original (obsoleto)
El intérprete comienza en la celda (0, 0) . ^
establece la dirección hacia arriba , por lo que el puntero de instrucción (IP) se ajusta a la celda (0, 20) .
'
activa el modo de cadena: hasta que '
se encuentre el siguiente , todos los caracteres debajo de la IP se insertan en la pila. Lo mismo '
se encuentra nuevamente después de envolver, así que empujamos
d3*}^^:84*=?~oao0f.^
El IP aterriza en (0, 19) , aún hacia arriba. La ejecución d3*}
empuja 13 = 0xd , luego 3 , multiplica ambos valores ( 39 / comilla simple ), luego gira la pila hacia la derecha. Esto deja la pila de la siguiente manera.
'd3*}^^:84*=?~oao0f.^
Las siguientes dos instrucciones ( ^
) no hacen nada en este momento.
:84*=
duplica la parte superior de la pila, empuja 8 y 4 , los multiplica ( 32 / espacio ), luego prueba el carácter duplicado para la igualdad con el espacio . Para el programa inalterado, esto siempre empujará 0 .
?
omite la siguiente instrucción si la parte superior de la pila es falsa. Para el programa original, siempre lo es, por ~
lo que siempre se omite.
oao
aparece e imprime la parte superior de la pila, empuja un avance de 10 / línea , luego abre e imprime el avance de línea .
Finalmente 0f.
salta a la celda (0, 15) (la más baja ^
), comenzando de nuevo con el siguiente personaje en la pila.
Una vez que la pila está vacía, se ha impreso todo el código fuente. :
fallará y el programa se cerrará.
Cómo funcionan los programas mutados (obsoletos)
Duplicar cualquier carácter sin salto de línea solo extenderá el programa horizontalmente. Como el programa se ejecuta verticalmente, estas instrucciones adicionales nunca se ejecutarán.
Duplicar cualquier salto de línea antes del fondo inferior ^
desplazará las celdas (0, 14) y (0, 15) a (0, 15) y (0, 16) . 0f.
ahora saltará a la celda antes de la parte inferior ^
, que también es a ^
, por lo que el cambio no afecta al programa.
Finalmente, cualquier carácter de salto de línea duplicado también alterará la cadena. Las líneas cortas se rellenan con espacios, por lo que se insertará un 32 / espacio en la posición del salto de línea. 84*=
presionará 1 por espacio, por lo ?
que no omite la siguiente instrucción. En este caso, ~
aparece y descarta el espacio , por lo que lo siguiente o
imprimirá el carácter sobre el espacio en su lugar.
0
y00
en CJam ambas salidas0
.