> <> , 38 37 byte
Nguyền rủa bạn đôi trường hợp không gian * lắc cá *.
<v&0
>i:84*=?v0(?;67*o&1&
\ &0o?&a/
Bạn có thể thử trực tuyến (tất cả những gì bạn cần làm là cung cấp đầu vào thông qua trường gần phía dưới và sau đó nhấn Give
nút). Những gợi ý cho việc chơi gôn tiếp tục luôn được hoan nghênh, đặc biệt là những ý tưởng để loại bỏ những không gian lãng phí đó trước hàng thứ hai và thứ ba.
Nếu bạn được phép in một dòng mới bổ sung cho các khoảng trắng thừa, mã có thể là một con số khổng lồ 27 byte :
>i:84*=?v0(?;67*o
^ oa<
Giải trình
Lưu ý: thứ tự giải thích sẽ tương ứng với vị trí của con trỏ (vì vậy nếu mã được giải thích theo thứ tự người ta sẽ xem xét thứ tự, thì đó là vì đó là thứ tự mà con trỏ thực thi nó).
Dòng 1:
<v&0
< redirects flow leftward
0 pushes 0 onto the stack
& pops 0 and puts it in the register
v redirects flow downward
Dòng 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
Dòng 3:
NB Dòng này đi ngược lại, vì vậy đọc từ phải sang trái.
^ &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)
Về cơ bản, chương trình kiểm tra để đảm bảo đầu vào (được đọc một ký tự một lần) không phải là khoảng trắng và sau đó in dấu hoa thị. Nó chấm dứt nếu không có đầu vào (giá trị đầu vào là -1). Để đảm bảo nó không in các dòng mới bổ sung, nó sử dụng giá trị đăng ký, nó đặt thành 0 hoặc 1. Do cách tôi thiết lập, nó không quan tâm đến các giá trị không liên quan được đẩy lên ngăn xếp (ví dụ: giá trị của thanh ghi khi nó đặt thành 1
sau khi in dấu hoa thị); họ vẫn ở trên ngăn xếp khi chương trình kết thúc nhưng không làm gì cả.
Tôi biết nó có thể hơi khó hiểu kể từ khi tôi sử dụng 84*
và 67*
thay vào đó " "
và "*"
tương ứng, nhưng đó là vì tôi không cảm thấy muốn đưa các chuỗi vào chương trình vì bất kỳ lý do gì.