คุณได้รับชุดของคำสั่งตรรกะ ความท้าทายของคุณคือการลบสิ่งที่ขัดแย้งกับคนอื่น แต่ในทางที่ดีที่สุด (เช่นลบข้อความจำนวนน้อยที่สุด)
ท้าทาย
คุณจะเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เป็นรายการของข้อความสั่งให้ลบจำนวนข้อความที่น้อยที่สุดเพื่อให้มีวิธีแก้ปัญหาและให้ผลลัพธ์ที่เหลือ
ตรรกะ
คำสั่งประกอบด้วยตัวแปร A-Zและตัวดำเนินการระหว่างกัน
มีโอเปอเรเตอร์ 5 รายการ: -(ไม่ใช่), v(หรือ), ^(และ), ->(ถ้า) และ<->(iff)
ตารางความจริง:
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
ผู้ประกอบการเหล่านี้สามารถรวมเข้ากับวงเล็บ():
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
ระบบลอจิกประกอบด้วย 1 หรือมากกว่างบ
วิธีการแก้ปัญหาให้กับระบบตรรกะเป็นรัฐที่ทั้งหมดเป็นงบเป็นจริงพร้อมกัน
ตัวอย่างของระบบลอจิก:
AvB
-(A<->B)
(AvB)->(-B)
เพียงวิธีการแก้ปัญหาA = 1, B = 0คือ
A^B
-(B<->A)
อันนี้ไม่มีทางออก ; โดยไม่มีการรวมกันของAและBทั้งสองคำเป็นจริง
อินพุต
คุณจะได้รับชุดคำสั่งเป็นอินพุต สิ่งนี้สามารถนำมาใช้ผ่าน STDIN หรือฟังก์ชั่นการโต้แย้งจัดรูปแบบเป็นอาร์เรย์ (ในรูปแบบที่สะดวก) หรือสตริงที่คั่นด้วยขึ้นบรรทัดใหม่หรือคั่นด้วยช่องว่าง
งบจะอยู่ในรูปแบบต่อไปนี้ (ในเกือบ - 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" / "^" / "->" / "<->"
คำสั่งตัวอย่าง:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
เอาท์พุต
คุณต้องส่งคืนชุดคำสั่งที่ลดลง (อาจ) ในรูปแบบที่แน่นอนที่คุณได้รับ อีกครั้งรายการที่สามารถจัดรูปแบบเป็นอาร์เรย์ของสตริงหรือสตริงที่คั่นด้วยขึ้นบรรทัดใหม่หรือคั่นด้วยช่องว่าง
กฎระเบียบ
- คุณควรลบจำนวนงบน้อยที่สุดเสมอ หากมีวิธีแก้ปัญหาที่เป็นไปได้หลายอย่างให้ส่งหนึ่งในนั้น
- คุณอาจสมมติว่าอินพุตมีคำสั่งอย่างน้อย 1 คำสั่งเสมอและจะไม่มีคำสั่งใด ๆ ซ้ำในอินพุต
- คุณอาจไม่คิดว่าเอาท์พุทมักจะมีคำสั่ง (ดูตัวอย่าง)
- การใช้ช่องโหว่มาตรฐานขัดแย้งกับคำตอบของคุณว่าถูกต้องและหนึ่งในนั้นต้องถูกลบออก
- นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
ตัวอย่าง
การป้อนข้อมูล:
A^(-A)
เอาท์พุท:
(nothing)
การป้อนข้อมูล:
A^B A<->(-B) A<->B
เอาท์พุท:
A^B A<->B
การป้อนข้อมูล:
["AvB","A^B"]
เอาท์พุท:
["AvB","A^B"]
(AvB)->-Bควร(AvB)->(-B))
A<->(Q^C))v((-B)vHยังมี mish-mashed