> <> , 106 104 Bytes
Ich habe das Gefühl, dass> <> nicht die beste Sprache dafür ist, aber ich bin zu weit gekommen, um aufzugeben und dies nicht zu posten. Das *am Ende der Zeile 4 soll ein Leerzeichen sein. Liebst du nicht, wie unglaublich grotesk dieser Code aussieht? Probieren Sie es online aus .
<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o"
7v?=3loroo"#"a<.4
.>";^"e3pa2p093
Hier ist eine Version ohne Richtungswechsler, die eine Vorstellung davon gibt, wie sich der Zeiger bewegt (beachte, dass ich die "Teleport" -Anweisungen weggelassen habe, dh .).
Richtung fluss:
<v
v>
> v >
< v
v <
>
Erläuterung
Meine Visualisierung des Stapels basiert auf der Eingabe input. > <> ist eine zweidimensionale Sprache, achten Sie also darauf, wo sich der Zeiger zwischen den Zeilen bewegt, während er darunterliegenden Code ausführt (in diesem Code <>v^werden hauptsächlich Richtungsänderungen verwendet). Ich beginne meine Erklärungen dort, wo der Zeiger beginnt. Beachten Sie, dass zwei Zeilen wiederholt werden, wenn sich der Zeiger nach der fünften Zeile rückwärts bewegt.
Was ich an> <> immer cool finde, ist die Möglichkeit, seinen eigenen Quellcode zu ändern, und ich benutze ihn in diesem Programm. Die Zeilen 3 und 4 werden wiederverwendet, um die letzten beiden Zeilen durch eine Änderung eines Zeichens in jedem zu drucken.
Zeile 1: Eingangsschleife
<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
Stapel: [-1,t,u,p,n,i]
Zeile 2: Erzeugt die dritte Ausgabezeile
v>~" ## "}}l:::
>~" ## "}} remove -1 (default input value) from stack and pads with # and spaces
l::: push 4 lengths of padded input
Stapel: [9,9,9,9,#, ,t,u,p,n,i, ,#]
Zeile 3: Druckt die erste Ausgabezeile
>"#"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
Stapel: [0,9,9,9,#, ,t,u,p,n,i, ,#]
Ausgabe:
#########
Zeile 4: Gibt die zweite Ausgabezeile aus
"-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 "
Stapel: [0,9,9,#, ,t,u,p,n,i, ,#]
Ausgabe (steht *für Leerzeichen):
#########
#*******
Zeile 5: Gibt die dritte Ausgabezeile aus
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
Stapel: [9,9,0]
Ausgabe:
#########
# #
# input #
Zeile 6: Legt fest, dass die vierte und fünfte Ausgabezeile gedruckt wird
.>";^"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
Stapel: [0,9,9,0]
Zeile 4: Gibt die vierte Ausgabezeile aus
"-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
Stapel: [0,9,0]
Ausgabe (steht *für Leerzeichen):
#########
# #
# input #
#*******
Zeile 3: Letzte Ausgabezeile drucken
"#"o1-:?!;02.>~a"#"oo
>~a"#"oo pop top of stack, print "#", newline
"#"o1-:?!;02. print "#" until top of stack is 0, then terminate
Stapel: [0,0]
Ausgabe:
#########
# #
# input #
# #
#########