Quine à rotation sûre

17

Écrivez un quine approprié dont chaque rotation est elle-même un quine approprié.

Par exemple, si votre code source est abcdef, alors:

  • abcdef sortirait abcdef
  • bcdefa sortirait bcdefa
  • cdefab sortirait cdefab
  • defabc sortirait defabc
  • efabcd sortirait efabcd
  • fabcde sortirait fabcde

Une rotation "se fait en coupant une corde en deux morceaux et en inversant leur ordre" .

Notation

C'est du . La réponse la plus courte en octets l'emporte. Des échappatoires standard s'appliquent.

Leaky Nun
la source
Je pourrais donc avoir un programme aaabbbet je pourrais dire que la prochaine rotation est bbbaaa? Ou la prochaine rotation devrait baaabb-elle être ?
Beta Decay
1
La prochaine rotation est baaabb.
Leaky Nun
1
Remarque: le quine Fission standard est un quine différent de la rotation sûre: peu importe la façon dont vous le faites pivoter, il imprimera toujours le code source d'origine.
Martin Ender
1
Si une quine dans une langue est un octet, est-ce de la triche?
MD XF
1
Est- ce une bonne quine?
tsh

Réponses:

10

Code machine Motorola MC14500B , 1 octet

Le score de 1 octet est dérivé de deux instructions de 4 bits:

0000 0010

Explication

Le Motorola MC145008 est un processeur CMOS statique monopuce, un bit, optimisé pour les tâches décisionnelles. Le processeur est logé dans un boîtier à 16 broches et comporte 16 instructions à quatre bits. Les instructions effectuent des opérations logiques sur les données apparaissant sur une ligne de données bidirectionnelle à un bit et les données dans un registre de résultat accumulé sur un bit au sein de l'ICU. Toutes les opérations sont effectuées au niveau du bit.

Les broches du processeur sont numérotées:

Affectation des broches

Les instructions sont présentées à la puce sur les 4 repères d'instruction, ( I0, I1, I2, I3), et sont verrouillées dans le registre d' instructions (IR), sur le bord de sens négatif de X1.

En termes simples, les broches 4 à 7 sont utilisées pour présenter le registre d'instructions avec une instruction, mais les bits sont interprétés dans l'ordre inverse. Par exemple, l'instruction 0001aurait la broche # 7 à l'état haut et les broches 6 à 4 à l'état bas.

Les instructions sont décodées dans la logique de contrôle (CTL), envoyant les commandes logiques appropriées à la LU. En outre le décodage est également réalisée dans le CTL d'envoyer un certain nombre de drapeaux de sortie ( JMP, RTN, FLGO,FLGF ) aux broches 9 à 12. Ceux - ci sont utilisés comme signaux de commande externes et restent actifs pendant une période complète d'horloge après le front descendant du X1.

Ou, tout simplement, les broches 9 à 12 sont les indicateurs de sortie FLGF, FLGO, RTNet JMP, respectivement. Notez que les données sont généralement multiplexées sur la WRITEbroche (broche n ° 2). Les broches d'indicateur de sortie sont similaires aux codes de sortie d'autres langues.

Chacune des instructions de l'ICU s'exécute en une seule période d'horloge.

Rotations

Position initiale

0000    NOPO
0010    LDC

Les périodes d'horloge:

  1. L' NOPOinstruction met la broche # 10 ( FLGO) à l'état haut. Avant la prochaine période d'horloge, les broches de drapeau de sortie sont remises à l'état bas.
  2. L' LDCinstruction charge le complément de la valeur du bus de données dans le registre des résultats, sans affecter les broches d'indicateur de sortie.

Ainsi, pendant les deux périodes d'horloge du programme, les broches de drapeau de sortie ont représenté 0100 0000, ce qui, lu à l'envers (comme les broches d'entrée), est 0000 0010, ou les instructions d'origine.

Première rotation

0010    LDC
0000    NOPO

Les périodes d'horloge:

  1. Le complément du bus de données est chargé dans le registre des résultats, sans effet sur les broches d'indicateur de sortie.
  2. La broche n ° 10 est passée à l'état haut.

Au cours de ces deux périodes d'horloge, les broches de drapeau de sortie se sont représentées 0000 0100, qui, lorsqu'elles sont inversées, sont les instructions 0010 0000.

Zach Gates
la source