Alice , 28 18 byte
Grazie a @MartinEnder per giocare a golf 10 byte
=I.!'`-+?hn
>3-nO@
Provalo online!
Questo invio utilizza un metodo diverso rispetto alla risposta di @ MartinEnder.
Questa presentazione produce 0x00
falsità e 0x01
verità.
Quindi ecco una versione che emette 0
o 1
invece: provalo!
Spiegazione
La spiegazione seguente è per la versione "visibile". Entrambi sono molto simili, tranne nel primo programma, l'ultimo o
non converte 0
né 1
una stringa (perché siamo in modalità cardinale), ma invece prende il numero e genera il carattere in quel punto di codice.
= Does nothing, but will be useful later on
I Read a character and push its code point onto the stack
If there is no more input, -1 is pushed instead
. Duplicate it
! Store it on the tape
# Skip the next command
o Gets skipped
'` Push 96
- Subtract it from the character
+ And add it to the total
? Load the number on the tape
h Increment it
n And negate it
For all characters that are read, ?hn results in 0,
but if -1 is pushed, then the result becomes 1
Successivamente, l'IP si sposta sul bordo sinistro del =
. Se il valore massimo dello stack è 0
, l'IP continua con il suo percorso, aumentando la somma totale di tutti i caratteri, una volta fatto con l'input (la parte superiore dello stack sarà 1
), quindi l'IP gira a destra (90 gradi in senso orario).
Una cosa è importante notare, il loop sulla prima riga ripeterà una volta dopo che l'input è terminato. Questo sottrarrà 97
( 96
dalla '`
e -1
dalla mancanza di input) dal totale.
> Set the direction of the IP to East
3- Subtract 3 from it (yields 0 if sum is 100, something else otherwise)
n Negate it; Zero becomes 1, non-zero numbers become 0
/ Mirror; the IP gets redirected South-East
The IP reflects off the bottom and goes North-East
Now the program is in Ordinal mode, where numbers are automatically converted into strings when being used
o Output the top of the stack as a string
IP reflects off the top and heads South-East
@ End the program