Quine de rotación segura

17

Escriba una quine adecuada cuya rotación sea en sí misma una quine adecuada.

Por ejemplo, si su código fuente es abcdef, entonces:

  • abcdef saldría abcdef
  • bcdefa saldría bcdefa
  • cdefab saldría cdefab
  • defabc saldría defabc
  • efabcd saldría efabcd
  • fabcde saldría fabcde

Una rotación "se realiza dividiendo una cuerda en dos partes e invirtiendo su orden" .

Puntuación

Este es el . La respuesta más corta en bytes gana. Se aplican lagunas estándar .

Monja permeable
fuente
¿Entonces podría tener un programa aaabbby podría decir que la próxima rotación es bbbaaa? ¿O tendría que ser la próxima rotación baaabb?
Beta Decay
1
La siguiente rotación es baaabb.
Leaky Nun
1
Nota al margen, la quine de fisión estándar es una quine diferente de rotación segura: no importa cómo la gire, siempre imprimirá el código fuente original.
Martin Ender
1
Si una quine en un idioma es un byte, ¿eso es trampa?
MD XF
1
¿Es esta una quine adecuada?
tsh

Respuestas:

10

Código de máquina Motorola MC14500B , 1 byte

La puntuación de 1 byte se deriva de dos instrucciones de 4 bits:

0000 0010

Explicación

El Motorola MC145008 es un procesador CMOS estático de un solo bit y un bit optimizado para tareas orientadas a la toma de decisiones. El procesador está alojado en un paquete de 16 pines y presenta 16 instrucciones de cuatro bits. Las instrucciones realizan operaciones lógicas sobre los datos que aparecen en una línea de datos bidireccional de un bit y los datos en un registro de resultados acumulativo de un bit dentro de la UCI. Todas las operaciones se realizan a nivel de bit.

Los pines del procesador están numerados:

Asignación de pin

Las instrucciones se presentan para el chip en los 4 pernos de instrucciones, ( I0, I1, I2, I3), y están enclavadas en la Instrucción Register, (IR), en el borde negativo curso de X1.

En términos simples, los pines 4 a 7, se utilizan para presentar el registro de instrucciones con una instrucción, pero los bits se interpretan en el orden inverso. Por ejemplo, la instrucción 0001tendría el pin # 7 en el estado alto y los pines 6 a 4 en el estado bajo.

Las instrucciones están decodificadas en la lógica de control (CTL), enviando los comandos lógicos apropiados a la LU. Además de decodificación se realiza también en el CTL para enviar un número de banderas de salida ( JMP, RTN, FLGO, FLGF) a las patillas 9 a 12. Estos se utilizan como señales de control externas y permanecerá activo durante un periodo de reloj completo después del flanco negativo curso de X1.

O, en pocas palabras, los pines 9 a 12 son las banderas de salida FLGF, FLGO, RTN, y JMP, respectivamente. Tenga en cuenta que los datos generalmente se multiplexan al WRITEpin (pin # 2). Los pines del indicador de salida son similares a los códigos de salida de otros idiomas.

Cada una de las instrucciones de la UCI se ejecuta en un solo período de reloj.

Rotaciones

Posición inicial

0000    NOPO
0010    LDC

Los períodos de reloj:

  1. La NOPOinstrucción pone el pin # 10 ( FLGO) en el estado alto. Antes del siguiente período de reloj, los pines del indicador de salida se vuelven a colocar en el estado bajo.
  2. La LDCinstrucción carga el complemento del valor del Bus de datos en el Registro de resultados, sin afectar los pines de la bandera de salida.

Por lo tanto, durante los dos períodos de reloj del programa, los pines del indicador de salida han representado 0100 0000, lo que, leído en reversa (como los pines de entrada), es 0000 0010, o las instrucciones originales.

Primera rotación

0010    LDC
0000    NOPO

Los períodos de reloj:

  1. El complemento del Bus de datos se carga en el Registro de resultados, sin efecto de los pines del indicador de salida.
  2. Pin # 10 en cambiado al estado alto.

Durante estos dos períodos de reloj, los pines del indicador de salida han representado 0000 0100, que, cuando se invierten, son las instrucciones 0010 0000.

Puertas de Zach
fuente