> <> , 38 37 байт
Проклинаю тебя двойным пробелом * качает рыбу *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Вы можете попробовать это онлайн (все, что вам нужно сделать, это ввести данные через поле внизу, а затем нажатьGive
кнопку). Всегда приветствуются предложения по дальнейшей игре в гольф, особенно идеи по удалению пустого пространства перед второй и третьей линиями.
Если вам было разрешено напечатать дополнительную новую строку для лишних пробелов, код мог бы быть колоссальным 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). Чтобы убедиться, что он не печатает дополнительные символы новой строки, он использует значение регистра, которое он либо устанавливает в 0 или 1. Из-за способа, которым я его установил, он не заботится о посторонних значениях, помещаемых в стек (например, значение регистра, когда оно устанавливает его1
после печати звездочки); они остаются в стеке, когда программа завершается, но ничего не делают.
Я знаю, что это может немного сбивать с толку, так как я использовал 84*
и 67*
вместо " "
и "*"
соответственно, но это было потому, что я не чувствовал желания вставлять строки в программу по любой причине.