> <> , 106 104 octets
J'ai l'impression que> <> n'est peut-être pas la meilleure langue pour cela, mais je suis allé trop loin pour abandonner et ne pas poster ceci. Le *
à la fin de la ligne 4 est censé être un espace. N'aimez-vous pas à quel point ce code est incroyablement grotesque? Essayez-le en ligne .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Voici une version sans autre chose que des changeurs de direction pour donner une idée de la façon dont le pointeur se déplace (notez que j'ai omis les instructions "teleport", c'est-à-dire .
).
Flux directionnel:
<v
v>
> v >
< v
v <
>
Explication
Ma visualisation de la pile sera basée sur l'entrée input
. > <> est un langage à deux dimensions, alors faites attention à l'endroit où le pointeur se déplace entre les lignes, car il exécute du code en dessous (dans ce code, il <>v^
est principalement utilisé pour changer de direction). Je vais commencer mes explications à partir du point de départ du pointeur. Notez qu'il y aura deux lignes répétées, car le pointeur recule après la cinquième ligne.
Ce que je trouve toujours cool à propos de> <>, c'est sa capacité à modifier son propre code source, et je l'utilise dans ce programme. Les lignes 3 et 4 sont réutilisées pour imprimer les deux dernières lignes via une modification d'un caractère dans chacune.
Ligne 1: boucle d'entrée
<v?(0:i
< change direction to left
(0:i checks if input is less than 0 (no input defaults to -1)
v? change direction to down if so
Empiler: [-1,t,u,p,n,i]
Ligne 2: génère la troisième ligne de sortie
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Empiler: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Ligne 3: imprime la première ligne de sortie
>"#"o1-:?!v02.>~a"#"oo
>"#"o print "#"
1- subtract 1 from length (it's at the top of the stack)
:?!v move down if top of stack is 0
Empiler: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Sortie:
#########
Ligne 4: imprime la deuxième ligne de sortie
"-2ooa"#"~<.31v!?:-1o"*
-2ooa"#"~< pops 0, prints newline, "#", then decrements length by 2
" o"* prints space (* is supposed to be space char)
-1 decrements top of stack
.31v!?: changes direction to down if top of stack is 0, else jumps back to "
Empiler: [0,9,9,#, ,t,u,p,n,i, ,#]
Sortie ( *
représente l'espace):
#########
#*******
Ligne 5: imprime la troisième ligne de sortie
7v?=3loroo"#"a<.4
oo"#"a< prints "#",newline
r reverses stack
7v?=3lo .4 outputs until stack has 3 values, then changes direction to down
Empiler: [9,9,0]
Sortie:
#########
# #
# input #
Ligne 6: se configure pour imprimer les quatrième et cinquième lignes de sortie
.>";^"e3pa2p093
>";^" push ";",then "^"
e3p place "^" as the fifteenth character on line 4
a2p place ";" as the eleventh character on line 3
0 push a value (value doesn't matter -- it will be deleted)
. 93 jump to the tenth character on line 4
Empiler: [0,9,9,0]
Ligne 4: imprimer la quatrième ligne de sortie
"-2ooa"#"~<.31^!?:-1o"*
ooa"#"~< delete 0 (unnecessary value pushed), then print newline,"#"
-2 subtract two from value on top of stack (length)
" .31^!?:-1o"* print space until top of stack is 0, then change direction to up
Empiler: [0,9,0]
Sortie ( *
représente l'espace):
#########
# #
# input #
#*******
Ligne 3: imprimer la dernière ligne de sortie
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Empiler: [0,0]
Sortie:
#########
# #
# input #
# #
#########