पृष्ठभूमि
फ्रांस में, और संभवतः यूरोपीय संघ के बाकी हिस्सों में, बिक्री के लिए उपलब्ध किसी भी भोजन को अपने पैकेजिंग पर तैयार करने वाले अवयवों को वजन प्रतिशत घटते क्रम में सूचीबद्ध करना होगा । हालाँकि, सटीक प्रतिशत को इंगित नहीं करना है, जब तक कि घटक पाठ या हाइलाइटिंग कवर पर प्रकाश डाला गया हो।
उदाहरण के लिए, मेरी तुलसी टमाटर की चटनी, इसकी पैकेजिंग पर केवल कुछ बड़े लाल टमाटर और सुंदर तुलसी के पत्तों को दिखाते हुए, निम्नलिखित संकेत दिए गए हैं:
सामग्री: टमाटर 80%, टुकड़ों में प्याज, तुलसी 1.4%, समुद्री नमक, मसला हुआ लहसुन, कच्चा गन्ना चीनी, अतिरिक्त कुंवारी जैतून का तेल, काली मिर्च।
यह दिलकश लगता है, लेकिन ... मैं कितना प्याज खाऊंगा , बिल्कुल?
चुनौती
अवरोही क्रम में वजन प्रतिशत की सूची को देखते हुए, अंततः अपूर्ण, न्यूनतम और अधिकतम वजन प्रतिशत की पूरी सूची का उत्पादन करता है जो संभवतः नुस्खा में पाया जा सकता है।
- आप एक फ़ंक्शन, या एक पूर्ण प्रोग्राम लिख सकते हैं।
- इनपुट किसी भी उचित प्रपत्र (संख्या या तार की सूची की सरणी, उदाहरण के लिए) में हो सकता है। आंशिक मानों को कम से कम एक दशमलव स्थान पर समर्थित होना चाहिए। एक लापता वजन प्रतिशत (किसी भी सुसंगत और स्पष्ट तरीके से प्रतिनिधित्व किया जा सकता है
0,'?'याnullउदाहरण के लिए,)। आप मान सकते हैं कि इनपुट हमेशा एक वैध नुस्खा से जुड़ा होगा ([70]और[∅, ∅, 50]उदाहरण के लिए, अमान्य है)। - उत्पादन किसी भी उचित प्रपत्र (न्यूनतम और अधिकतम वजन प्रतिशत, या दोहरी की एक सूची दोनों के लिए एक सरणी, उदाहरण के लिए) में हो सकता है। न्यूनतम और अधिकतम प्रतिशत किसी भी क्रम में हो सकते हैं (
[min, max]और[max, min]दोनों स्वीकार्य हैं)। सटीक वजन प्रतिशत को अन्य प्रतिशत की तुलना में अलग तरीके से संसाधित करने की आवश्यकता नहीं होती है और इसे न्यूनतम और अधिकतम मान द्वारा दर्शाया जा सकता है।
कोड-गोल्फ के लिए मानक नियम लागू होते हैं: जब आप अपना कोड टाइप कर रहे होते हैं, तो मेरा पास्ता पकवान ठंडा हो जाता है, इसलिए सबसे छोटी सबमिशन जीत जाती है।
उदाहरण
चूंकि यह समस्या पहली नज़र में देखने की तुलना में कठिन है, इसलिए यहां कुछ मामलों का चरण-दर-चरण समाधान है।
[40, ∅, ∅]
आइए क्रमशः कॉल करें xऔर yदो लापता प्रतिशत।
- क्योंकि यह 40% पर पहले घटक के बाद आता है, 40%
xसे अधिक नहीं हो सकता है।[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, ∅, ∅]: इन दोनों में विभाजित 100% के लिए 60 अधिक आवश्यक है ∅। पहले ∅को 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।