แสดงตัวเลข
ย้อนกลับไปในยุค 60 ฝรั่งเศสได้ประดิษฐ์รายการทีวีเกม "Des Chiffres et des Lettres" (ตัวเลขและตัวอักษร) เป้าหมายของส่วน Digits ของรายการนั้นใกล้เข้ามามากที่สุดเท่าที่จะทำได้กับตัวเลขเป้าหมาย 3 หลักโดยใช้ตัวเลขที่เลือกแบบกึ่งสุ่ม ผู้เข้าแข่งขันสามารถใช้โอเปอเรเตอร์ต่อไปนี้:
- การต่อข้อมูล (1 และ 2 คือ 12)
- การเพิ่ม (1 + 2 คือ 3)
- การลบ (5 - 3 = 2)
- ส่วน (8/2 = 4); อนุญาตให้แบ่งได้ถ้าผลลัพธ์นั้นเป็นจำนวนธรรมชาติ
- การคูณ (2 * 3 = 6)
- วงเล็บเพื่อแทนที่การมาก่อนของการดำเนินการปกติ: 2 * (3 + 4) = 14
แต่ละหมายเลขที่ระบุสามารถใช้ได้เพียงครั้งเดียวหรือไม่ใช้เลย
ตัวอย่างเช่นหมายเลขเป้าหมาย 728 สามารถจับคู่กับตัวเลขได้อย่างแม่นยำ: 6, 10, 25, 75, 5 และ 50 ด้วยนิพจน์ต่อไปนี้:
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
ในการท้าทายรหัสนี้คุณจะได้รับงานเพื่อค้นหานิพจน์ใกล้เคียงกับจำนวนเป้าหมายที่แน่นอนที่สุด เนื่องจากเราอาศัยอยู่ในศตวรรษที่ 21 เราจะแนะนำจำนวนเป้าหมายที่มากขึ้นและจำนวนที่มากขึ้นในการทำงานกับมากกว่าในยุค 60
กฎระเบียบ
- ผู้ประกอบการที่ได้รับอนุญาต: การต่อข้อมูล, +, -, /, *, (และ)
- ตัวดำเนินการเรียงต่อกันไม่มีสัญลักษณ์ เพียงต่อตัวเลขเข้าด้วยกัน
- ไม่มี "การต่อข้อมูลผกผัน" 69 คือ 69 และไม่สามารถแยกได้ใน 6 และ 9
- หมายเลขเป้าหมายเป็นจำนวนเต็มบวกและมีสูงสุด 18 หลัก
- มีอย่างน้อยสองตัวเลขที่จะทำงานกับและสูงสุด 99 หมายเลข ตัวเลขเหล่านี้เป็นจำนวนเต็มบวกด้วยจำนวนสูงสุด 18 หลัก
- เป็นไปได้ (ที่จริงแล้วค่อนข้างจะเป็นไปได้) ที่หมายเลขเป้าหมายไม่สามารถแสดงในรูปของตัวเลขและตัวดำเนินการ เป้าหมายคือการเข้าใกล้ให้มากที่สุด
- โปรแกรมควรเสร็จในเวลาที่เหมาะสม (ไม่กี่นาทีบนเดสก์ท็อปพีซีที่ทันสมัย)
- ช่องโหว่มาตรฐานใช้
- โปรแกรมของคุณอาจไม่ได้รับการปรับให้เหมาะสมที่สุดสำหรับชุดทดสอบในส่วน "การให้คะแนน" ของปริศนานี้ ฉันขอสงวนสิทธิ์ในการเปลี่ยนแปลงชุดทดสอบหากฉันสงสัยว่ามีใครละเมิดกฎนี้
- นี่ไม่ใช่ codegolf
อินพุต
อินพุตประกอบด้วยอาร์เรย์ของตัวเลขที่สามารถจัดรูปแบบได้อย่างสะดวก หมายเลขแรกคือหมายเลขเป้าหมาย ส่วนที่เหลือเป็นตัวเลขที่คุณควรทำงานด้วยเพื่อสร้างหมายเลขเป้าหมาย
เอาท์พุต
ข้อกำหนดสำหรับการส่งออกคือ:
- ควรเป็นสตริงที่ประกอบด้วย:
- ชุดย่อยของหมายเลขอินพุตใด ๆ (ยกเว้นหมายเลขเป้าหมาย)
- จำนวนผู้ประกอบการใด ๆ
- ฉันชอบผลลัพธ์ที่จะเป็นบรรทัดเดียวโดยไม่มีช่องว่าง แต่ถ้าคุณต้องการคุณอาจเพิ่มช่องว่างและบรรทัดใหม่ตามที่เห็นสมควร พวกเขาจะถูกละเว้นในโปรแกรมควบคุม
- ผลลัพธ์ควรเป็นนิพจน์ทางคณิตศาสตร์ที่ถูกต้อง
ตัวอย่าง
เพื่อความสะดวกในการอ่านตัวอย่างเหล่านี้ทั้งหมดมีวิธีแก้ไขปัญหาที่แน่นอน
อินพุต: 1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
เอาต์พุต:111*111*(111+11+1)
อินพุต: 153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
เอาต์พุต:123*(456+789)
อินพุต: 8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
เอาต์พุต:9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
อินพุต: 207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
เอาต์พุต:1+2*(3+4)*(5+6)*(7+8)*90
อินพุต: 34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
เอาต์พุต: 1+2*(3+4*(5+6*(7+8*90)))
แต่เอาต์พุตที่ถูกต้องคือ:34957-6-8
เกณฑ์การให้คะแนน
คะแนนการลงโทษของโปรแกรมคือผลรวมของความผิดพลาดสัมพัทธ์ของนิพจน์สำหรับชุดทดสอบด้านล่าง
ตัวอย่างเช่นหากค่าเป้าหมายคือ 125 และการแสดงออกของคุณให้ 120 คะแนนการลงโทษของคุณคือ abs (1 - 120/125) = 0,04
โปรแกรมกับต่ำสุดคะแนน (ความผิดพลาดทั้งหมดต่ำสุด) ผู้ชนะ หากสองโปรแกรมเสร็จสิ้นอย่างเท่าเทียมกันการส่งครั้งแรกจะชนะ
ในที่สุดชุดทดสอบ (8 ราย):
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
ปริศนาที่คล้ายกันก่อนหน้า
หลังจากที่สร้างปริศนานี้และโพสต์ไว้ใน sandbox ที่ผมสังเกตเห็นบางสิ่งบางอย่างที่คล้ายกันในสองปริศนาก่อนหน้า ( แต่ไม่เหมือนกัน!): ที่นี่ (ไม่มีการแก้ปัญหา) และที่นี่ จิ๊กซอว์นี้ค่อนข้างแตกต่างกันเพราะมันแนะนำผู้ดำเนินการเรียงต่อกันฉันไม่ได้ค้นหาและจับคู่ที่ตรงกันและฉันชอบที่จะเห็นกลยุทธ์สำหรับการเข้าใกล้ทางออกโดยไม่ต้องใช้กำลังดุร้าย ฉันคิดว่ามันท้าทาย