Kelanjutan dari tantangan ini karena penulis telah pergi dan pertanyaannya sudah ditutup.
Yang perlu Anda lakukan adalah membuat parser Boolean.
Ekspresi Boolean, jika Anda belum pernah mendengarnya, memiliki dua input dan satu output.
Ada empat "gerbang" dalam aritmatika boolean, yaitu:
- ATAU (diwakili oleh
|
) (operator biner, di antara argumen) - DAN (diwakili oleh
&
) (operator biner, di antara argumen) - XOR (diwakili oleh
^
) (operator biner, di antara argumen) - TIDAK (diwakili oleh
!
) (operator unary, argumen di sebelah kanan)
Gerbang ini beroperasi pada input mereka yang benar (diwakili oleh 1
) atau salah (diwakili oleh 0
). Kami dapat mendaftar input yang mungkin ( A
dan B
dalam hal ini) dan output ( O
) menggunakan tabel kebenaran sebagai berikut:
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
Contoh input akan 1^((1|0&0)^!(1&!0&1))
, yang akan mengevaluasi ke:
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
Outputnya adalah 1
.
Detail
- Seperti terlihat dalam contoh, tidak ada urutan prevalensi. Semua dievaluasi dari kiri ke kanan, kecuali ketika di dalam tanda kurung, yang harus dievaluasi terlebih dahulu.
- Input hanya akan berisi
()!^&|01
. - Anda dapat memilih karakter 8-byte untuk mengganti 8 karakter di atas, tetapi karakter tersebut harus memiliki pemetaan 1-ke-1 dan harus dinyatakan.
- Secara khusus, fungsi
eval
ini tidak diperbolehkan untuk digunakan pada string apa pun yang berasal dari input . Secara khusus, fungsiinput
(atau yang setara dalam bahasa) dan fungsi apa pun yang memanggilnya tidak dapat digunakan oleheval
. Anda juga tidak dapat menyatukaninput
ke dalam string Anda di dalameval
.
Mencetak gol
Ini adalah kode-golf . Solusi terpendek dalam byte menang.