Quine - bezpieczna rotacja

17

Napisz właściwy quine, którego każdy obrót sam w sobie jest właściwym quine.

Na przykład jeśli kod źródłowy to abcdef:

  • abcdef wyszedłby abcdef
  • bcdefa wyszedłby bcdefa
  • cdefab wyszedłby cdefab
  • defabc wyszedłby defabc
  • efabcd wyszedłby efabcd
  • fabcde wyszedłby fabcde

Obrót „polega na podzieleniu sznurka na dwie części i odwróceniu ich kolejności” .

Punktacja

To jest . Najkrótsza odpowiedź w bajtach wygrywa. Obowiązują standardowe luki .

Leaky Nun
źródło
Więc mógłbym mieć program aaabbbi mógłbym powiedzieć, że następny obrót jest bbbaaa? A może musiałby to być następny obrót baaabb?
Rozpad
1
Następny obrót to baaabb.
Leaky Nun
1
Na marginesie, standardowa quina rozszczepienia jest inną bezpieczną rotacją: niezależnie od tego, jak ją obrócisz, zawsze wydrukuje oryginalny kod źródłowy.
Martin Ender
1
Jeśli quine w języku jest jednym bajtem, czy to oszustwo?
MD XF,
1
Czy to właściwy quine?
tsh

Odpowiedzi:

10

Kod maszynowy Motorola MC14500B , 1 bajt

Wynik 1-bajtowy pochodzi z dwóch 4-bitowych instrukcji:

0000 0010

Wyjaśnienie

Motorola MC145008 to jednoukładowy, jednobitowy, statyczny procesor CMOS zoptymalizowany do zadań zorientowanych na decyzje. Procesor jest umieszczony w 16-pinowej obudowie i zawiera 16 czterobitowych instrukcji. Instrukcje wykonują logiczne operacje na danych pojawiających się na jednobitowej dwukierunkowej linii danych i danych w jednym bicie akumulującego się rejestru wyników w OIOM. Wszystkie operacje są wykonywane na poziomie bitów.

Piny procesora są ponumerowane:

Przydzielenie pinu

Instrukcje są przedstawiane na chipie na kołkach 4 instrukcji, ( I0, I1, I2,I3 ) i jest zatrzaśnięta w rejestr instrukcji (IR), na opadających krawędzi X1.

Mówiąc w skrócie, piny od 4 do 7 służą do przedstawienia instrukcji instrukcji z instrukcją, ale bity są interpretowane w odwrotnej kolejności. Na przykład instrukcja 0001miałaby pin nr 7 w stanie wysokim, a pin 6 do 4 w stanie niskim.

Instrukcje są dekodowane w Control Logic (CTL), wysyłając odpowiednie polecenia logiczne do LU. Dalsze dekodowania jest również wykonywana w CTL wysłać liczbę flag wyjściowego ( JMP, RTN, FLGO, FLGF) i sworzni 9 do 12. Są one stosowane jako zewnętrzne sygnały sterujące i pozostają aktywne przez cały okres zegara po opadających krawędzi X1.

Albo, mówiąc prościej, szpilki 9 do 12 są flagi wyjściowe FLGF, FLGO, RTN, i JMP, odpowiednio. Zauważ, że dane są zwykle multipleksowane do WRITEpinu (pin 2). Piny flagi wyjściowej są podobne do kodów wyjścia innego języka.

Każda z instrukcji ICU jest wykonywana w jednym okresie zegarowym.

Rotacje

Pozycja początkowa

0000    NOPO
0010    LDC

Okresy zegarowe:

  1. NOPOStawia instrukcji pin nr 10 (FLGO ) w stanie wysokim. Przed następnym okresem zegara styki flagi wyjściowej są ponownie ustawiane w stan niski.
  2. Te LDCładunki instruktażowe dopełnieniem wartości magistrali danych do wyniku Rejestrze, bez wpływu na szpilki flag wyjściowego.

Tak więc, podczas dwóch okresów zegara programu, reprezentują styki flagi wyjściowej 0100 0000, które, czytane w odwrotnej kolejności (podobnie jak styki wejściowe) 0000 0010, lub oryginalne instrukcje.

Pierwszy obrót

0010    LDC
0000    NOPO

Okresy zegarowe:

  1. Uzupełnienie magistrali danych jest ładowane do rejestru wyników, bez wpływu pinów flagi wyjściowej.
  2. Pin nr 10 w stan wysoki.

Podczas tych dwóch okresów zegarowych reprezentowane są styki flagi wyjściowej 0000 0100, które po odwróceniu są instrukcjami 0010 0000.

Zach Gates
źródło