En mi tiempo en PPCG, he notado que los problemas de quine y los problemas de políglotas son bastante populares. Además, las meta-soluciones a los problemas, es decir, los scripts que generan un programa que es la solución a un problema, tienden a recibir muchos comentarios positivos de la comunidad. Por lo tanto, he creado este desafío, que implementa estas tres ideas.
Entonces, su tarea, lector y entusiasta del golf de código , es crear lo más breve posible un script que pueda ejecutarse en dos idiomas A y B para generar quines para A y B. Cuando su programa se ejecuta en el idioma A, debe generar un programa que es un quine en lenguaje B pero no en lenguaje A y viceversa. Los idiomas A y B pueden ser versiones diferentes del mismo idioma, siempre que tenga en cuenta que las quines generadas solo deberían funcionar en una de las versiones.
Tenga en cuenta que las lagunas estándar deben considerarse cerradas y solo se permiten las cotas adecuadas .
¡Buena suerte, gana la menor cantidad de personajes!
Respuestas:
CJam 0.6.6 dev / GolfScript,
151412 bytes¡Gracias a @ jimmy23013 por jugar golf en 2 bytes!
Descanse para ser actualizado.
Verificación
Dado que el envío implica un espacio en blanco significativo, es mejor comparar los hexdumps.
CJam
Impresiones de CJam
"`0$~"0$~
y un avance de línea final. Pruébalo en línea!El programa generado imprime
"`0$~"0$~
con el avance de línea final en GolfScript (¡ Pruébelo en línea! ), Pero sin el avance de línea en CJam (¡ Pruébelo en línea! ).Como funciona la metaquina
Como funciona la quine
A diferencia de GolfScript, CJam no imprime un salto de línea final de forma predeterminada, por lo que no es una quine en CJam.
GolfScript
Impresiones GolfScript
"`0$~"0$~
, sin espacios en blanco al final. Pruébalo en línea!El programa generado imprime
"`0$~"0$~
sin espacios en blanco al final en CJam (¡ Pruébelo en línea! ), Pero GolfScript agrega un salto de línea (¡ Pruébelo en línea! ).Como funciona la metaquina
Como funciona la quine
A diferencia de CJam, GolfScript agregará un salto de línea al contenido de la pila, por lo que no es una quine en GolfScript.
fuente
"0$p"0$~a:n;
.a:n
, perop
no se me ocurrió usarlo .CJam / Fission, 22 bytes
Pruébalo en CJam. Pruébalo en fisión.
En CJam, esto imprime la quine de fisión estándar :
Prueba la quisión de fisión.
En Fission, esto imprime una
"
variante sin la versión estándar de CJam quine:Prueba la quine CJam.
Esto también funciona para 22 bytes (imprimiendo los mismos quines):
Explicación
En CJam:
Entonces, al final del programa, la pila contiene la cadena
"'!+OR"
y el carácter"
, los cuales se imprimen implícitamente.En Fission, el flujo del programa comienza en el
R
con un átomo a la derecha.'"
solo cambia la masa de los átomos)
,5
y-
son ignorados por varias razones. Luego, el átomo ingresa al modo de impresión en"
y se imprime{'_'~}_~
.;
destruye el átomo y termina el programa.fuente
{'_'~}
Clojure / Common Lisp, 274 bytes
Algunos espacios agregados para facilitar la lectura
Básicamente define una macro que devuelve una quine en Clojure. Clojure requiere parámetros para la definición de macro proporcionados como vector (
[]
) mientras que Common Lisp (afortunadamente) simplemente lo ignora. Después de eso, diferimos 2 idiomas evaluando'()
cuál es igualnil
y, por lo tanto, falsey en Common Lisp y estátrue
en Clojure. Luego hacemos manipulaciones de cadenas usando Clojure que Common Lisp ni siquiera intenta evaluar a medida que avanza en otraif
rama. Clojure, por otro lado, intenta verificar si otra rama es al menos correcta antes de ejecutarla, por lo que tuvo que usarlaeval
para ser correcta en Clojure y generar la cadena correcta en Common Lisp.Nota: solo devolver dos cadenas diferentes probablemente sea más corto, pero no será diferente a los desafíos de un políglota sobre la salida de cadenas diferentes en diferentes idiomas. ¯ \ _ (ツ) _ / ¯
Ejecución original de Clojure: https://ideone.com/SiQhPf
Fuente original común de Lisp ejecutada: https://ideone.com/huLcty
Salida Clojure:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Salida común de Lisp:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Salida de Clojure ejecutada en Common Lisp: https://ideone.com/T1DF7H
Viceversa: https://ideone.com/Fezayq
fuente
Jelly / GolfScript,
1816 bytesVerificación
La prueba de todos los programas involucrados con los flujos de bytes exactos solo se puede hacer localmente.
Jalea
Con la página de códigos de Jelly , el programa tiene el siguiente aspecto.
Esto imprime (¡ Pruébelo en línea! )
que es una quine en GolfScript (¡ Pruébelo en línea! ), pero un error del analizador en Jelly (¡ Pruébelo en línea! ).
GolfScript
En Latin-1, el programa tiene el siguiente aspecto, con un carácter DEL no imprimible entre
}
yþ
.Esto imprime (¡ Pruébelo en línea! )
o, visualizado con la página de códigos de Jelly,
que es una quine en Jelly (¡ Pruébelo en línea! ), pero solo imprime un salto de línea en GolfScript (¡ Pruébelo en línea! ).
fuente
”ṘṘ
, asíØV
debería irse, ¿verdad?JavaScript / C 278 bytes
Con la asombrosa cifra de 278 bytes:
La quina C:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
La quine de JavaScript:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
fuente
Befunge / Fisión, 35 bytes
Pruébalo en Befunge | Pruébalo en fisión
En Befunge esto produce la quina de fisión :
En Fission esto produce la quine Befunge :
fuente
Python / Retina,
70656466 bytesUsé la misma estrategia que usé en mi anterior políglota Python / Retina .
Probar en Python | Prueba en retina
#
es un comentario en Python, por lo que simplemente imprime la quina Retina en Python. En Retina, la primera etapa (2 líneas) no hace nada, porque no#
se encontrará ninguna en la entrada. La siguiente etapa no reemplaza nada con la base de la quine de Python. La tercera etapa reemplaza cada punto y coma con la#print _%
pieza. La última etapa elimina todo#
.Quine en Retina:
Quine en Python:
Las quines utilizadas pueden verse en este desafío . La quina de Retina es un error en Python, y la quina de Python no tiene salida en Retina.
fuente
Python 3 / Python 2, 62 bytes
Pruébalo en Python 2 , Python 3 .
Basado en la quine de Python aquí . El factor distintivo entre las dos versiones es con lo que hacen
int(-1/2)
: en Python 2,/
es la división entera (redondeando hacia abajo), con el resultado de-1
; en Python 3,/
es la división de coma flotante (-0.5
), que seint
trunca a0
.Construimos una cadena
_
en tres partes.'_=%r;print(_%%_['
y'int(-1/2):])'
siempre son lo mismo. La parte interesante es'~'*-~int(-1/2)
:-~int(-1/2)
es0
, y la tilde no se agrega a la cadena;-~int(-1/2)
es1
, y la tilde se agrega a la cadena.Por lo tanto, Python 2 genera la quine de Python 3
y Python 3 genera la quine de Python 2
En cada versión, la expresión dentro se
[ :]
evalúa como0
, lo que hace que el segmento incluya toda la cadena, mientras que en el lenguaje incorrecto se evalúa-1
, lo que hace que el segmento incluya solo el último carácter, truncando la salida para que no sea una quine completa.fuente
Brain-Flak , brainfuck
46174009 bytesPruébalo en línea!
Pruébalo en línea!
La explicación está en camino. Todavía estoy jugando golf.
fuente