ชามกองสูง
เป้าหมายของปริศนานี้คือการคำนวณความสูงของชามที่ซ้อนกัน
ชามถูกกำหนดให้เป็นอุปกรณ์ที่มีความสมมาตรเรดิอเรย์โดยไม่มีความหนา รูปร่างเงาของมันคือพหุนามแม้ สแต็กถูกอธิบายโดยรายการรัศมีซึ่งแต่ละอันเกี่ยวข้องกับพหุนามแบบคู่ให้เป็นอินพุตเป็นรายการของสัมประสิทธิ์ (เช่นรายการ3.1 4.2
แทนพหุนาม )
พหุนามอาจมีระดับโดยพลการ สำหรับความเรียบง่ายความสูงของกองถูกกำหนดให้เป็นระดับความสูงของศูนย์กลางของชามบนสุด (ดูพล็อตของตัวอย่างที่ 3 สำหรับภาพประกอบ)
กรณีทดสอบอยู่ในรูปแบบradius:coeff1 coeff2 ...
: แต่ละบรรทัดเริ่มต้นด้วยเลขทศนิยมแทนรัศมีของชามตามด้วยเครื่องหมายโคลอนและรายการที่คั่นด้วยช่องว่างที่มีค่าสัมประสิทธิ์สำหรับกำลังคู่เริ่มต้นด้วยพลังงาน 2 (โดยนัยคงที่ส่วนศูนย์) . ยกตัวอย่างเช่นเส้น2.3:3.1 4.2
อธิบายชามรัศมีและรูปร่างพหุนาม2.3
3.1 * x^2 + 4.2 * x^4
ตัวอย่างที่ 1
42:3.141
อธิบายถึงกองที่มีความสูงเป็นศูนย์เนื่องจากชามเดี่ยวไม่มีความสูง
ตัวอย่างที่ 2
1:1 2
1.2:5
1:3
อธิบายความสูง2.0
(ดูรูปประกอบ)
ตัวอย่างที่ 3
1:1.0
0.6:0.2
0.6:0.4
1.4:0.2
0.4:0 10
อธิบายความสูง 0.8 (ดูที่ลูกศรสีเขียวในพล็อต)
นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดชนะ
แก้ไข:
การประยุกต์ใช้การอ้างอิงอาศัยไลบรารีเพื่อคำนวณรากของพหุนาม คุณสามารถทำเช่นนั้นได้ แต่ไม่จำเป็นต้องทำ เนื่องจากการดำเนินการอ้างอิงเป็นเพียงการประมาณเชิงตัวเลข (ค่อนข้างดี) ฉันจะยอมรับรหัสใด ๆ ที่สร้างผลลัพธ์ที่ถูกต้องภายในความคลาดเคลื่อนจุดลอยตัวทั่วไป
ε
อีกตัวแปรหนึ่งของปริศนานี้คือการลดความสูงโดยการเรียงลำดับโบวล์ ฉันไม่แน่ใจว่ามีวิธีแก้ปัญหาที่รวดเร็วหรือไม่ หากใครมีความคิดที่ดีกว่า (หรือสามารถพิสูจน์ความสมบูรณ์แบบของ NP) ได้โปรดบอกฉัน!
is_maximum
return evaluate(differentiate(shape_0), root) > 0.0
ขณะนี้มันประเมินการใช้รูทdd
(อนุพันธ์ของความแตกต่างระหว่างรูปร่าง) ซึ่งควรส่งคืน 0 เสมอ (สำหรับรูท) เนื่องจากข้อผิดพลาดของคะแนนลอยบางครั้งผลลัพธ์จึงเป็นค่าบวกใกล้กับ 0 ซึ่งเป็นสาเหตุที่รหัสส่งออกผลลัพธ์ที่ถูกต้องหรือแม่นยำกว่าในบางครั้ง ตรวจสอบอินพุต1:0.2, 1:0.1 0.2
ที่ควรเอาต์พุต0.0125
0.801
ความสูงสุดท้ายที่ควรจะเป็น 0.1
สุดท้ายทั้งสองชามสัมผัสที่รัศมี