El programa A emite el código del programa B cuando se ejecuta, y B emite la fuente de A.
Requisitos:
- Solo un idioma en ambos programas
- Los programas son diferentes. Un programa que se genera solo no califica.
- Ambos programas no están vacíos o tienen al menos 1 byte de longitud. Las nuevas líneas finales tanto en la fuente como en la salida se ignoran
stdin está cerrado.No lea nada (por lo que no puede leer la fuente y manipularla). La salida va a stdout.
Editar: stdin está conectado a/dev/null
. Puede pedir que se cierre si se aclara.- No use
random
funciones.
Adicional:
- Dar explicaciones si es posible
La puntuación es la longitud total . La nueva línea final no cuenta si no afecta el programa.
Respuestas:
CJam , 13 + 13 = 26 bytes
Pruébalo en línea!
Salidas
Explicación
Como
e\
es conmutativo en su segundo y tercer operando, el otro programa hace exactamente lo mismo, intercambiandoZ
yY
volviendo a su orden original.fuente
CJam ,
11 + 13 = 2411 + 12 = 23 bytesPruébalo en línea!
Salidas:
La salida tiene 13 bytes, pero:
Así que cambié el espacio a una nueva línea para aprovechar eso.
Se basa en la quine adecuada más corta de CJam:
Y
N^
consiste en xor la cadena con una nueva línea, que agrega una nueva línea si no hay una nueva línea, y elimínela si la hay, para una cadena en la que cada carácter es único.Creo que he visto ese quine en la pregunta quine, pero no pude encontrarlo.
fuente
RProgN 2 , 3 + 3 = 6 bytes
Primer programa:
Pruébalo en línea!
Segundo programa:
Pruébalo en línea!
-2 gracias a Martin Ender .
fuente
C, 95 + 95 = 190 bytes
¡Gracias a @immibis por guardar 16 * 2 bytes!
Pruébalo en línea!
Salidas:
Pruébalo en línea!
Qué salidas:
fuente
Javascript, 67 + 67 = 134 bytes
1er programa:
2do programa:
Esto se basa en la respuesta de Herman Lauenstein a Tri-interquine
Javascript (código fuente de lecturas no válidas),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 bytesahorró 20 bytes gracias a Tushar, 6 bytes gracias a Craig Ayre, y guardó 16 bytes gracias a kamoroso94
1er programa:
2do programa:
Intercambia los 1 con los 0 y viceversa. Ambos hacen lo mismo, solo producen resultados diferentes debido a su código fuente.
fuente
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=>a
resultando enf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
y eliminar los parens de la devolución de llamada de reemplazo como sugirió @Tushar:a=>+!+a
"f="+(f+"")
con("f="+f)
para -3 bytes./0|1/g
y/1|0/g
con0
y1
respectivamente para -5 bytes.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63 + 63 = 126 bytes
Pruébalo en línea
Primer programa:
salidas:
Segundo programa:
Salidas:
fuente
JavaScript ( JsShell ), 35 + 34 = 69 bytes
1:
2:
fuente
Mathematica, 43 + 44 = 87 bytes
y
fuente
-1
al final, no-1 1
.asmutils sh, 16 + 16 bytes, abusando de la regla "stdin is closed".
Dado que stdin está cerrado y sh abrirá su script en el primer controlador disponible (en lugar de moverlo a un controlador con un número alto como lo hacen los shells modernos), tr termina leyendo una copia del script sin haberlo abierto nunca.
Este interquine es capaz de cargar, pero insertar una carga útil es complicado.
Además, esta versión original abusa de algunos errores locos en el núcleo antiguo que usaba en esos días. (No sé qué pasa con ese kernel, descubrí más tarde que también tenía diferentes números mayores y menores para los dispositivos). Si corrige los cambios de ABI que se rompieron como asmutils, la interquina aún no funcionará. Olvidé si asmutils sh tiene ejecutivo o no, pero si lo tiene, esta es una versión moderna:
Esto abusa de un error deliberado en asmutils dd; tiene una optimización de rendimiento que llama a llseek para omitir si puede, pero para guardar un byte pasa SEEK_SET en lugar de SEEK_CUR. Esto da como resultado basura en stderr pero la interquina en stdout. Asmutils dd no tiene una opción para suprimir el correo basura más stderr.
fuente
/dev/null
? De todos modos, buen trabajo!#!/bin/sh
?Baja carga , 32 + 32 = 64 bytes
Pruébalo en línea!
Pruébalo en línea!
fuente
Lisp común, 58 caracteres
... o 24 caracteres si no le importa suponer que
*print-circle*
está configurado globalmente enT
:La representación impresa del código se lee como una estructura cíclica, donde
#1#
apunta de nuevo a la siguiente celda de contras#1=
. Cotizamos programas para que no se ejecuten. Como*print-circle*
es T, el REPL se encarga de emitir tales variables de lectura durante la impresión; esto es lo que imprime el código anterior y devuelve:Cuando evaluamos el código anterior, imprime:
Si desea mantener el valor predeterminado para
*print-circle*
, que es NIL en una implementación conforme, deberá volver a vincular la variable temporalmente:Dentro del cuerpo del LET, imprimimos cosas con
*print-circle*
ser T. Entonces obtenemos:Como puede ver, el nuevo programa no se vuelve a unir
*print-circle*
, pero como estamos utilizandowrite
, que es la función de bajo nivel llamada porprint
, podemos pasar argumentos adicionales como:circle
. El código entonces funciona como se esperaba:Sin embargo, debe ejecutar los programas anteriores como un script, no dentro de un REPL, porque a pesar de que imprime las cosas mientras se ocupa de las estructuras circulares, ambas
write
yprint
también devuelve el valor que se está imprimiendo; y en un REPL predeterminado, el valor también se imprime, pero fuera del contexto dinámico donde*print-circle*
está T.fuente
> <> , 16 + 16 = 32 bytes
y
Pruébalo en línea!
Esto funciona mediante el uso de un salto en el programa, el primer salto de los programas omitirá el reverso de la pila (si revierte la pila, sería una quine). El segundo programa no omite el reverso, pero si ya está invertido por el flujo del programa, creará el original.
Este código terminará en un error.
fuente
RProgN 2 , 7 + 7 = 14 bytes
Quería intentar mostrar un mejor uso de RProgN, en lugar de abusar de las órdenes de impresión ...
y...
Explicado
Debido a que esto imprime la pila al revés, primero se imprime la nueva constante, luego se imprime la versión en cadena de la función.
Pruébalo en línea!
fuente
LOGOTIPO , 65 + 66 = 131 bytes
y
fuente
Python 3, 74 + 74 = 148 bytes
y
yo tampoco lo entiendofuente
> <> , 12 + 12 = 24 bytes
y
Pruébalo en línea!
Ambos programas usan un literal de cadena de ajuste para agregar el código a la pila, luego producen el
'
comando a través de diferentes métodos. Al imprimir la pila, empuja el código hacia atrás, sin embargo, se'
queda al frente. Hay varias variaciones que producen el'
;3d*
,d3*
,00g
,:c-
Cuando se combina con3d*
y:9-
cuando se combina con00g
.Una solución demasiado similar para publicar, en Befunge-98 para 13 * 2 bytes
fuente
Stax , 18 + 20 = 38 bytes
¡Ejecute y depure en línea!
¡Ejecute y depure en línea!
Explicación
Añadido para completar. Puerto de la respuesta CJam de @ jimmy23013 Alterna las líneas nuevas usando set xor.
fuente
Javascript (ES6), 36 + 36 = 72 bytes
Programa 1:
Programa 2:
Estos programas funcionan clonándose y reemplazados
5
por4
y4
con5
fuente
Klein ,
2624 bytesPruébalo en línea!
Explicación
Esto funciona igual que mi Klein Quine , donde imprime la fuente hacia atrás seguida de una
"
, la última se salio con la suya al ser palindrómica, por lo que todo lo que tenemos que hacer es hacerla no palindrómica sin dañar su funcionalidad. Al cambiar<
y:
pudimos hacer esto sin interferir con la funcionalidad.fuente
Pari / GP , 36 + 36 = 72 bytes
Pruébalo en línea!
Pruébalo en línea!
fuente