> <> , 106 104 byte
Tôi có cảm giác rằng> <> có thể không phải là ngôn ngữ tốt nhất cho việc này, nhưng tôi đã đi quá xa để từ bỏ và không đăng bài này. Các *
ở phần cuối của dòng 4 được coi là một dấu cách. Bạn không thích cách mã này trông kỳ cục đến mức nào? Hãy thử trực tuyến .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Đây là một phiên bản không có gì ngoài những người thay đổi hướng để đưa ra ý tưởng về cách con trỏ di chuyển (lưu ý rằng tôi đã bỏ qua các câu lệnh "dịch chuyển tức thời", tức là .
).
Hướng dòng chảy:
<v
v>
> v >
< v
v <
>
Giải trình
Hình dung của tôi về ngăn xếp sẽ được dựa trên đầu vào input
. > <> là ngôn ngữ hai chiều, vì vậy hãy chú ý đến nơi con trỏ di chuyển giữa các dòng, vì nó thực thi mã bên dưới nó (trong mã này<>v^
này chủ yếu được sử dụng để thay đổi hướng). Tôi sẽ bắt đầu giải thích từ nơi con trỏ bắt đầu. Lưu ý rằng sẽ có hai dòng lặp lại, vì con trỏ di chuyển ngược sau dòng thứ năm.
Điều tôi luôn thấy thú vị về> <> là khả năng sửa đổi mã nguồn của chính nó và tôi sử dụng nó trong chương trình này. Dòng 3 và 4 được sử dụng lại để in hai dòng cuối cùng thông qua sửa đổi một ký tự trong mỗi dòng.
Dòng 1: Vòng lặp đầu vào
<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
Cây rơm: [-1,t,u,p,n,i]
Dòng 2: Tạo dòng đầu ra thứ ba
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Cây rơm: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Dòng 3: In dòng đầu ra
>"#"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
Cây rơm: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Đầu ra:
#########
Dòng 4: In dòng đầu ra thứ hai
"-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 "
Cây rơm: [0,9,9,#, ,t,u,p,n,i, ,#]
Đầu ra ( *
đại diện cho không gian):
#########
#*******
Dòng 5: In dòng đầu ra thứ ba
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
Cây rơm: [9,9,0]
Đầu ra:
#########
# #
# input #
Dòng 6: Thiết lập để in dòng đầu ra thứ tư và thứ năm
.>";^"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
Cây rơm: [0,9,9,0]
Dòng 4: In dòng thứ tư của đầu ra
"-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
Cây rơm: [0,9,0]
Đầu ra ( *
đại diện cho không gian):
#########
# #
# input #
#*******
Dòng 3: In dòng đầu ra cuối cùng
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Cây rơm: [0,0]
Đầu ra:
#########
# #
# input #
# #
#########