Hexagone, 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Étendu:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Essayez-le en ligne
Fondamentalement, il n’ya que deux boucles for, le décompte allant de 10 à zéro, l’impression d’un astérisque sur la boucle interne et une nouvelle ligne sur la boucle externe.
Explication:
Ce programme comprend trois parties principales: l’initialisation de la mémoire, une boucle imprimant dix astérisques et une boucle imprimant une nouvelle ligne. La boucle qui imprime une nouvelle ligne contient également la boucle qui affiche les astérisques.
Tout d'abord, le code exécute l'initialisation de la mémoire totalement linéaire. Le code fonctionne comme: 10"+}42
. Ceci configure la mémoire des bords proches pour ressembler à:
10 \ / 10
|
42
42 est le code ASCII du caractère astérisque et les deux dizaines seront utilisés comme compteurs de boucle. Il est à noter que le pointeur de la mémoire est actuellement orienté à l’écart des deux dizaines. Par conséquent, le fait de revenir en arrière nous place sur l’un des dizaines.
Ensuite, nous commençons la boucle d'impression astersisque. Linéairement, le code ressemble à : ;".._(
. Cela affiche un astérisque, déplace le pointeur de la mémoire en arrière et à gauche et décrémente la valeur à cet endroit. Après une itération, la mémoire ressemblerait à ceci:
10 \ / 9
|
42
Ensuite, nous atteignons la condition de boucle: la plus en bas à gauche >
. Si le bord que nous venons de décrémenter est toujours positif, nous rebondissons et exécutons un {
pour nous ramener sur le 42. Puis nous frappons un $
et retournons au début de la boucle d'impression ;
, en sautant le <
. Si la valeur était zéro, nous nous dirigeons dans l'autre boucle.
La boucle externe commence par réinitialiser le bord de mémoire récemment remis à zéro à dix (il s'agit 10
du code dans le code sud-ouest). Ensuite, nous imprimons ce dix comme un caractère ASCII, qui est une nouvelle ligne. Ensuite, nous passons sur l'autre bord de la mémoire et le décrémentez avec {(
puis exécutons ce qui équivaut à un tas de noops: =${_=
. Maintenant, après une itération de cette boucle, la mémoire ressemblerait à ceci:
9 \ / 10
|
42
Cette fois, la mémoire est tournée vers l’extérieur du bord, stockant un neuf dans le diagramme ci-dessus. Ensuite, nous exécutons le <
qui agit comme condition de boucle pour la boucle externe. Si la valeur était différente de zéro, nous rebondissons sur certains miroirs, puis nous recommençons à exécuter des instructions significatives après être entré au sommet de l'hexagone au "
sud-ouest en mouvement. Cela nous oblige à reculer et à gauche, à nouveau sur le 42, mais vers l'intérieur. Ensuite, l’ =
inversion de notre direction, réinitialisant l’état correctement pour que la boucle interne recommence. Si le bord a été mis à zéro, le pointeur d'instruction se lance dans une petite aventure qui ne fait rien jusqu'à ce qu'il quitte le programme.
L'aventure commence par le pointeur d'instructions se dirigeant vers le nord-est, ignorant dangereusement la sécurité des points cardinaux. Il ignore courageusement un miroir aligné sur sa diretion ( /
) et saute héroïquement d'un trampoline ($
) évitant entièrement le piège mortel d'un autre trampoline totalement identique. En regardant le vide des bords hexagonaux non initialisés, le pointeur, sans faiblir un instant, ajoute les deux bords vides qu'il fait face ensemble, fixant ainsi le bord actuel à leur somme: 0 (le bord était en fait nul auparavant, mais le pointeur aime crois que c'était assez important). Comme le bord est égal à zéro, le pointeur tourne à gauche à l'embranchement de la route et entre dans une forêt mystérieuse (d'hexagones). Là, il se trouve désorienté, allant d’avant en arrière, jusqu’à ce qu’il se retrouve au même endroit dans sa mémoire de départ. Pensant que le problème doit être que le bord actuel a été réglé à zéro la dernière fois, le pointeur plante bravement une1
dans le bord actuel. Ensuite, le noble pointeur explore un autre chemin, un avec: un piège! Le front actuel est décrémenté et remis à zéro! Le pointeur, hébété par la tournure choquante des événements, retombe dans le piège en définissant le bord actuel sur négatif. En colère, le pointeur tente de retourner dans la forêt relativement agréable, mais remarque que, le bord actuel n'étant pas positif, les chemins se sont à nouveau déplacés et le pointeur se retrouve dans une grotte. Et par une grotte, je veux dire la bouche d'un ver géant hexagonal. Impuissant, le pointeur maudit la sexualité avec son dernier souffle. En outre, le programme se termine.