アルファベット上文法を考える{ 0
、 1
、 ?
、 :
}によって定義されるプロダクションルール
S→
0
┃1
┃0
?
秒:
秒┃1
?
秒:
秒
sから生成された文字列が与えられると、それを?:
右結合式(たとえば、a?B?X:Y:c?d:e?f:g
means a?(B?X:Y):(c?d:(e?f:g))
)の式として解析し、次のセマンティクスで評価します。
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
結果が0の場合、固定値を出力します。出力が1の場合、異なる固定値を出力します。回答で選択した出力値(0
/ / 1
またはFalse
/ True
)を指定します。
テストケース
0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0
ルール
- 文字列を一部のプログラミング言語のコードとして解釈して実行する言語組み込み機能(JavaScript / Perl / Ruby / Pythonなど)を使用することはできません
eval
。 - つまり、実際にコードを解析して入力文字列を評価する必要はありません。同等の結果を達成し、前のルールに違反しないアプローチをとることができます。
- プログラムはに対してチェックされます
perl -le 'print eval<>'
。 - 最短のコード(バイト単位)が優先されます。
S → T | T ? S : S
、T → 0 | 1
関連性について話をする必要がなくなり、?