Hexagonie, 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Erweitert:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Probieren Sie es online aus
Grundsätzlich gibt es nur zwei for-Schleifen, die von zehn bis null zählen, wobei auf der inneren Schleife ein Sternchen und auf der äußeren Schleife ein Zeilenumbruch ausgegeben wird.
Erläuterung:
Dieses Programm besteht aus drei Hauptteilen: Initialisierung des Speichers, einer Schleife, in der zehn Sternchen gedruckt werden, und einer Schleife, in der eine neue Zeile gedruckt wird. Die Schleife, die eine neue Zeile druckt, enthält auch die Schleife, die die Sternchen druckt.
Zunächst führt der Code die vollständig lineare Speicherinitialisierung aus. Der Code arbeitet zu sein: 10"+}42
. Dies setzt die Erinnerung an die nahegelegenen Kanten so, dass sie wie folgt aussieht:
10 \ / 10
|
42
42 ist der ASCII-Code für das Sternchen, und die zwei Zehner werden als unsere Schleifenzähler verwendet. Bemerkenswert ist, dass der Speicherzeiger gerade von den beiden Zehnern weg zeigt. Wenn Sie also nach hinten gehen, werden Sie auf einen der Zehner gesetzt.
Als nächstes starten wir die Sternchen-Druckschleife. Linear, sieht der Code wie: ;".._(
. Dies druckt ein Sternchen aus, bewegt den Speicherzeiger nach links und rückwärts und dekrementiert schließlich den Wert dort. Nach einer Iteration würde der Speicher wie folgt aussehen:
10 \ / 9
|
42
Dann treffen wir die Schleifenbedingung: ganz links unten >
. Wenn die Kante, die wir gerade dekrementiert haben, immer noch positiv ist, springen wir herum und führen a aus {
, um uns zurück auf die 42 zu bewegen. Dann drücken wir a $
und kehren zum Anfang der Druckschleife zurück ;
, indem wir die Taste überspringen <
. Wenn der Wert Null war, begeben wir uns in die andere Schleife.
Die äußere Schleife beginnt mit dem Zurücksetzen der kürzlich auf Null gestellten Speicherflanke auf zehn (dies ist die 10
im Code angegebene, nach Südwesten gehende). Dann drucken wir diese zehn als ASCII-Zeichen aus, was eine neue Zeile ist. Als nächstes gehen wir auf die anderen Speicherkante oder vermindern, mit {(
und dann ausführen , was zu einer Reihe von noops betragen: =${_=
. Nach einer Iteration dieser Schleife würde der Speicher wie folgt aussehen:
9 \ / 10
|
42
Diesmal zeigt der Speicher von der Kante nach außen und speichert eine Neun im obigen Diagramm. Als nächstes führen wir die aus, <
die als Schleifenbedingung für die äußere Schleife fungiert. Wenn der Wert ungleich Null war, springen wir von einigen Spiegeln ab und beginnen erneut mit der Ausführung sinnvoller Anweisungen, nachdem wir den oberen Rand des Sechsecks im sich "
bewegenden Südwesten betreten haben . Dies führt dazu, dass wir uns rückwärts und nach links bewegen, wieder auf die 42, aber nach innen gerichtet. Dann =
dreht der unsere Richtung um und setzt den Zustand korrekt zurück, um die innere Schleife erneut zu beginnen. Wenn die Flanke auf Null gesetzt wurde, geht der Befehlszeiger auf ein kleines Abenteuer, das nichts unternimmt, bis es das Programm verlässt.
Das Abenteuer beginnt damit, dass der Befehlszeiger nach Nordosten wagt und dabei die Sicherheit der Himmelsrichtungen auf gefährliche Weise missachtet. Es ignoriert mutig einen Spiegel, der an seiner Richtung ausgerichtet ist ( /
) und springt heldenhaft von einem Trampolin ($
), die der tödlichen Falle eines anderen, völlig identischen Trampolins gänzlich ausweicht. Während der Zeiger auf die Leere nicht initialisierter Sechskantkanten starrt, addiert er die beiden leeren Kanten, denen er gegenübersteht, ohne einen Moment lang ins Stocken zu geraten, und setzt die aktuelle Kante auf die Summe: 0 (die Kante war zuvor eigentlich Null, aber der Zeiger mag es Ich glaube, das war ziemlich wichtig. Da die Kante Null ist, macht der Zeiger an der Weggabelung eine Linkskurve und geht in einen mysteriösen Wald (aus Sechsecken). Dort ist es desorientiert und bewegt sich vorwärts und rückwärts und vorwärts, bis es an der gleichen Stelle im Gedächtnis landet, an der es begonnen hat. In der Annahme, dass das Problem darin bestehen muss, dass die aktuelle Flanke beim letzten Mal auf Null gesetzt wurde, pflanzt der Zeiger mutig a1
in die aktuelle Kante. Dann untersucht der edle Zeiger einen anderen Weg, einen mit ... einer Falle! Die aktuelle Flanke wird dekrementiert und auf Null zurückgesetzt! Der durch die schockierende Wendung der Ereignisse betäubte Zeiger stolpert zurück in die Falle und setzt die aktuelle Flanke auf negativ. Wütend versucht der Zeiger, in den vergleichsweise angenehmen Wald zurückzukehren, nur um festzustellen, dass sich die Wege erneut verschoben haben und der Zeiger in eine Höhle läuft, da die aktuelle Kante nicht positiv ist. Und mit einer Höhle meine ich das Maul eines riesigen sechseckigen Wurms. Hilflos verflucht der Zeiger mit seinem sterbenden Atem die Sexualität. Auch das Programm endet.