> <> , 106 104 Bytes
Saya merasa bahwa> <> mungkin bukan bahasa terbaik untuk ini, tapi saya sudah terlalu jauh untuk menyerah dan tidak memposting ini. Di *
akhir baris 4 seharusnya spasi. Tidakkah Anda suka tampilan kode ini yang sangat aneh? Cobalah online .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Berikut adalah versi tanpa perubahan arah kecuali untuk memberikan gambaran tentang bagaimana pointer bergerak (perhatikan bahwa saya telah meninggalkan pernyataan "teleport", yaitu .
).
Arah aliran:
<v
v>
> v >
< v
v <
>
Penjelasan
Visualisasi stack saya akan didasarkan pada input input
. > <> adalah bahasa dua dimensi, jadi perhatikan di mana pointer bergerak di antara garis, karena mengeksekusi kode di bawahnya (dalam kode ini<>v^
ini terutama digunakan untuk mengubah arah). Saya akan memulai penjelasan saya dari tempat penunjuk dimulai. Perhatikan bahwa akan ada dua garis yang diulang, saat penunjuk bergerak mundur setelah garis kelima.
Apa yang selalu saya temukan keren tentang> <> adalah kemampuannya untuk memodifikasi kode sumbernya sendiri, dan saya memanfaatkannya dalam program ini. Baris 3 dan 4 digunakan kembali untuk mencetak dua baris terakhir melalui modifikasi karakter di masing-masing.
Baris 1: Input loop
<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
Tumpukan: [-1,t,u,p,n,i]
Baris 2: Menghasilkan garis output ketiga
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Tumpukan: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Baris 3: Mencetak baris pertama keluaran
>"#"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
Tumpukan: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Keluaran:
#########
Baris 4: Mencetak baris kedua dari output
"-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 "
Tumpukan: [0,9,9,#, ,t,u,p,n,i, ,#]
Output ( *
mewakili ruang):
#########
#*******
Baris 5: Mencetak baris ketiga dari hasil
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
Tumpukan: [9,9,0]
Keluaran:
#########
# #
# input #
Baris 6: Mengatur dirinya untuk mencetak garis keluaran keempat dan kelima
.>";^"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
Tumpukan: [0,9,9,0]
Baris 4: Cetak baris keluaran keempat
"-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
Tumpukan: [0,9,0]
Output ( *
mewakili ruang):
#########
# #
# input #
#*******
Baris 3: Cetak baris keluaran terakhir
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Tumpukan: [0,0]
Keluaran:
#########
# #
# input #
# #
#########