Tiếp tục thử thách này vì tác giả đã biến mất và câu hỏi được đóng lại.
Những gì bạn cần làm là tạo một trình phân tích cú pháp Boolean.
Biểu thức Boolean, trong trường hợp bạn chưa nghe về chúng, có hai đầu vào và một đầu ra.
Có bốn "cổng" trong số học boolean, cụ thể là:
- HOẶC (đại diện bởi
|
) (toán tử nhị phân, giữa các đối số) - AND (đại diện bởi
&
) (toán tử nhị phân, giữa các đối số) - XOR (đại diện bởi
^
) (toán tử nhị phân, giữa các đối số) - KHÔNG (đại diện bởi
!
) (toán tử đơn nguyên, đối số bên phải)
Các cổng này hoạt động trên đầu vào của chúng là true (đại diện bởi 1
) hoặc false (đại diện bởi 0
). Chúng ta có thể liệt kê các đầu vào có thể ( A
và B
trong trường hợp này) và đầu ra ( O
) bằng bảng chân lý như sau:
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
Một ví dụ đầu vào sẽ là 1^((1|0&0)^!(1&!0&1))
, sẽ đánh giá:
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
Đầu ra sẽ là 1
.
Chi tiết
- Như đã thấy trong ví dụ, không có thứ tự phổ biến. Tất cả được đánh giá từ trái sang phải, ngoại trừ khi bên trong dấu ngoặc đơn, cần được đánh giá trước.
- Đầu vào sẽ chỉ chứa
()!^&|01
. - Bạn có thể chọn bất kỳ ký tự 8 byte nào để thay thế 8 ký tự ở trên, nhưng chúng phải có ánh xạ 1 đến 1 và phải được nêu rõ.
- Cụ thể, hàm
eval
không được phép sử dụng trên bất kỳ chuỗi nào có nguồn gốc từ đầu vào . Cụ thể, chức nănginput
(hoặc tương đương trong ngôn ngữ) và bất kỳ chức năng nào gọi nó không thể được sử dụng bởieval
. Bạn cũng không thể nốiinput
chuỗi vào bên trongeval
.
Chấm điểm
Đây là môn đánh gôn . Giải pháp ngắn nhất trong byte thắng.