คุณจะได้รับรายชื่อของตัวเลขL = [17, 5, 9, 17, 59, 14]
ถุงประกอบและตัวเลขO = {+:7, -:3, *:5, /:1}
N = 569
งาน
เอาท์พุทสมการที่ใช้ตัวเลขทั้งหมดในL
ด้านซ้ายมือและเฉพาะตัวเลขN
ทางด้านขวามือ หากไม่สามารถทำได้ให้ส่งค่า False ตัวอย่างการแก้ปัญหา:
59*(17-5)-9*17+14 = 569
ข้อ จำกัด และการชี้แจง
- คุณไม่สามารถต่อหมายเลข (
[13,37]
อาจใช้เป็น1337
) L
เท่านั้นที่เป็นธรรมชาติและเป็นศูนย์จะปรากฏใน- ลำดับใน
L
ไม่สำคัญ L
คุณต้องใช้ตัวเลขทั้งหมดใน- เฉพาะผู้ประกอบการ
+
,-
,*
, จะปรากฏใน/
O
O
สามารถมีผู้ประกอบการมากกว่าที่คุณต้องการ แต่อย่างน้อย|L|-1
ผู้ประกอบการO
คุณอาจจะใช้ประกอบการแต่ละจำนวนครั้งใดขึ้นอยู่กับค่าใน- การดำเนินการทั้งสี่ใน
O
นั้นเป็นการดำเนินการทางคณิตศาสตร์มาตรฐาน โดยเฉพาะอย่างยิ่ง/
คือการหารปกติที่มีเศษส่วนที่แน่นอน
จุด
- คะแนนที่น้อยกว่าดีกว่า
- ตัวละครทุกรหัสของคุณให้คุณจุดหนึ่ง
คุณต้องจัดเตรียมเวอร์ชันที่ไม่ตีกอล์ฟซึ่งอ่านง่าย
พื้นหลัง
คำถามที่คล้ายกันก็ถามว่าในกองมากเกิน ฉันคิดว่ามันอาจจะเป็นความท้าทายรหัส - กอล์ฟที่น่าสนใจ
ความซับซ้อนในการคำนวณ
ดังที่ Peter Taylor กล่าวไว้ในความคิดเห็นคุณสามารถแก้ไขผลรวมย่อยด้วยสิ่งนี้:
- คุณมีตัวอย่างของผลรวมย่อย (ดังนั้นชุด S ของจำนวนเต็มและตัวเลข x)
- L: = S + [0, ... , 0] (| S | คูณ a zero), N: = x, O: = {+: | S | -1, *: | S | - 1, /: 0, -: 0}
- ตอนนี้แก้ปัญหาของฉันตัวอย่างนี้
- วิธีแก้ปัญหาสำหรับผลรวมย่อยคือจำนวนของ S ที่ไม่ได้คูณด้วยศูนย์
หากคุณพบอัลกอริทึมที่ดีกว่า O (2 ^ n) คุณจะพิสูจน์ได้ว่า P = NP เนื่องจากP vs NPเป็นปัญหาของรางวัลมิลเลนเนียมและมีมูลค่า 1,000,000 ดอลลาร์สหรัฐจึงไม่น่าเป็นไปได้ที่ใครบางคนจะหาทางแก้ปัญหานี้ ดังนั้นฉันจึงลบส่วนนี้ของการจัดอันดับ
กรณีทดสอบ
ต่อไปนี้ไม่ใช่คำตอบที่ถูกต้องเพียงอย่างเดียวโซลูชันอื่น ๆ ที่มีอยู่และได้รับอนุญาต:
- (
[17,5,9,17,59,14]
,{+:7, -:3, *:5, /:1}
,569
)
=>59 * (17-5)- 9 * 17 + 14 = 569
- (
[2,2]
,{'+':3, '-':3, '*':3, '/':3}
,1
)
=>2/2 = 1
- (
[2,3,5,7,10,0,0,0,0,0,0,0]
,{'+':20, '-':20, '*':20, '/':20}
,16
)
=>5+10-2*3+7+0+0+0+0+0+0+0 = 16
- (
[2,3,5,7,10,0,0,0,0,0,0,0]
,{'+':20, '-':20, '*':20, '/':20}
,15
)
=>5+10+0*(2+3+7)+0+0+0+0+0+0 = 15
/
≡ div
) เพียงจุดลอยตัวและความหวังแบบไม่มีข้อผิดพลาดการปัดเศษ ... ?
5+10+2*3+7*0+0...
m = |L|
อะไร ถ้าใช่คุณคาดหวังว่า runtime จะไม่ขึ้นอยู่กับขนาดของรายการนั้นอย่างไร ตัวอย่างเช่น[2,2],[+,+,...,+,/],1
. อันที่จริงแล้วเนื่องจาก n คือ O (m) คุณอาจเขียนมันทั้งหมดในรูปของ m