> <> , 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:
Примітка Цей рядок йде в зворотному порядку, тому читайте праворуч ліворуч.
^ &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*
замість цього, " "
і "*"
відповідно, але це було тому, що я не відчував необхідності вводити рядки в програму з будь-якої причини.