//; 'q<)e
o!@i -
Hãy thử trực tuyến!
Giải trình
Tìm một bố cục nửa vời cho việc này là khá khó khăn. Tôi vẫn chưa hài lòng với nó vì không gian, <
và ;
, nhưng đây là điều tốt nhất tôi có thể làm bây giờ.
Độ dài chuỗi là một trong những phần tử tích hợp rất phổ biến không tồn tại trong Alice, bởi vì đầu vào của nó là một chuỗi và đầu ra của nó là một số nguyên (và tất cả các lệnh Alice đều là số nguyên cho số nguyên hoặc chuỗi thành chuỗi). Chúng ta có thể đo chiều dài của chuỗi bằng cách ghi nó vào băng ở chế độ Thông thường và sau đó tìm kết thúc của chuỗi ở chế độ Hồng y.
/ 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.
Tôi cũng đã thử chăm sóc dấu trừ trong chế độ Cardinal với H
(giá trị tuyệt đối), nhưng công tắc chế độ bổ sung luôn kết thúc đắt hơn trong các nỗ lực của tôi.