诅咒你双倍空间情况*摇鱼*。
<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*
而不是" "
and 以来,这可能有点令人困惑"*"
,但这是因为我不想出于任何原因将字符串放入程序中。