Su tarea es escribir un programa que genere su propio código fuente a la inversa. Sin embargo, cuando se ejecuta el código invertido, debería generar el código fuente, orientado en la dirección correcta.
Ejemplo
Digamos que su programa es abc
. Cuando se ejecuta, debería salir cba
. cba
, cuando se ejecuta, debería salir abc
.
Reglas
Su programa debe seguir todas las reglas de una quine adecuada (excepto la salida del código fuente). Los palíndromos no están permitidos.
Nota aleatoria: soy consciente de esto, pero creo que este desafío es diferente porque el código transformado debe tener las mismas propiedades.
Respuestas:
RProgN , 3 bytes
Gracias a @MartinEnder por recordarme esta respuesta .
Pruébalo en línea!
Cómo funciona
Esto explota una falla potencial en nuestra definición de quine adecuada :
Ese es obviamente el caso aquí, ya que la salida es el reverso del código y el código no es un palíndromo.
RProgN - notación de programador inverso - utiliza una pila LIFO e imprime los elementos en el orden en que aparecen. Los dos tokens 1 y 2 , separados por espacios y / o nuevas líneas, aparecen en orden inverso y se imprimen separados por una nueva línea.
Esto imprime el programa invertido
que, a su vez, imprime el original.
! enilno ti yrT
fuente
1\n1
, en el que los dos1
s se codifican entre sí; posiblemente sea una quine adecuada pero no una quine inversa adecuada.)Befunge-98 , 33 bytes
Pruébalo en línea!
fuente
#
para hacer su encabezado. También vaya a Tryitonline.net y obtenga un intérprete en líneag
no estaba permitido en Befunge quines, ya que lee la fuente del programa directamente de la memoria.Fisión 2 , 10 bytes
Pruébalo en línea!
Esto imprime:
Pruébalo en línea!
Y viceversa.
Explicación
Esta es una modificación de la quine inversa . Está trabajando para nuestra ventaja aquí, que
!
se utiliza para imprimir y también está a solo un punto de código de la cita"
. Eso hace que sea más fácil hacer que la sección de impresión de cotizaciones sea palindrómica (la'!+!'
). Comencemos con el primer código:Este programa tiene dos puntos de entrada en la
L
s, cada uno de los cuales crea un átomo a la izquierda. Sin embargo, el correcto golpea inmediatamente al;
que lo destruye. El izquierdo ingresa al modo de cadena y se envuelve hasta el final, de modo que imprime el código completo (excepto el"
) de atrás hacia adelante. Eso ya nos da_'!+!'L;L
. Todo lo que queda es imprimir el"
._
puede ignorarse,'!
establece la masa del átomo en 33 (el punto de código de!
), la+
incrementa"
e!
imprime. Esa es toda la salida hecha. Los'L
conjuntos de la masa átomos hasta el punto de códigoL
, pero eso es irrelevante.;
destruye este átomo también y como no quedan átomos, el programa termina.Ahora al revés:
Nuevamente, tenemos dos puntos de entrada, pero un átomo se destruye inmediatamente. Esta vez
!+!'
, primero nos movemos por la sección, así que comenzamos imprimiendo una cotización. El'_
es de nuevo irrelevante, pero necesitamos el_
(o algún otro personaje inútil) aquí para evitar'
escapar del"
. El átomo se envuelve hasta el final, atraviesa el código fuente una vez en modo de cadena para imprimir el resto del programa en reversa,L
luego se ignora y;
destruye el átomo y termina el programa.fuente