//; 'q<)e
o!@i -
ลองออนไลน์!
คำอธิบาย
การค้นหาเลย์เอาต์ที่เหมาะสมสำหรับเรื่องนี้ค่อนข้างยุ่งยาก ฉันยังไม่ได้มีความสุขกับมันเพราะช่องว่าง<
และและ;
แต่นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ในตอนนี้
ความยาวสตริงเป็นหนึ่งในบิวด์อินทั่วไปที่ไม่มีอยู่ในอลิซเนื่องจากอินพุตเป็นสตริงและเอาต์พุตเป็นจำนวนเต็ม เราสามารถวัดความยาวของสตริงได้โดยการเขียนลงในเทปในโหมด Ordinal จากนั้นหาจุดสิ้นสุดในโหมด Cardinal
/ Reflect to SE. Switch to Ordinal. While in Ordinal mode, the IP will bounce
diagonally up and down through the code.
! Store an implicit empty string on the tape, does nothing.
; Discard an implicit empty string, does nothing.
i Read all input as a string.
'- Push "-".
< Set the horizontal component of the IP's direction to west, so we're bouncing
back now.
- Remove substring. This deletes the minus sign if it exists.
'i Push "i".
; Discard it again.
! Store the input, minus a potential minus sign, on the tape.
/ Reflect to W. Switch to Cardinal. The IP immediately wraps to the
last column.
e) Search the tape to the right for a -1, which will be found at the end
of the string we stored there.
< Does nothing.
q Push the tape head's position, which is equal to the string length.
'<sp> Push " ".
; Discard it again.
/ Reflect to NW. Switch to Ordinal. The IP immediately bounces off
the top boundary to move SW instead.
o Implicitly convert the string length to a string and print it.
IP bounces off the bottom left corner, moves back NE.
/ Reflect to S. Switch to Cardinal.
! Store an implicit 0 on the tape, irrelevant.
The IP wraps back to the first line.
/ Reflect to NE. Switch to Ordinal. The IP immediately bounces off
the top boundary to move SE instead.
@ Terminate the program.
ฉันยังพยายามดูแลเครื่องหมายลบในโหมด Cardinal ด้วยH
(ค่าสัมบูรณ์) แต่สวิตช์โหมดเพิ่มเติมมักจะจบลงด้วยราคาที่แพงกว่าในความพยายามของฉัน