Bạn được cung cấp một tập hợp các câu lệnh logic. Thách thức của bạn là loại bỏ bất kỳ cái nào mâu thuẫn với những cái khác, nhưng theo cách tối ưu (nghĩa là loại bỏ một số lượng tối thiểu các câu lệnh).
Thử thách
Bạn sẽ viết một chương trình hoặc một hàm lấy đầu vào một danh sách các câu lệnh, loại bỏ số lượng câu lệnh tối thiểu sao cho có một giải pháp và đưa ra phần còn lại.
Hợp lý
Báo cáo bao gồm các biến A-Z và toán tử giữa chúng.
Có 5 toán tử : -(không), v(hoặc), ^(và), ->(nếu) và <->(iff).
Bảng chân lý:
A | B | -A | AvB | A^B | A->B | A<->B
0 | 0 | 1 | 0 | 0 | 1 | 1
0 | 1 | 1 | 1 | 0 | 1 | 0
1 | 0 | 0 | 1 | 0 | 0 | 0
1 | 1 | 0 | 1 | 1 | 1 | 1
Các toán tử này có thể được kết hợp cùng với dấu ngoặc đơn ():
A | B | -(AvB) | Av(-A) | A^(-A) | (AvB)->(-B)
0 | 0 | 1 | 1 | 0 | 1
0 | 1 | 0 | 1 | 0 | 0
1 | 0 | 0 | 1 | 0 | 1
1 | 1 | 0 | 1 | 0 | 0
Hệ thống logic bao gồm 1 hoặc nhiều câu lệnh .
Một giải pháp cho hệ thống logic là một trạng thái trong đó tất cả các câu lệnh đều đồng thời đúng.
Ví dụ về hệ thống logic:
AvB
-(A<->B)
(AvB)->(-B)
Giải pháp duy nhất là A = 1, B = 0.
A^B
-(B<->A)
Điều này không có giải pháp ; không có sự kết hợp Avà Bcả hai tuyên bố là đúng.
Đầu vào
Bạn sẽ nhận được một tập hợp các câu lệnh làm đầu vào. Điều này có thể được thực hiện thông qua STDIN hoặc các đối số hàm, được định dạng dưới dạng một mảng (ở định dạng thuận tiện) hoặc chuỗi phân tách dòng mới hoặc phân tách bằng dấu cách.
Các báo cáo sẽ có dạng sau (gần như- ABNF ):
statement = variable / operation
operation = not-operation / binary-operation
not-operation = "-" operand
binary-operation = operand binary-operator operand
operand = variable / "(" operation ")"
variable = "A"-"Z"
binary-operator = "v" / "^" / "->" / "<->"
Ví dụ báo cáo:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
Đầu ra
Bạn phải trả lại tập hợp các câu lệnh được giảm (có thể), ở dạng chính xác mà bạn đã nhận được chúng. Một lần nữa, danh sách có thể được định dạng dưới dạng một chuỗi các chuỗi hoặc một chuỗi phân tách dòng mới hoặc phân tách bằng dấu cách.
Quy tắc
- Bạn nên luôn luôn loại bỏ số lượng báo cáo tối thiểu. Nếu có nhiều giải pháp có thể, hãy xuất một trong số chúng.
- Bạn có thể giả sử rằng đầu vào luôn chứa ít nhất 1 câu lệnh và không có câu lệnh nào được lặp lại trong đầu vào.
- Bạn không thể cho rằng đầu ra luôn chứa một câu lệnh. (xem ví dụ)
- Sử dụng sơ hở tiêu chuẩn mâu thuẫn với câu trả lời của bạn là hợp lệ và một trong số chúng phải được loại bỏ.
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng.
Ví dụ
Đầu vào:
A^(-A)
Đầu ra:
(nothing)
Đầu vào:
A^B A<->(-B) A<->B
Đầu ra:
A^B A<->B
Đầu vào:
["AvB","A^B"]
Đầu ra:
["AvB","A^B"]
(AvB)->-Bnên là (AvB)->(-B))
A<->(Q^C))v((-B)vHbị trộn lẫn.