> <> , 38 37 Bytes
Fluch du doppelter Raum Fall * schüttelt Fisch *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Sie können es online ausprobieren (alles, was Sie tun müssen, ist eine Eingabe über das Feld am unteren Rand und Give
drücken Sie dann die Taste). Vorschläge für weiteres Golfen sind immer willkommen, insbesondere Ideen, um diese verschwenderischen Räume vor der zweiten und dritten Zeile zu entfernen.
Wenn Sie eine zusätzliche neue Zeile für zusätzliche Leerzeichen drucken könnten, könnte der Code ganze 27 Bytes umfassen :
>i:84*=?v0(?;67*o
^ oa<
Erläuterung
Anmerkung: Die Reihenfolge der Erklärung entspricht der Position des Zeigers (wenn der Code also in einer anderen Reihenfolge erklärt wird, als dies der Fall wäre, führt der Zeiger ihn in dieser Reihenfolge aus).
Linie 1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
Zeile 2:
>i:84*=?v0(?;67*o&1&
> redirects flow leftward
i: pushes input and then duplicates it
84* pushes 32 (the space character numerically)
=?v pops 32 and input and redirects flow downward if they're equal
0(?; pops input and terminates if input is less than 0*
67*o pushes 42 (asterisk) and prints it
&1& pushes register value and then puts 1 in the register
*in ><>, the command i returns -1 if no input is given
Zeile 3:
Hinweis: Diese Zeile verläuft in umgekehrter Reihenfolge. Lesen Sie also von rechts nach links.
^ &0o?&a<
< redirects flow leftward
a pushes 10 (newline) onto the stack
o?& prints a newline if the register is not 0
&0 sets the register to 0
^ redirects flow upwards (back to the second line)
Grundsätzlich prüft das Programm, ob die Eingabe (die zeichenweise gelesen wird) kein Leerzeichen ist und gibt dann einen Stern aus. Es wird beendet, wenn keine Eingabe vorliegt (der Eingabewert ist -1). Um sicherzustellen, dass keine zusätzlichen Zeilenumbrüche gedruckt werden, wird der Registerwert verwendet, der entweder auf 0 oder 1 gesetzt wird. Aufgrund der Art und Weise, wie ich ihn einrichte, ist es egal, welche Werte auf den Stapel übertragen werden (z. B. den Wert des Registers, auf den es 1
nach dem Drucken eines Sternchens gesetzt wird); Sie verbleiben auf dem Stapel, wenn das Programm beendet wird, tun aber nichts.
Ich weiß , es könnte ein bisschen verwirrend , da ich verwenden , 84*
und 67*
statt " "
und "*"
jeweils, aber das war , weil ich nicht aus irgendeinem Grunde , wie wenn man Strings im Programm fühlen.