Este desafío es similar a Can you Meta Quine?
Un quine es un programa que se produce en STDOUT. Este desafío es producir un programa A que cuando se ejecuta produce un programa B en STDOUT. El programa B cuando se ejecuta produce el programa A en STDOUT. Los programas A y B deben estar escritos (y ejecutarse) en el mismo idioma. La pregunta vinculada restringió A! = B. Eso parecía demasiado fácil. Entonces, para esta pregunta, insistimos en que A y B son antigüedades, usando las siguientes reglas:
- Los programas A y B no pueden usar ninguno de los mismos caracteres, salvo los espacios en blanco y los separadores de enunciados, y los caracteres de puntuación.
- Los programas A y B deben contener cada uno al menos un carácter que no sea un espacio en blanco ni un separador de enunciados, ni un carácter de puntuación.
- A los efectos de las reglas 1 y 2, el término 'espacio en blanco' excluye cualquier símbolo o secuencia de símbolos que en sí mismo sea una declaración, operador o símbolo que se interprete (en lugar de un separador). Por lo tanto, en el lenguaje de espacios en blanco, no hay espacios en blanco.
- Un separador de enunciados es un elemento sintáctico usado convencionalmente dentro del lenguaje para separar enunciados. Esto incluiría la nueva línea en python, o el punto y coma en Java, perl o C.
- Un carácter de puntuación es un carácter ASCII que no es un espacio en blanco ni en la clase de caracteres de la palabra POSIX (es decir, un guión bajo no es una puntuación para este propósito), es decir
ispunct()
, devolvería verdadero, y no lo es_
. - El programa A cuando se ejecuta debe producir un programa (Programa B) en su STDOUT, que cuando se ejecuta a su vez produce el Programa A.
- Los programas A y B deben estar en el mismo lenguaje de programación.
- El lenguaje de programación utilizado debe ser realmente un lenguaje de programación. A menos que haga un buen caso de lo contrario, sugeriré que debe ser Turing completo.
- Al menos uno de A y B debe ejecutar al menos una declaración dentro del lenguaje.
Este es el código de golf, por lo que gana la respuesta más corta, siendo la puntuación la longitud del programa A en bytes (es decir, la longitud del programa B no es relevante).
A
y sea
consideran diferentes "personajes"?Respuestas:
GolfScript, 13 bytes
La salida es
que genera el programa inicial.
El recuento de bytes incluye el LF final, ya que la salida de la salida lo contendrá.
Pruébalo en línea.
Cómo funciona
GolfScript imprime el contenido de la pila al finalizar.
fuente
Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
1
y2
es puntuación.Pascal (731 caracteres)
Programa A
Salidas del programa B:
Salidas del programa A.
fuente
ROT13 (ya no compite después de la actualización de la regla )
No estoy seguro de si esto cuenta como un idioma, pero ciertamente no lo compensé para el desafío. Por lo general, las respuestas para ciertas utilidades como
sed
las aceptadas también. Sin embargo, es una decisión judicial, así que si no cuenta, lo eliminaré (¿hay alguna discusión en algún lugar sobre lo que cuenta como idioma? Editar: Ahora hay )Ciclos entre
A
yN
:fuente
STDIN
, no ejecutando un programa. Si está argumentando que es un programa de longitud cero, no cumple con la regla 2. El programa (consed
) es lo que se pasased -e
. Si esto fuera aceptable, entoncescat
sería una quine, ytac
sería una quine y una antquina. Sin embargo, nada está produciendo la fuentecat
,tac
o para el casorot13
.rot13
como lenguaje de programación no parece satisfacer ninguna definición razonable de 'lenguaje de programación', y no está interpretando nada. Enmendaré la pregunta para que quede más claro.