> <> , 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*
แทน" "
และ"*"
ตามลำดับ แต่นั่นก็เป็นเพราะผมไม่ได้รู้สึกเหมือนการวางสายในโปรแกรมด้วยเหตุผลใดก็ตาม