> <> , 106 104 bytes
Tenho a sensação de que> <> pode não ser o melhor idioma para isso, mas cheguei longe demais para desistir e não postar isso. O *
final da linha 4 deve ser um espaço. Você não ama o quão incrivelmente grotesco esse código parece? Experimente online .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Aqui está uma versão sem nada além de trocadores de direção para dar uma idéia de como o ponteiro se move (observe que deixei de fora as instruções de "teleporte", ou seja, .
).
Fluxo de direção:
<v
v>
> v >
< v
v <
>
Explicação
Minha visualização da pilha será baseada na entrada input
. > <> é uma linguagem bidimensional, portanto, preste atenção ao local em que o ponteiro está se movendo entre as linhas, pois ele executa o código abaixo dele (neste código<>v^
são usados principalmente para mudar de direção). Vou começar minhas explicações de onde o ponteiro começa. Observe que haverá duas linhas repetidas, à medida que o ponteiro se move para trás após a quinta linha.
O que eu sempre acho interessante em> <> é a capacidade de modificar seu próprio código-fonte, e eu o uso neste programa. As linhas 3 e 4 são reutilizadas para imprimir as duas últimas linhas através da modificação de um caractere em cada uma.
Linha 1: loop de entrada
<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
Pilha: [-1,t,u,p,n,i]
Linha 2: gera terceira linha de saída
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Pilha: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Linha 3: Imprime a primeira linha de saída
>"#"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
Pilha: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Saída:
#########
Linha 4: Imprime a segunda linha de saída
"-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 "
Pilha: [0,9,9,#, ,t,u,p,n,i, ,#]
Saída ( *
representa espaço):
#########
#*******
Linha 5: Imprime a terceira linha de saída
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
Pilha: [9,9,0]
Saída:
#########
# #
# input #
Linha 6: Configura-se para imprimir quarta e quinta linhas de saída
.>";^"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
Pilha: [0,9,9,0]
Linha 4: Imprima a quarta linha de saída
"-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
Pilha: [0,9,0]
Saída ( *
representa espaço):
#########
# #
# input #
#*******
Linha 3: Imprimir a última linha de saída
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Pilha: [0,0]
Saída:
#########
# #
# input #
# #
#########