> <> , 56 bajtów
^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
Wypróbuj online! lub zweryfikuj wszystkie mutacje .
Jak działa oryginalny program (nieaktualny)
Tłumacz rozpoczyna się w komórce (0, 0) . ^
ustawia kierunek w górę , więc wskaźnik instrukcji (IP) otacza komórkę (0, 20) .
'
aktywuje tryb ciągu: do momentu '
napotkania następnego , wszystkie znaki pod adresem IP są wypychane na stos. To samo '
znajduje się ponownie po owinięciu, więc pchamy
d3*}^^:84*=?~oao0f.^
Adres IP wyląduje na (0, 19) , wciąż idąc w górę. Wykonanie d3*}
wypycha 13 = 0xd , a następnie 3 , mnoży obie wartości ( 39 / pojedynczy cudzysłów ), a następnie obraca stos w prawo. To pozostawia stos w następujący sposób.
'd3*}^^:84*=?~oao0f.^
Następne dwie instrukcje ( ^
) nic nie robią w tym momencie.
:84*=
duplikuje górę stosu, wypycha 8 i 4 , mnoży je ( 32 / spację ), a następnie testuje powieloną postać pod kątem równości ze spacją . W przypadku niezmienionego programu zawsze spowoduje to przesunięcie 0 .
?
pomija następną instrukcję, jeśli górna część stosu to fałsz. W przypadku oryginalnego programu zawsze tak ~
jest , więc zawsze jest pomijane.
oao
wyskakuje i drukuje górę stosu, przesuwa 10 / linefeed , a następnie wyskakuje i drukuje linefeed .
W końcu 0f.
skacze do komórki (0, 15) (najniższej ^
), zaczynając od następnego znaku na stosie.
Gdy stos będzie pusty, wydrukowany zostanie cały kod źródłowy. :
zawiedzie i program zostanie zamknięty.
Jak działają zmutowane programy (nieaktualne)
Powielenie dowolnego znaku nieciągłego spowoduje rozszerzenie programu tylko w poziomie. Ponieważ program jest wykonywany pionowo, te dodatkowe instrukcje nigdy nie zostaną wykonane.
Powielenie dowolnego przesuwu linii przed najniższym punktem ^
spowoduje przesunięcie komórek (0, 14) i (0, 15) do (0, 15) i (0, 16) . 0f.
przeskoczy teraz do komórki przed najniższym poziomem ^
, co również jest wartością ^
, więc zmiana nie ma wpływu na program.
Wreszcie, każdy powielony znak linii również zmieni ciąg. Krótkie linie są wypełnione spacjami, więc 32 / spacja zostanie wstawiona w miejscu wysuwu linii. 84*=
naciśnie 1 dla spacji, więc ?
nie pomija następnej instrukcji. W takim przypadku ~
wyskakuje i odrzuca spację , dlatego następujące polecenie o
wydrukuje znak powyżej spacji .
0
a00
w CJam oba wyjścia0
.