> <> , 106 104 byte
Ho la sensazione che> <> potrebbe non essere la lingua migliore per questo, ma sono arrivato troppo lontano per arrendermi e non pubblicarlo. La *fine della riga 4 dovrebbe essere uno spazio. Non ti piace quanto sia incredibilmente grottesco questo codice? Provalo online .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Ecco una versione senza altro che cambia direzione per dare un'idea di come si sposta il puntatore (nota che ho lasciato fuori le istruzioni "teletrasporto", cioè .).
Flusso di direzione:
<v
v>
> v >
< v
v <
>
Spiegazione
La mia visualizzazione dello stack si baserà sull'input input. > <> è un linguaggio bidimensionale, quindi presta attenzione a dove si sposta il puntatore tra le righe, poiché esegue il codice sottostante (in questo codice <>v^viene utilizzato principalmente per cambiare direzione). Inizierò le mie spiegazioni da dove inizia il puntatore. Si noti che verranno ripetute due righe, poiché il puntatore si sposta all'indietro dopo la quinta riga.
Quello che trovo sempre interessante su> <> è la sua capacità di modificare il proprio codice sorgente, e lo uso in questo programma. Le righe 3 e 4 vengono riutilizzate per stampare le ultime due righe attraverso una modifica di un carattere in ciascuna.
Riga 1: loop di input
<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
Pila: [-1,t,u,p,n,i]
Riga 2: genera la terza riga di output
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Pila: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Riga 3: stampa la prima riga dell'output
>"#"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
Pila: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Produzione:
#########
Riga 4: stampa la seconda riga dell'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 "
Pila: [0,9,9,#, ,t,u,p,n,i, ,#]
Output ( *rappresenta lo spazio):
#########
#*******
Riga 5: stampa la terza riga dell'output
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
Pila: [9,9,0]
Produzione:
#########
# #
# input #
Riga 6: si imposta per stampare la quarta e la quinta riga di output
.>";^"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
Pila: [0,9,9,0]
Riga 4: stampa la quarta riga dell'output
"-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
Pila: [0,9,0]
Output ( *rappresenta lo spazio):
#########
# #
# input #
#*******
Riga 3: stampa l'ultima riga dell'output
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Pila: [0,0]
Produzione:
#########
# #
# input #
# #
#########