> <>、38 37バイト
ダブルスペースケースを呪う*魚を振る*。
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
オンラインで試すことができます(行う必要があるのは、下部近くのフィールドに入力してからGive
ボタンを押すことだけです)。特に2行目と3行目の前にあるこれらの無駄なスペースを削除するアイデアは、さらにゴルフをするための提案を歓迎します。
余分なスペースのために追加の改行を印刷できる場合、コードは27バイトになります。
>i:84*=?v0(?;67*o
^ oa<
説明
注:説明の順序は、ポインターの位置に対応します(したがって、順序を考慮するものからコードが説明される場合、それはポインターが実行する順序であるためです)。
ライン1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
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
3行目:
NBこの行は逆になっているため、右から左に読んでください。
^ &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)
基本的に、プログラムは入力(一度に1文字ずつ読み取られる)がスペースでないことを確認してから、アスタリスクを出力します。入力がない場合は終了します(入力値は-1です)。追加の改行を印刷しないようにするために、0または1に設定するレジスタ値を使用します。設定方法により、余分な値がスタックにプッシュされることは気にしません(例:1
アスタリスクを印刷した後に設定するときのレジスタの値); プログラムが終了してもスタックには残りますが、何もしません。
84*
andの67*
代わりに" "
andを"*"
それぞれ使用したため、少し混乱するかもしれませんが、それは何らかの理由でプログラムに文字列を入れる気がなかったからです。