> <> , 56 octets
^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
Essayez-le en ligne! ou vérifier toutes les mutations .
Fonctionnement du programme d'origine (obsolète)
L'interpréteur démarre dans la cellule (0, 0) . ^
définit la direction vers le haut , de sorte que le pointeur d'instruction (IP) s'enroule autour de la cellule (0, 20) .
'
active le mode chaîne: jusqu'à ce que le suivant '
soit rencontré, tous les caractères sous l'IP sont poussés sur la pile. La même chose '
se retrouve après avoir enroulé autour, donc nous poussons
d3*}^^:84*=?~oao0f.^
L'IP atterrit à (0, 19) , toujours en montant. L'exécution d3*}
pousse 13 = 0xd , puis 3 , multiplie les deux valeurs ( 39 / guillemet simple ), puis fait pivoter la pile vers la droite. Cela laisse la pile comme suit.
'd3*}^^:84*=?~oao0f.^
Les deux instructions suivantes ( ^
) ne font rien à ce stade.
:84*=
duplique le haut de la pile, pousse 8 et 4 , les multiplie ( 32 / espace ), puis teste l'égalité du caractère dupliqué avec l' espace . Pour le programme inchangé, cela poussera toujours 0 .
?
ignore l'instruction suivante si le haut de la pile est faux. Pour le programme d'origine, il l'est toujours, il ~
est donc toujours ignoré.
oao
saute et imprime le haut de la pile, pousse un 10 / saut de ligne , puis saute et imprime le saut de ligne .
0f.
Saute enfin à la cellule (0, 15) (le plus bas ^
), en recommençant avec le caractère suivant sur la pile.
Une fois la pile vide, tout le code source a été imprimé. :
échouera et le programme se fermera.
Fonctionnement des programmes mutés (obsolète)
La duplication de tout caractère non saut de ligne ne fera qu'étendre le programme horizontalement. Puisque le programme est exécuté verticalement, ces instructions supplémentaires ne seront jamais exécutées.
Dupliquer n'importe quel saut de ligne avant le plus bas ^
déplacera les cellules (0, 14) et (0, 15) vers (0, 15) et (0, 16) . 0f.
va maintenant sauter à la cellule avant le plus bas ^
, qui est également un ^
, donc le programme n'est pas affecté par le décalage.
Enfin, tout caractère de saut de ligne dupliqué modifiera également la chaîne. Les lignes courtes sont remplies d'espaces, donc un espace de 32 / sera inséré à la position du saut de ligne. poussera 1 pour l'espace, donc ne saute pas l'instruction suivante. Dans ce cas, saute et supprime l' espace , donc ce qui suit imprimera le caractère au-dessus de l' espace à la place.84*=
?
~
o
0
et00
dans CJam les deux sorties0
.