งานคือการเขียนรหัสที่สามารถหาสูตรตรรกะขนาดเล็กสำหรับจำนวนบิต
ความท้าทายโดยรวมคือการให้โค้ดของคุณค้นหาสูตรเชิงตรรกะที่มีความเป็นไปได้น้อยที่สุดเพื่อตรวจสอบว่าผลรวมของตัวแปร y ไบนารี 0/1 เท่ากับค่า x หรือไม่ ให้เราเรียกตัวแปร x1, x2, x3, x4 เป็นต้นนิพจน์ของคุณควรเท่ากับผลรวม นั่นคือสูตรตรรกะควรเป็นจริงถ้าหากผลรวมเท่ากับ x
นี่เป็นวิธีที่ไร้เดียงสาที่จะเริ่มต้นด้วย พูดว่า y = 15 และ x = 5. เลือกวิธีทั้งหมด 3003 วิธีในการเลือกตัวแปร 5 ตัวและแต่ละอันสร้างประโยคใหม่ด้วย AND และของตัวแปรเหล่านั้นและ AND ของตัวแปรที่เหลือ คุณจบด้วย 3003 ส่วนของความยาวแต่ละข้อ 15 สำหรับค่าใช้จ่ายทั้งหมด 45054
คำตอบของคุณควรเป็นนิพจน์เชิงตรรกะของการเรียงลำดับที่สามารถวางลงในไพ ธ อนพูดดังนั้นฉันสามารถทดสอบได้ หากคนสองคนมีขนาดเท่ากันรหัสที่ทำงานเร็วที่สุดจะเป็นผู้ชนะ
คุณได้รับอนุญาตให้แนะนำตัวแปรใหม่ในโซลูชันของคุณ ดังนั้นในกรณีนี้สูตรตรรกะของคุณประกอบด้วยตัวแปร y แบบไบนารี, x และตัวแปรใหม่บางอย่าง สูตรทั้งหมดจะเป็นที่น่าพอใจถ้าหากผลรวมของตัวแปร y เท่ากับ x
ในการเริ่มต้นออกกำลังกายบางคนอาจต้องการเริ่มต้นด้วยตัวแปร y = 5 ที่เพิ่มเข้าไปใน x = 2 วิธีการที่ไร้เดียงสานั้นจะให้ค่าใช้จ่าย 50
รหัสควรใช้ค่าสองค่า y และ x เป็นอินพุตและเอาต์พุตสูตรและขนาดของมันเป็นเอาต์พุต ต้นทุนของโซลูชันเป็นเพียงการนับจำนวนตัวแปรในผลลัพธ์ ดังนั้น(a or b) and (!a or c)
นับเป็น 4. ผู้ประกอบการที่ได้รับอนุญาตเท่านั้นand
, และor
not
อัปเดตปรากฎว่ามีวิธีที่ฉลาดในการแก้ปัญหานี้เมื่อ x = 1 อย่างน้อยก็ในทางทฤษฎี
z[0] = y[0] and y[1]
คุณต้องการให้สิ่งนี้ระบุ?
z[0]
ตัวแทนเป็นตัวแปรy[0] or y[1]
ฉันก็แค่ต้องแนะนำประโยคที่ดูเหมือน(y[0] or y[1]) or not z[0]
(หรือข้อความใด ๆ ที่เทียบเท่าโดยใช้ตัวดำเนินการ 3 ตัวที่อนุญาต)