Rotationssicheres Quine

17

Schreiben Sie eine richtige Quine, deren jede Umdrehung selbst eine richtige Quine ist.

Wenn Ihr Quellcode beispielsweise lautet abcdef:

  • abcdef würde ausgeben abcdef
  • bcdefa würde ausgeben bcdefa
  • cdefab würde ausgeben cdefab
  • defabc würde ausgeben defabc
  • efabcd würde ausgeben efabcd
  • fabcde würde ausgeben fabcde

Eine Drehung "erfolgt durch Teilen einer Schnur in zwei Teile und Umkehren ihrer Reihenfolge" .

Wertung

Das ist . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .

Undichte Nonne
quelle
Ich könnte also ein Programm haben aaabbbund ich könnte sagen, dass die nächste Drehung ist bbbaaa? Oder müsste die nächste Umdrehung sein baaabb?
Betazerfall
1
Die nächste Drehung ist baaabb.
Undichte Nonne
1
Nebenbei bemerkt, die Standard- Quine von Fission ist eine andere Quine von Rotationssicherheit: Unabhängig davon, wie Sie sie drehen, wird immer der ursprüngliche Quellcode gedruckt.
Martin Ender
1
Wenn ein Quine in einer Sprache aus einem Byte besteht, betrügt das dann?
MD XF
1
Ist das eine richtige Quine?
TSH

Antworten:

10

Motorola MC14500B Maschinencode , 1 Byte

Die 1-Byte-Bewertung wird aus zwei 4-Bit-Anweisungen abgeleitet:

0000 0010

Erläuterung

Der Motorola MC145008 ist ein statischer Ein-Bit-CMOS-Prozessor mit einem Chip, der für entscheidungsorientierte Aufgaben optimiert ist. Der Prozessor ist in einem 16-Pin-Gehäuse untergebracht und verfügt über 16 Vier-Bit-Anweisungen. Die Anweisungen führen logische Operationen an Daten aus, die auf einer bidirektionalen Ein-Bit-Datenleitung und an Daten in einem Ein-Bit-Akkumulationsergebnisregister auf der ICU auftreten. Alle Operationen werden auf der Bitebene ausgeführt.

Die Pins des Prozessors sind nummeriert:

Pinbelegung

Befehle werden an den 4 Anweisungsstiften an den Chip präsentiert, ( I0, I1, I2, I3) und werden in das Befehlsregister zwischengespeichert werden , (IR), auf der negativen Flanke von X1.

In Laienbegriffen werden die Stifte 4 bis 7 verwendet, um das Befehlsregister mit einem Befehl zu versehen, aber die Bits werden in umgekehrter Reihenfolge interpretiert. Zum Beispiel 0001würde der Befehl Pin # 7 im hohen Zustand und die Pins 6 bis 4 im niedrigen Zustand haben.

Die Anweisungen werden in der Steuerlogik (Control Logic, CTL) decodiert und senden die entsprechenden Logikbefehle an die LU. Weitere Decodierung wird auch in der CTL ausgeführt , um eine Anzahl von Ausgangs Flags senden ( JMP, RTN, FLGO, FLGF) auf die Stifte 9 bis 12. Diese als externe Steuersignale verwendet werden und bleiben aktiv für eine volle Taktperiode nach der negativen Flanke von X1.

Oder, einfach gesagt, Stifte 9 bis 12 sind die Ausgänge Flags FLGF, FLGO, RTN, und JMP, beziehungsweise. Beachten Sie, dass Daten normalerweise auf den WRITEPin (Pin 2) gemultiplext werden . Die Ausgangs-Flag-Pins ähneln den Exit-Codes anderer Sprachen.

Jeder Befehl der ICU wird in einer einzigen Taktperiode ausgeführt.

Drehungen

Ausgangsposition

0000    NOPO
0010    LDC

Die Uhrzeiten:

  1. Der NOPOBefehl versetzt den Pin # 10 ( FLGO) in den High-Zustand. Vor der nächsten Taktperiode werden die Ausgangsflagpins wieder in den niedrigen Zustand versetzt.
  2. Der LDCBefehl lädt das Komplement des Werts des Datenbusses in das Ergebnisregister, ohne die Ausgangsflag-Pins zu beeinflussen.

Während der zwei Taktperioden des Programms haben sich also die Ausgangs-Flag-Pins dargestellt 0100 0000, die umgekehrt (wie die Eingangs-Pins) gelesen werden 0000 0010, oder die ursprünglichen Anweisungen.

Erste Umdrehung

0010    LDC
0000    NOPO

Die Uhrzeiten:

  1. Das Komplement des Datenbusses wird ohne Auswirkung auf die Ausgangsflag-Pins in das Ergebnisregister geladen.
  2. Pin # 10 ist in den High-Zustand geschaltet.

Während dieser beiden Taktperioden haben die Ausgangsflag-Pins dargestellt 0000 0100, die, wenn sie umgekehrt sind, die Anweisungen sind 0010 0000.

Zach Gates
quelle