Período 2 Quine invertida

10

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.

usuario de Internet
fuente
Relacionado
HyperNeutrino

Respuestas:

9

RProgN , 3 bytes

1
2

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 :

Debe ser posible identificar una sección del programa que codifique una parte diferente del programa. ("Diferente" significa que las dos partes aparecen en diferentes posiciones).

Además, una quine no debe acceder a su propia fuente, directa o indirectamente.

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

2
1

que, a su vez, imprime el original.

! enilno ti yrT

Dennis
fuente
Me gusta la URL
Christopher
44
Deberíamos arreglar esto ... Publicaría una nueva respuesta (basada en este comentario ) en la meta pregunta, pero probablemente no recibiría suficiente atención para competir con las respuestas existentes.
ETHproductions
2
@ETHproductions: Hazlo. Siento que hay varios problemas con nuestra definición actual de quine adecuada. (Podría decirse que mi idioma 7 es un estudio en casos extremos para una quineness adecuada; además de este caso particular, puede manejar bastantes otros). FWIW, no estoy seguro de que sea una quine inversa adecuada incluso por nuestro actual definición; el 1 y el 2 están claramente codificados por sí mismos, por lo que el único interés potencial es qué codifica la nueva línea. (Esto es diferente de a 1\n1, en el que los dos 1s se codifican entre sí; posiblemente sea una quine adecuada pero no una quine inversa adecuada.)
9

Befunge-98 , 33 bytes

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Pruébalo en línea!

IQuick 143
fuente
Buena primera respuesta. Pero use el #para hacer su encabezado. También vaya a Tryitonline.net y obtenga un intérprete en línea
Christopher
2
También vaya debajo del botón Guardar y use el envío de codegolf.
Christopher
Lo edité en TIO en primer lugar, simplemente olvidé agregar el enlace, pero ahora está agregado y gracias por la sugerencia de encabezado
IQuick 143
Tenga en cuenta que la opción "envío de codegolf" en TIO le ofrece una plantilla inicial, que incluye el encabezado.
Ørjan Johansen
Pensé que gno estaba permitido en Befunge quines, ya que lee la fuente del programa directamente de la memoria.
7

Fisión 2 , 10 bytes

"L;L'!+!'_

Pruébalo en línea!

Esto imprime:

_'!+!'L;L"

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:

"L;L'!+!'_

Este programa tiene dos puntos de entrada en la Ls, 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 'Lconjuntos de la masa átomos hasta el punto de código L, pero eso es irrelevante. ;destruye este átomo también y como no quedan átomos, el programa termina.

Ahora al revés:

_'!+!'L;L"

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, Lluego se ignora y ;destruye el átomo y termina el programa.

Martin Ender
fuente