Concepto
Escriba un programa que genere código en su lenguaje de programación. Ese código, cuando se ejecuta, debe generar el programa original.
Reglas
- Como se trata de una trampa engañosa, puede leer el código fuente original.
- El primer programa de salida debe estar en el mismo idioma que el programa original.
- No puede generar una quine regular. Los dos programas deben ser diferentes.
- Se aplican lagunas estándar.
- Este es el código de golf, por lo que la respuesta más corta gana, sin embargo, no se seleccionará.
Respuestas:
Bash + coreutils, 11 bytes
Esto imprime
Pruébalo en línea!
A su vez, eso imprime
fuente
tr
comando se redirige a$0
su propio código fuente. Por lo tanto, es "engañoso".Caracoles, 0 bytes
El segundo programa es
El primer programa cuenta el número de coincidencias del patrón vacío en la entrada vacía (que realmente tiene área 0, pero el patrón siempre se ejecuta al menos una vez como un truco para permitir que los programas decidan qué quieren imprimir en la entrada vacía). El segundo programa comienza con un cuantificador (como
{1}
en regex), que causa un error de análisis. Como el programa no se analiza correctamente, STDOUT es la cadena vacía.fuente
7 , 2 bytes
7 usa un juego de caracteres de 3 bits, pero toma la entrada empaquetada en bytes (y según el meta, los idiomas con juegos de caracteres de subbytes se cuentan usando bytes para el archivo en el disco ). Aquí hay un
xxd
volcado del programa:Al entregar este archivo al intérprete 7, generará el siguiente programa:
que a su vez generará el programa original nuevamente.
Entonces, ¿qué está pasando aquí? No hay lectura de fuente involucrada (en realidad, no creo que sea posible leer la fuente en 7), aunque podría decirse que el programa está engañando de otra manera; Déjame saber lo que piensas. Así es como funciona el programa. (Tenga en cuenta que cada comando 7 tiene dos variantes, algunas de las cuales no tienen nombres y no pueden aparecer en el programa original. Hay doce comandos en total, en seis pares. Estoy usando negrita para comandos activos, no negrita para pasivos comandos, y en los casos en que el comando activo no tiene nombre, lo estoy dando el mismo nombre que el comando pasiva correspondiente y confiando en la negrita de distinguir. en el caso en que los dos son llamados, por ejemplo,
7
que es la variante activa de1
, cada comando tiene su propio nombre y la negrita es solo un resaltado de sintaxis).En este punto, el intérprete 7 ve que la parte superior de la pila contiene comandos (
2
y3
) que no son representables, por lo que se escapa de la parte superior de la pila, produciendo723
(que es). El primer resultado del comando selecciona el formato de salida; en este caso, es el formato 7, "formatea la salida de la misma manera que el programa". Entonces, los comandos obtienen la salida empaquetada en bytes. Entonces el programa continúa:En este punto, no hay nada más que elementos de pila vacíos en la pila, por lo que el programa se cierra. Salimos
23
antes. Si escapamos237
(y tenemos que hacerlo, porque contiene comandos no representables), obtenemos7231
. Eso obtiene salida directamente, haciendo la salida final del programa237231
(formateado de la misma manera que el programa, es decir, empaquetado en bytes). Eso es4fa67f
. (Se puede notar que el1
tenía sentido en términos de afectar el resultado; la única razón por la que existe es para hacer que los dos programas sean diferentes).Correr
237231
procede casi exactamente de la misma manera; la diferencia es que lo inútil se1
ejecuta justo después de la primera impresión (y el elemento vacío se elimina implícitamente la segunda vez que se alcanza el final actual del programa). Nuevamente, el resultado231
final se genera a sí mismo, el resultado23
final se genera a sí mismo precedido por un7
, y obtenemos231723
el programa original.El observador podría notar que los dos programas, a pesar de tener la misma longitud en el octal "nativo" del lenguaje, tienen diferentes longitudes en el disco. Esto se debe a que un programa 7 puede rellenarse con un número arbitrario de 1 bit, y el formato empaquetado descarta el relleno final. Así es como ocurre la codificación:
En otras palabras, dos bytes
4C
F4
son suficientes para representar el programa, así que eso es todo lo que usé.fuente
Python 3,
297279251243225218208180126111 bytesNo hacer trampa:
Esto imprime:
que, cuando se ejecuta, imprime el programa original.
fuente
Lote, 14 bytes
Que cuando se ejecuta como
cyclicquine.bat
salidasQue cuando se ejecuta genera el archivo por lotes original.
fuente
RProgN , 4 Bytes.
La comunidad parece considerar este tipo de cosas como una trampa engañosa , lo que satisface los criterios.
Con una nueva línea al final.
Esto imprime
Con una nueva línea al final, que imprime el primer código.
RProgN imprime el estallido de la pila, de arriba a abajo.
Pruébalo en línea!
fuente
1\n1\n
en RProgN sería una quine no trampa, porque cada uno se imprime entre sí (y solo se consideraría hacer trampa si cada uno se imprime). Todo lo que esto realmente implica es que hacer trampa en quines puede ser difícil de definir a veces. (Sin embargo, esta respuesta es correcta de cualquier manera, porque la pregunta en realidad no requiere la quine a engañar, simplemente permite que.)1\n
es técnicamente una quine válida, ya1
que no es una constante, sino una llamada a una función que empuja1
a la pila.Jolf, 6 bytes
Cuando se ejecuta, esto genera:
Que a su vez sale
1q_a_q
.Pruébalo aquí!
Explicación
fuente
JavaScript (ES6),
696059 bytesSalidas:
-1 byte (@ETHProductions): use 0 en regex en lugar de \ d
fuente
n=>1-n
lugar den=>+!+n
.1
terminará reemplazado por la expresión regular.Bash + Sed, 15 bytes
La misma idea que la respuesta de Dennis .
fuente
Bash,
Caty Rev,1916 bytes-3 gracias a @izabera
fuente
Bash
,Tac
y `Rev?rev $0 # 0$<space><space>ver
por alguna razón no puedo poner dos espacios en un comentariotac
rev
-ed escat
.> <>, 16 bytes
Pruébalo aquí!
Salidas
Esta es una modificación de la que se proporciona aquí . No estoy seguro de si está haciendo trampa, lee el cuadro de código y lo genera.
fuente