Alice , 16 bytes
//; 'q<)e
o!@i -
Experimente online!
Explicação
Encontrar um layout meio decente para isso foi bastante complicado. Ainda não estou super feliz com isso por causa dos espaços, do <
e do ;
, mas é o melhor que posso fazer por enquanto.
O comprimento da string é um daqueles embutidos muito comuns que não existem em Alice, porque sua entrada é uma string e sua saída é um número inteiro (e todos os comandos de Alice são estritamente números inteiros para número inteiro ou cadeias de caracteres para cadeias). Podemos medir o comprimento de uma string gravando-a na fita no modo Ordinal e, em seguida, encontrando seu fim no modo 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.
Eu também tentei cuidar do sinal de menos no modo Cardinal com H
(valor absoluto), mas a opção de modo adicional sempre acabava sendo mais cara em minhas tentativas.