この機械
ビリヤードボールタイプのマシンは、記号\
_
/
、大文字、小文字、スペース、および数字のみで構成されてい1
ます。
\
そして/
ランプです。上から来るボールは、それぞれ右側または左側に偏向されます。両方のランプについて、ボールがどちらかの側から来る場合、ボールは下向きに偏向されます。
_
論理要素です。それによって実行されるロジックは、コンピューターの最もビリヤードに似ていない部分です。最初に、左または右から来るボールは同じ方向に続きます。上から来るボールは停止します。次に、実行の終了後(以下のマシンの実行を参照)、その上を通過する/着地するボールの数が正の偶数である場合、1つのボールが要素の下部から解放されます。
スペースは何もしません。任意の方向から来るボールは、重力により真っ直ぐに落ちます。
小文字は入力です。すべての入力は、単一の1または0になります。
大文字は出力です。出力される数は、その場所にヒットしたビリヤードボールの数になります。
番号1
は、その場所で追加のビリヤードボールをリリースします。論理1を表します。
以外のすべてのキャラクター \_/
、あらゆる方向から来るボールを重力により真っ直ぐに落下させます。
ボールが結合、分割、衝突することはありません。入力、a _
、またはa から解放された場合にのみ作成され1
ます。彼らはまっすぐに倒れたときに破壊されます_
。
サンプル機
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
マシンには空白行はありませんが、_
'を使用すると、空白行があるように見える場合があります。
マシンの実行
マシンは、レイヤーまたは行で実行されます。最上層のビリヤードボールの動きはすべて、2番目の層で何かが起こる前に実行されます。
この機械
ab
\_A
C
次のように実行されます。
最初a
に、フォームの入力を求められますa:
。その後、ユーザーは1または0を入力します(その後にEnterが続きます)。入力に対してこれを繰り返しますb
。これで最初のレイヤーの終わりです。ユーザーが両方の入力に1を入力したと仮定します。
その後、最初のボール(からのパスを描くa
に沿って行く)、\
越えて、_
にし、A
し、下のスポットに落ちますA
。次に、2番目のボール(からb
)のパスをトレースし_
ます。これで第2層の終わりです。
さて、3番目のレイヤーの前に、_
2つのボールがクロスしているので、1つのボールをリリースします。出力A
には1つのボールが交差しているため、が出力されますA:1
。
3番目のレイヤーでは、最初のボール(から_
)のパスをトレースしますC
。2番目のボール(から落ちたA
)もまっすぐ落ちます。
これで、4番目のレイヤーの前に、出力C
が1つのボールを通過したため、出力されますC:1
。
4番目のレイヤーは空白なので、プログラムは終了します。
合計結果は次のようになります
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
目標
あなたの目標は、STDINからマシンを取得し、必要に応じて入力を取得し、STDOUTに出力することで、それをシミュレートすることです。プログラムへの入力の最初の部分は、実行するマシンで構成され、その後に空白行が続きます。入力文字が検出されると、プログラムは入力名の後にコロンが続く形式で入力を求めます。出力は、出力名の形式で表示され、その後にコロン、その場所を通過するボールの数が続きます。
これはゴルフです。
例
ワイヤークロッシング
ab
\/
AB
XORゲート
ab1
\_/
C
全加算器
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
ますか?