//; 'q<)e
o!@i -
Спробуйте в Інтернеті!
Пояснення
Пошук напівпристойного плану для цього був досить складним. Я все ще не надто задоволений цим через простори, <
і;
, але це найкраще, що я міг зробити зараз.
Довжина рядка - одна з тих дуже поширених вбудованих програм, яка не існує в Alice, оскільки її вхід є рядком, а вихід - цілим числом (а всі команди Alice - це цілі числа до цілих чи рядків до рядків). Ми можемо виміряти довжину струни, записавши її на стрічку в ординарному режимі, а потім знайти її кінець у режимі Кардинала.
/ 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.
Я також намагався піклуватися про знак мінус у режимі Кардинала з H
(абсолютне значення), але перемикач додаткового режиму завжди виявлявся дорожчим у моїх спробах.