著者がいなくなって質問が終了したため、この課題の継続。
ブールパーサーを作成する必要があります。
ブール式は、まだ聞いたことがない場合に備えて、2つの入力と1つの出力を備えています。
つまり、ブール演算には4つの「ゲート」があります。
- OR(で表される
|
)(2項演算子、引数の間) - AND(で表される
&
)(2項演算子、引数間) - XOR(で表される
^
)(2項演算子、引数間) - NOT(で表される
!
)(単項演算子、右側の引数)
これらのゲートは、真(で表される1
)または偽(で表される0
)の入力に対して動作します。次のように真理値表を使用して、可能な入力(A
およびB
この場合)と出力(O
)をリストできます。
XOR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|0
OR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|1
AND
A|B|O
-----
0|0|0
0|1|0
1|0|0
1|1|1
NOT
A|O
---
0|1
1|0
入力例はで1^((1|0&0)^!(1&!0&1))
、次のように評価されます。
1^((1|0&0)^!(1&!0&1))
=1^(( 1 &0)^!(1&!0&1))
=1^( 0 ^!(1&!0&1))
=1^( 0 ^!(1& 1&1))
=1^( 0 ^!( 1 &1))
=1^( 0 ^! 1 )
=1^( 0 ^ 0 )
=1^0
=1
出力はになります1
。
細部
- 例に見られるように、流行の順序はありません。最初に評価する必要がある括弧内の場合を除いて、すべて左から右に評価されます。
- 入力にはのみが含まれます
()!^&|01
。 - 上記の8文字を置き換えるために任意の8バイト文字を選択できますが、それらには1対1のマッピングがあり、明記する必要があります。
- 具体的には、入力から派生した
eval
文字列に対して関数を使用することはできません。具体的には、関数(または言語で同等のもの)とそれを呼び出す関数は、では使用できません。また、内部の文字列にを連結することはできません。input
eval
input
eval
。
得点
これはcode-golfです。バイト単位の最短のソリューションが優先されます。