Su tarea es hacer un programa que imprima su propia fuente.
"¡Oye, ya tenemos este desafío, y toneladas de variaciones! ¿Por qué estás haciendo otro?" puede preguntar, pero este será uno de los más difíciles (con suerte, de todos modos).
Su quine debe estar "endurecido por mutación", lo que significa que la quine, incluso cuando cualquiera de sus caracteres está duplicado en su lugar, debe generar el código fuente del programa original.
Por ejemplo, si tiene una quine (el siguiente ejemplo no está escrito en ningún idioma, es solo pseudocódigo):
abcd
Todos estos programas deben generar abcd
:
aabcd
abbcd
abccd
abcdd
(En cada uno de esos programas, a
, b
, c
y d
son cada duplicado en el lugar, lo que significa que el personaje duplicada se coloca directamente después del carácter original).
Reglas:
- Se aplican las reglas estándar de quine.
- Un carácter de varios bytes cuenta como un carácter, y el carácter no se "divide" en sus bytes respectivos cuando se duplica.
Este es el código de golf , por lo que gana el código más corto en bytes.
fuente
0
y00
en CJam ambas salidas0
.0
no es una quine adecuada.Respuestas:
> <> , 56 bytes
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 empujamosEl 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.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 siguienteo
imprimirá el carácter sobre el espacio en su lugar.fuente