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 0Zeichen 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. vlegt das, was sich im Register befindet (eine Null), in den Stapel. Es wird als Zähler verwendet. gIst eine Beschriftung erreicht, springt das Steuerelement zum jeweils anderen Vorkommen des Buchstabens gim Code.
Hier befindet sich nun die Steuerung:
X
v
g
Da es in allen anderen Richtungen Leerzeichen gibt, bewegt sich der Befehlszeiger nach oben.
vlegt eine Null in den Stapel und entfernt Xsie 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. vSchiebt erneut eine Null in den Stapel, *inkrementiert das Register um eins.
v*v*v
X
v
g
Das nächste Mal, vwenn 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, Xwird 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 gminus 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. vschiebt es in den Stapel und Pist ein weiteres Etikett, bei dem wir in Pder ersten Codezeile zum anderen springen .
Hier wird .der Wert vom Stapel abgerufen und als Zeichen gedruckt. Anschließend wird Xdie 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. XLä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 vlegt 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, vschiebt den verringerten Wert in den Stapel, die IP versucht, sich nach rechts zu drehen, und Xder 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 XVerzweigung 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 gwird 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