> <>、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
。> <>は2次元の言語です。そのため、ポインターはその下でコードを実行するため(このコードでは)<>v^
は主に方向を変更するために使用されます)。ポインターが始まるところから説明を始めます。ポインターは5行目から後方に移動するため、2行繰り返されることに注意してください。
私がいつもクールだと思うのは、独自のソースコードを変更する機能です。このプログラムでそれを利用しています。3行目と4行目は、それぞれの文字を変更して最後の2行を印刷するために再利用されます。
行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行目:出力の3行目を生成します
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:出力の2行目を印刷します
"-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行目:出力の3行目を出力します
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行目: 4行目と5行目の出力を印刷するように設定します
.>";^"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:出力の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 #
# #
#########