นี่คือ "คู่" ของจิ๊กซอว์อีกชิ้นหนึ่งแปดเหรียญสำหรับราชาที่เป็นธรรมใน Puzzling.SE
คุณสามารถอ่านปริศนาด้านบนสำหรับพื้นหลัง รายละเอียดเกี่ยวกับตัวต่อนี้มีดังนี้
มีการสร้างชุดของเหรียญ 8 ชนิดที่มีค่าแตกต่างกันกษัตริย์ต้องการให้คุณค้นหาจำนวนสูงสุด N เพื่อให้สามารถจ่ายราคาใดก็ได้ตั้งแต่ 0 ถึง N โดยมีการรวมกันไม่เกิน 8 เหรียญและไม่มีค่าใช้จ่าย
ตัวอย่างเช่น (นำมาจากคำตอบของ Glorfindel) หากได้รับชุดเหรียญมูลค่า 1, 2, 5, 13, 34, 89, 233, 610 โปรแกรมของคุณควรส่งออก 1596 เพราะทุกตัวเลขระหว่าง 0 ถึง 1596 (รวม) สามารถแสดงผลได้โดยไม่รวม มากกว่า 8 หมายเลขจากรายการที่ระบุ (อาจทำซ้ำหมายเลข) ในขณะที่ 1597 ไม่สามารถแสดงด้วยวิธีดังกล่าว
ในทางคณิตศาสตร์ถ้าใส่เป็นชุด S ซึ่งประกอบด้วย 8 จำนวนเต็มบวกที่ต้องการตอบสนองการส่งออกยังไม่มีที่ใดจำนวนnระหว่าง 0 และ N มีอยู่ x1, x2, x3, ... , x8 ดังกล่าวว่า
เป้าหมายของคุณคือการเขียนโปรแกรมฟังก์ชั่นหรือตัวอย่างที่มี 8 ตัวเลขเป็นอินพุตและส่งออก N สูงสุดตามที่อธิบายไว้ข้างต้น
กฎ:
- อนุญาตให้ใช้ I / O ที่ยืดหยุ่นได้ดังนั้นโปรแกรมของคุณสามารถรับอินพุตในรูปแบบใดก็ได้ที่เหมาะสมที่สุด คุณอาจสมมติว่าหมายเลขอินพุตถูกจัดเรียงตามวิธีที่เหมาะสมที่สุดสำหรับโปรแกรมของคุณ
- โปรดระบุในคำตอบของคุณหากโปรแกรมของคุณขึ้นอยู่กับคำสั่งซื้อ
- อินพุตคือชุดของจำนวนเต็มบวกจำนวน 8 ค่าที่ต่างกัน (ไม่มีศูนย์) เอาท์พุทเป็นจำนวนเต็มหนึ่งที่ไม่เป็นลบ
- ในกรณีที่ไม่มีหมายเลข 1 ในชุดอินพุตโปรแกรมของคุณควรส่งออก 0 เพราะหมายเลขใด ๆ จาก 0 ถึง 0 ตรงตามข้อกำหนด
- ในกรณีของการป้อนข้อมูลที่ไม่ถูกต้อง (ชุดมีจำนวนศูนย์ลบหรือซ้ำกัน) โปรแกรมของคุณสามารถทำอะไรได้
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- โปรแกรมของคุณควรทำงานภายในไม่กี่นาทีบนคอมพิวเตอร์ที่ทันสมัย
กรณีทดสอบ (ส่วนใหญ่นำมาจากคำตอบภายใต้คำถามที่เชื่อมโยงกับ Puzzling):
[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356
นี่คือรหัสกอล์ฟดังนั้นโปรแกรมหรือตัวอย่างที่สั้นที่สุดในแต่ละภาษาจะชนะ!