アリス、28 18バイト
10バイトのゴルフをしてくれた@MartinEnderに感謝
=I.!'`-+?hn
>3-nO@
オンラインでお試しください!
この投稿では、@ MartinEnderの回答とは異なる方法を使用しています。
この投稿は0x00
、偽りと0x01
真実のために出力します。
したがって、ここに出力0
または1
代わりにバージョンがあります:試してみてください!
説明
以下の説明は、「可視」バージョンのものです。どちらも非常によく似ていますが、最初のプログラムでは、最後o
は(0
または1
基本モードになっているため)文字列に変換されませんが、代わりに数値を取得してそのコードポイントで文字を出力します。
= 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
この後、IPはで左端に回り込み=
ます。スタックのトップ値がの場合、0
IPはパスで続行し、すべての文字の合計を増やします。入力が完了すると(スタックのトップがになります1
)、IPは右に変わります(90時計回り)。
1つ注意することが重要です。最初の行のループは、入力が終了すると1回繰り返されます。これは、減算されます97
(96
から'`
と-1
総からの入力がないことから)。
> 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