//; 'q<)e
o!@i -
Попробуйте онлайн!
объяснение
Найти полуприличный макет для этого было довольно сложно. Я все еще не очень доволен этим из-за пробелов, <
и ;
, но это лучшее, что я мог сделать на данный момент.
Длина строки - одна из тех очень распространенных встроенных функций, которые не существуют в Алисе, потому что ее ввод является строкой, а вывод - целым числом (и все команды Алисы являются строго целыми числами для целых чисел или строками для строк). Мы можем измерить длину строки, записав ее на ленту в обычном режиме, а затем найдя ее конец в кардинальном режиме.
/ 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
(абсолютного значения), но дополнительный переключатель режима всегда оказывался более дорогим в моих попытках.