Pertimbangkan tata bahasa lebih alfabet { 0
, 1
, ?
, :
} yang didefinisikan oleh aturan produksi
s →
0
┃1
┃0
?
s:
s ┃1
?
s:
s
Diberikan string yang dihasilkan dari s , parsing sebagai ekspresi di mana ?:
asosiatif-benar (misalnya, a?B?X:Y:c?d:e?f:g
berarti a?(B?X:Y):(c?d:(e?f:g))
) dan mengevaluasinya dengan semantik berikut:
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
Jika hasilnya 0 , hasilkan beberapa nilai tetap; jika output 1 , output nilai tetap berbeda. Tentukan nilai output yang Anda pilih (misalnya 0
/ 1
, atau False
/ True
) dalam jawaban Anda.
Uji kasus
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
Aturan
- Anda tidak boleh menggunakan bahasa bawaan yang menafsirkan string sebagai kode dalam beberapa bahasa pemrograman dan menjalankannya (seperti JavaScript / Perl / Ruby / Python
eval
). - Yang mengatakan, kode Anda sebenarnya tidak harus diuraikan dan kemudian mengevaluasi string input. Anda dapat mengambil pendekatan apa pun untuk mencapai hasil yang setara dan tidak melanggar aturan sebelumnya.
- Program Anda akan diperiksa
perl -le 'print eval<>'
. - Kode terpendek (dalam byte) menang.
S → T | T ? S : S
, T → 0 | 1
, menghilangkan kebutuhan untuk berbicara tentang associativity?