> <> , 38 37 bajtów
Przeklinaj podwójną skrzynkę * potrząsa rybą *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Możesz spróbować w trybie online (wystarczy, że podasz dane w polu u dołu, a następnie naciśnij Giveprzycisk). Sugestie dotyczące dalszego gry w golfa są zawsze mile widziane, zwłaszcza pomysły na usunięcie tych marnotrawczych miejsc przed drugą i trzecią linią.
Jeśli pozwolono ci wydrukować dodatkowy znak nowej linii dla dodatkowych spacji, kod może mieć aż 27 bajtów :
>i:84*=?v0(?;67*o
^ oa<
Wyjaśnienie
Uwaga: kolejność objaśnień będzie odpowiadać położeniu wskaźnika (więc jeśli kod zostanie wyjaśniony na podstawie tego, co uważa się za porządek, dzieje się tak, ponieważ jest to kolejność, w której wskaźnik go wykonuje).
Linia 1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
Linia 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
Wiersz 3:
Uwaga: Ta linia jest odwrócona, więc czytaj od prawej do lewej.
^ &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)
Zasadniczo test programu, aby upewnić się, że wejście (które jest odczytywane jeden znak na raz) nie jest spacją, a następnie drukuje gwiazdkę. Kończy się, jeśli nie ma danych wejściowych (wartość wejściowa to -1). Aby upewnić się, że nie drukuje dodatkowych znaków nowej linii, używa wartości rejestru, którą ustawia na 0 lub 1. Ze względu na sposób, w jaki go skonfigurowałem, nie przejmuje się dodatkowymi wartościami wypychanymi na stos (np. wartość rejestru, gdy ustawia się go 1po wydrukowaniu gwiazdki); pozostają na stosie po zakończeniu programu, ale nic nie robią.
Wiem, że może to być trochę mylące, ponieważ użyłem 84*i 67*zamiast " "i "*"odpowiednio, ale było tak, ponieważ nie miałem ochoty umieszczać ciągów w programie z jakiegokolwiek powodu.