> <> , 106104 Bytes
Tengo la sensación de que> <> puede no ser el mejor lenguaje para esto, pero he llegado demasiado lejos para rendirme y no publicar esto. Se *
supone que el final de la línea 4 es un espacio. ¿No te encanta lo increíblemente grotesco que se ve este código? Pruébalo en línea .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Aquí hay una versión sin nada más que cambiadores de dirección para dar una idea de cómo se mueve el puntero (tenga en cuenta que he omitido las declaraciones de "teletransporte", es decir .
).
Flujo de dirección:
<v
v>
> v >
< v
v <
>
Explicación
Mi visualización de la pila se basará en la entrada input
. > <> es un lenguaje bidimensional, así que preste atención a dónde se mueve el puntero entre las líneas, ya que ejecuta el código debajo de él (en este código<>v^
se utilizan principalmente para cambiar de dirección). Comenzaré mis explicaciones desde donde comienza el puntero. Tenga en cuenta que habrá dos líneas repetidas, ya que el puntero se mueve hacia atrás después de la quinta línea.
Lo que siempre me gusta de> <> es su capacidad para modificar su propio código fuente, y lo uso en este programa. Las líneas 3 y 4 se reutilizan para imprimir las dos últimas líneas mediante una modificación de un carácter en cada una.
Línea 1: bucle 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
Apilar: [-1,t,u,p,n,i]
Línea 2: genera la tercera línea de salida
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Apilar: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Línea 3: imprime la primera línea de salida
>"#"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
Apilar: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Salida:
#########
Línea 4: imprime la segunda línea de salida
"-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 "
Apilar: [0,9,9,#, ,t,u,p,n,i, ,#]
Salida ( *
representa espacio):
#########
#*******
Línea 5: imprime la tercera línea de salida
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
Apilar: [9,9,0]
Salida:
#########
# #
# input #
Línea 6: se configura para imprimir la cuarta y quinta línea de salida
.>";^"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
Apilar: [0,9,9,0]
Línea 4: imprime la cuarta línea de salida
"-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
Apilar: [0,9,0]
Salida ( *
representa espacio):
#########
# #
# input #
#*******
Línea 3: imprimir la última línea de salida
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Apilar: [0,0]
Salida:
#########
# #
# input #
# #
#########