Spirale , Kerbe: 61921 5127 4715 4655 4191
4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X * X X X X X X X X X X X X X X X X X X X X X X X X X
! > h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T
Einen Dolmetscher finden Sie hier .
Erläuterung:
P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X X
! h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
z y x w V u t s r q p o n m l k j i h g f e d c b a
Das Programm beginnt mit dem 0
Zeichen in der vierten Zeile. Der erste Code, der ausgeführt wird, ist 0;vg
. ;
Nimmt eine Zahl als Eingabe und legt sie im Stapel ab. v
legt das, was sich im Register befindet (eine Null), in den Stapel. Es wird als Zähler verwendet. g
Ist eine Beschriftung erreicht, springt das Steuerelement zum jeweils anderen Vorkommen des Buchstabens g
im Code.
Hier befindet sich nun die Steuerung:
X
v
g
Da es in allen anderen Richtungen Leerzeichen gibt, bewegt sich der Befehlszeiger nach oben.
v
legt eine Null in den Stapel und entfernt X
sie sofort aus dem Stapel. Da der POP-Wert Null ist, bewegt sich der Befehlszeiger auf X
(andernfalls wird er als Leerzeichen behandelt).
Standardmäßig befindet sich der Steuerfluss im Rechtskurvenmodus. Wenn er die Kreuzung erreicht, dreht sich der Anweisungszeiger nach rechts. v
Schiebt erneut eine Null in den Stapel, *
inkrementiert das Register um eins.
v*v*v
X
v
g
Das nächste Mal, v
wenn das, was sich im Register (Nummer 1) befindet, in den Stapel gelegt wird, versucht der Befehlszeiger, sich nach rechts zu drehen und trifft das nächste Mal X
. Der soeben zum Stapel hinzugefügte Wert wird abgelegt und in das Register eingetragen. Da es nicht Null ist, X
wird es nicht eingegeben, und die IP-Adresse wechselt *
stattdessen zur nächsten auf der rechten Seite, wobei der Wert im Register erneut erhöht wird.
v*v*v*v*v
X X X X X
v v v v v
i h g f e
Dies geschieht immer wieder, bis wir das Ende dieses Teils erreichen und die Linie von *
s beginnt. Inzwischen ist der Wert im Register 6, also der ASCII-Buchstabe g
minus der ASCII-Buchstabe a
. Mit einer Zeile von 97 *
s erhöhen wir den Wert im Register auf 103, was dem zu druckenden Buchstaben entspricht g
. v
schiebt es in den Stapel und P
ist ein weiteres Etikett, bei dem wir in P
der ersten Codezeile zum anderen springen .
Hier wird .
der Wert vom Stapel abgerufen und als Zeichen gedruckt. Anschließend wird X
die externe Null aus dem Stapel entfernt und ~
die beiden verbleibenden Werte im Stapel verglichen (die Werte sind der Zähler und der Eingabewert). Sind die Werte gleich, setzt der Operator Null in den Stapel (ansonsten -1 oder 1). Die Steuerung versucht erneut, nach rechts zu drehen. X
Lädt den Wert des Vergleichs vom Stapel, wenn er Null ist X
, und !
beendet das Programm , nachdem er eingegeben wurde.
P.X~ZZ*v+^
X
!
Ansonsten fährt die IP mit der fort Z
, was eine Beschriftung ist, die in diesem Fall nur einen Schritt nach rechts springt. Der Grund dafür ist, dass beim Springen der Wert im Register auf Null zurückgesetzt wird. *
erhöht das Register und v
legt die resultierende 1 in den Stapel. +
Fügt die beiden obersten Elemente des Stapels (die 1 und den Zähler) hinzu und platziert das Ergebnis im Stapel. ^
kopiert das Ergebnis vom Stapel in das Register, ohne es vom Stapel zu entfernen.
#
Verringert den Wert im Register um eins, v
schiebt den verringerten Wert in den Stapel, die IP versucht, sich nach rechts zu drehen, und X
der Wert wird aus dem Stapel entfernt. Wenn der Wert nicht Null ist, bewegt sich die IP weiter nach Osten und verringert den Wert im Register, bis sie Null erreicht und die IP in eine X
Verzweigung eintritt .
#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X
h y t f V b n j u r d c m k i e s x l o w a z p q
Die Verzweigung führt zu einer Beschriftung, die dem Wert des Zählers entspricht. Beim Auftreffen auf das Etikett springt das Steuerelement zu dem anderen Vorkommen des Etiketts in dem Abschnitt, in dem wir mit dem Etikett begonnen haben g
, und startet eine weitere Iteration. Wie beim g
wird der Wert im Register auf den ASCII-Wert des zu druckenden Buchstabens erhöht. Dann wird das Zeichen gedruckt und der Zähler erhöht, ein anderes Etikett wird ausgewählt. Dies geschieht so lange, bis der Zähler nach der letzten Iteration mit der Eingabe übereinstimmt und das Programm beendet wird.
Bearbeiten:
P.X~Zv+^
X *
! Z
Erreicht das Gleiche wie
P.X~ZZ*v+^
X
!
aber mit weniger Leerzeichen.
Bearbeiten 2:
vv****v+^v+^v+^v+^*v++P
Kann verwendet werden anstelle von:
*****************************************************************vP