พื้นหลัง
ในประเทศฝรั่งเศสและอาจจะอยู่ในส่วนที่เหลือของสหภาพยุโรปอาหารใดมีไว้เพื่อขายต้องแสดงรายการส่วนผสมที่เขียนไว้บนบรรจุภัณฑ์ของตนในน้ำหนักร้อยละหลั่น อย่างไรก็ตามไม่จำเป็นต้องระบุเปอร์เซ็นต์ที่แน่นอนยกเว้นว่ามีการเน้นส่วนประกอบโดยข้อความหรือรูปภาพบนหน้าปก
ตัวอย่างเช่นซอสมะเขือเทศใบโหระพาของฉันที่แสดงเพียงมะเขือเทศสีแดงขนาดใหญ่และใบโหระพาที่สวยงามบนบรรจุภัณฑ์มีข้อบ่งชี้ดังนี้:
ส่วนผสม:มะเขือเทศ 80%, หัวหอมเป็นชิ้น, ใบโหระพา 1.4%, เกลือทะเล, กระเทียมบด, น้ำตาลทรายดิบ, น้ำมันมะกอกบริสุทธิ์พิเศษ, พริกไทยดำ
ฟังดูน่าอร่อย แต่ ... ฉันจะกินหัวหอมมากขนาดไหนกันแน่?
ท้าทาย
เมื่อกำหนดรายการเปอร์เซ็นต์น้ำหนักตามลำดับจากมากไปหาน้อยในที่สุดก็ไม่สมบูรณ์ส่งออกรายการที่สมบูรณ์ของเปอร์เซ็นต์น้ำหนักขั้นต่ำและสูงสุดที่สามารถพบได้ในสูตร
- คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
- การป้อนข้อมูลจะมีรูปแบบที่เหมาะสมใด ๆ (อาร์เรย์ของตัวเลขหรือรายการของสตริงเป็นต้น) ค่าเศษส่วนควรได้รับการสนับสนุนอย่างน้อยหนึ่งตำแหน่งทศนิยม ร้อยละของน้ำหนักที่หายไปสามารถแสดงในลักษณะที่สอดคล้องและโปร่งใสใด ๆ (
0
,'?'
หรือnull
เป็นต้น) คุณสามารถสันนิษฐานได้ว่าการป้อนข้อมูลจะเชื่อมโยงกับสูตรที่ถูกต้องเสมอ ([70]
และ[∅, ∅, 50]
ไม่ถูกต้องเป็นต้น) - การส่งออกจะมีรูปแบบที่เหมาะสมใด ๆ (หนึ่งอาร์เรย์สำหรับทั้งสองน้อยที่สุดและมากสุดร้อยละน้ำหนักหรือรายการเดียวของ doublets เป็นต้น) เปอร์เซ็นต์ขั้นต่ำและสูงสุดสามารถอยู่ในลำดับใดก็ได้ (
[min, max]
และ[max, min]
ยอมรับได้ทั้งคู่) เปอร์เซ็นต์น้ำหนักที่แน่นอนไม่จำเป็นต้องประมวลผลแตกต่างจากเปอร์เซ็นต์อื่น ๆ และอาจแสดงด้วยค่าน้อยที่สุดและสูงสุดเท่ากัน
ใช้กฎมาตรฐานสำหรับการเขียนโค้ดกอล์ฟ : ขณะที่คุณพิมพ์รหัสจานพาสต้าของฉันเย็นลงดังนั้นการส่งที่สั้นที่สุดจะเป็นผู้ชนะ
ตัวอย่าง
เนื่องจากปัญหานี้ยากเกินกว่าที่จะเห็นได้อย่างรวดเร็วในครั้งแรกนี่เป็นวิธีแก้ปัญหาแบบทีละขั้นตอนของบางกรณี
[40, ∅, ∅]
ลองโทรตามลำดับx
และy
เปอร์เซ็นต์ที่หายไปสองอัน
- เพราะมันมาจากส่วนผสมแรกที่ 40%
x
จึงไม่สามารถสูงกว่า 40% ได้[40, [?, 40], [?, ?]]
- ผลรวมของเปอร์เซ็นต์ที่ขาดหายไปสองรายการนั้นจะเท่ากับ 60% เสมอ ดังนั้น:
- หาก
x
ใช้ค่าสูงสุดมันก็y
จะใช้ค่าน้อยที่สุดซึ่งเป็น 60% - 40% = 20%[40, [?, 40], [20, ?]]
- หาก
x
ใช้ค่าน้อยที่สุดy
จะรับค่าสูงสุด แต่x
ต้องไม่ต่ำกว่าy
ดังนั้นในกรณีนี้x
=y
= 60% / 2 = 30%[40, [30, 40], [20, 30]]
- หาก
[70, ∅, ∅, 5, ∅]
ขอเรียกตามลำดับx
, y
และz
สามเปอร์เซ็นต์ที่ขาดหายไป
- เปอร์เซ็นต์น้อยที่สุดและสูงสุดสำหรับ
z
จำเป็นต้องอยู่ระหว่าง 0% ถึง 5% สมมติว่าz
= 0% สักครู่ ผลรวมของเปอร์เซ็นต์ที่ขาดหายไปสองรายการนั้นเป็น 25% เสมอ ดังนั้น:[70, [?, ?], [?, ?], 5, [0, 5]]
- หาก
y
ใช้ค่าต่ำสุด 5% ก็x
จะใช้ค่าสูงสุดซึ่งก็คือ 25% - 5% = 20%[70, [?, 20], [5, ?], 5, [0, 5]]
- หาก
y
ใช้ค่าสูงสุดx
มันจะใช้ค่าน้อยที่สุด แต่x
ต้องไม่ต่ำกว่าy
ดังนั้นในกรณีนี้x
=y
= 25% / 2 = 12.5%[70, [12.5, 20], [5, 12.5], 5, [0, 5]]
- หาก
- เรามาตรวจสอบว่าทุกอย่างเรียบร้อยดีถ้าเราสมมติว่านั่น
z
= 5% ผลรวมของเปอร์เซ็นต์ที่ขาดหายไปสองรายการนั้นมีค่า 20% เสมอ ดังนั้น:- หาก
y
ใช้ค่าต่ำสุด 5% ก็x
จะใช้ค่าสูงสุดซึ่งเป็น 20% - 5% = 15% กรณีนี้รวมอยู่ในช่วงการคำนวณก่อนหน้านี้แล้ว - หาก
y
ใช้ค่าสูงสุดx
มันจะใช้ค่าน้อยที่สุด แต่x
ต้องไม่ต่ำกว่าy
ดังนั้นในกรณีนี้x
=y
= 20% / 2 = 10% กรณีนี้จะรวมอยู่แล้วในช่วงก่อนหน้านี้สำหรับการคำนวณแต่ไม่ได้สำหรับy
x
[70, [10, 20], [5, 12.5], 5, [0, 5]]
- หาก
กรณีทดสอบ
Input: [∅]
Output: [100]
Input: [70, 30]
Output: [70, 30]
Input: [70, ∅, ∅]
Output: [70, [15, 30], [0, 15]]
Input: [40, ∅, ∅]
Output: [40, [30, 40], [20, 30]]
Input: [∅, ∅, 10]
Output: [[45, 80], [10, 45], 10]
Input: [70, ∅, ∅, ∅]
Output: [70, [10, 30], [0, 15], [0, 10]]
Input: [70, ∅, ∅, 5, ∅]
Output: [70, [10, 20], [5, 12.5], 5, [0, 5]]
Input: [30, ∅, ∅, ∅, 10, ∅, ∅, 5, ∅, ∅]
Output: [30, [10, 25], [10, 17.5], [10, 15], 10, [5, 10], [5, 10], 5, [0, 5], [0, 5]]
[40, ∅, ∅]
และ[70, ∅, ∅, 5, ∅]
ทำให้สิ่งต่าง ๆ ชัดเจนยิ่งขึ้น ความท้าทายควรมีความชัดเจนโดยไม่ดูกรณีทดสอบซึ่งไม่ใช่กรณีในขณะนี้ ถ้าฉันเข้าใจถูกต้องสำหรับ[40, ∅, ∅]
: 60 จำเป็นสำหรับอีก 100% หารด้วยสองคน∅
นี้ รายการแรก∅
จะต้องมี 30 หรือสูงกว่า (ไม่เช่นนั้นรายการที่สอง∅
จะอยู่เหนือซึ่งไม่น่าจะเป็นไปได้เมื่ออยู่ในลำดับ) นอกจากนี้ยังไม่สามารถจะอยู่เหนือ40
ดังนั้นคนแรกที่∅
กลายเป็นและที่สองกลายเป็น[30,40]
[(100-40-40=)20, (100-40-30=)30]
[min,max]
/ [max,min]
หรือผสมกัน?
[min,max]
และ[max,min]
ยอมรับได้ในแนวเขต แต่เนื่องจากมันไม่สามารถนำไปสู่ผลลัพธ์ที่คลุมเครือได้ฉันจึงบอกว่าไม่เป็นไร
[70, 12, 11, 5, 2]
ไม่ทำงานกับตัวอย่างที่สองของคุณ ถ้ามันไม่ทำงานต่ำสุดสำหรับการจะน้อยกว่าx
12.5