> <> , 106 104 байт
У мене виникає відчуття, що> <> може бути не найкращою мовою для цього, але я зайшов занадто далеко, щоб відмовитися і не публікувати це. В *кінці рядка 4 повинен бути пробіл. Ви не любите, як неймовірно гротескно виглядає цей код? Спробуйте в Інтернеті .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Ось версія без нічого, крім змінних напрямків, щоб дати уявлення про те, як рухається покажчик (зауважте, що я випустив "телепортні" заяви, тобто .).
Напрямок потоку:
<v
v>
> v >
< v
v <
>
Пояснення
Моя візуалізація стека базується на введенні input. > <> - двовимірна мова, тому зверніть увагу на те, де вказівник рухається між рядками, оскільки він виконує код під ним (у цьому коді<>v^ в основному використовується для зміни напрямку). Я розпочну свої пояснення з того місця, де починається покажчик. Зауважте, що буде повторюватися дві лінії, оскільки вказівник рухається назад після п’ятого рядка.
Те, що мені завжди цікаво, є його здатність змінювати власний вихідний код, і я використовую його в цій програмі. Рядки 3 та 4 повторно використовуються для друку останніх двох рядків шляхом модифікації символів у кожному.
Рядок 1: Вхідний цикл
<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
Стек: [-1,t,u,p,n,i]
Рядок 2: Створює третій рядок виводу
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Стек: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Рядок 3: Друкує перший рядок виводу
>"#"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
Стек: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Вихід:
#########
Рядок 4: Друкує другий рядок виводу
"-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 "
Стек: [0,9,9,#, ,t,u,p,n,i, ,#]
Вихід ( *представляє простір):
#########
#*******
Рядок 5: друкує третій рядок виводу
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
Стек: [9,9,0]
Вихід:
#########
# #
# input #
Рядок 6: Налаштовує на друк четвертого та п'ятого рядків виводу
.>";^"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
Стек: [0,9,9,0]
Рядок 4: Роздрукуйте четвертий рядок виводу
"-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
Стек: [0,9,0]
Вихід ( *представляє простір):
#########
# #
# input #
#*******
Рядок 3: Друк останнього рядка виводу
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Стек: [0,0]
Вихід:
#########
# #
# input #
# #
#########