La tarea
En este desafío, su tarea es escribir tres programas que formen una especie de sistema mutuo tipo quine. Llamemos a los programas A
, B
y C
. Si uno de los programas recibe la fuente de otro programa como entrada, dará salida a la fuente del tercer programa. Por ejemplo, si A
se da B
como entrada, sale C
. Si los programas se les da su propia fuente como entrada, se presentará a la salida de las tres cuerdas "three"
, "mutual"
y "quines"
(sin comillas). En todos los casos, pueden generar una nueva línea final adicional. Para cualquier otra entrada, los programas pueden hacer cualquier cosa, incluido el bloqueo.
Ejemplo
Por ejemplo, suponga que los códigos fuente de A
, B
y C
son aSdf
, ghJk
y zxcV
. Entonces los programas deberían comportarse de la siguiente manera.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Reglas y puntaje
Las soluciones A
, B
y C
pueden ser funciones o programas completos, pero deben ser completamente independientes: no se permite código compartido.
Se aplican las lagunas estándar y las reglas de quine , por lo que los programas no pueden acceder a sus propios códigos fuente de ninguna manera.
Su puntaje es el recuento combinado de bytes de A
, B
y C
, menor puntaje es mejor.
public static void main
parte en alguna parte). ¿O simplemente que no puede escribir una función llamada por los tres?Respuestas:
CJAM,
16514711410899 bytes¡Gracias a @ MartinBüttner por una sugerencia que ayudó a ahorrar 48 bytes!
Pruébelo en línea en el intérprete de CJam .
Verificación
Idea
El conjunto {0, 1, 2, 3} es un grupo bajo la operación ^ (OR exclusivo binario), donde cada elemento es su propio inverso.
Si los tres programas son idénticos, excepto el primer carácter (un elemento de {0, 1, 2, 3} ), podemos distinguirlos e imprimirlos fácilmente:
Comenzamos por XORing el dígito al comienzo del código fuente y la entrada.
Si el resultado está en 0 , la fuente y la entrada coinciden.
Por lo tanto, imprimimos una de las tres palabras, seleccionadas por este dígito común.
Si el resultado no es 0 , es el elemento de {1, 2, 3} que no está ni en la fuente ni en la entrada.
Por lo tanto, lo imprimimos, seguido del resto de la entrada.
Cómo funciona
fuente