পটভূমি
ফ্রান্সে এবং সম্ভবত ইউরোপীয় ইউনিয়নের বাকী অংশে, বিক্রয়ের জন্য উপলভ্য যে কোনও খাবারের ওজন শতকরা ক্রমহ্রাসমান ক্রমে , তার প্যাকেজিংয়ে রচনা করা উপাদানগুলি অবশ্যই তালিকাভুক্ত করবে । যাইহোক, উপাদানটি প্রচ্ছদে পাঠ্য বা কোনও চিত্র দ্বারা হাইলাইট না করা হলে সঠিক শতাংশটি নির্দেশ করতে হবে না ।
উদাহরণস্বরূপ, আমার তুলসী টমেটো সস, এর প্যাকেজিংয়ে কেবলমাত্র কয়েকটি বড় লাল টমেটো এবং সুন্দর তুলসী পাতা দেখায়, নিম্নলিখিত সংকেত রয়েছে:
উপকরণ: টমেটো ৮০%, টুকরো টুকরো পেঁয়াজ, তুলসী ১.৪%, সামুদ্রিক লবণ, কাঁচা রসুন, কাঁচা বেত চিনি, অতিরিক্ত কুমারী জলপাই তেল, কালো মরিচ।
এটি অদ্ভুত লাগছে, তবে ... আমি ঠিক কতটা পেঁয়াজ খাব ?
চ্যালেঞ্জ
অবতরণ ক্রমে ওজন শতাংশের একটি তালিকা দেওয়া হয়েছে, শেষ পর্যন্ত অসম্পূর্ণ, সম্ভবত রান্নাটিতে পাওয়া যাবে এমন সর্বনিম্ন এবং সর্বাধিক ওজন শতাংশের একটি সম্পূর্ণ তালিকা আউটপুট করুন ।
- আপনি হয় একটি ফাংশন, বা একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন।
- ইনপুট কোনো যুক্তিসংগত ফর্ম (সংখ্যা বা স্ট্রিং তালিকার অ্যারে, উদাহরণস্বরূপ) এ হতে পারে না। ভগ্নাংশের মানগুলি কমপক্ষে একটি দশমিক স্থানে সমর্থিত হওয়া উচিত। একটি অনুপস্থিত ওজন শতাংশ (যে কোন সামঞ্জস্যপূর্ণ এবং দ্ব্যর্থহীন ভাবে প্রতিনিধিত্ব করা যাবে
0
,'?'
বাnull
উদাহরণস্বরূপ,)। আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা একটি বৈধ রেসিপিটির সাথে সম্পর্কিত হবে ([70]
এবং[∅, ∅, 50]
উদাহরণস্বরূপ অবৈধ)। - আউটপুট কোনো যুক্তিসংগত ফর্ম (ন্যূনতম এবং সর্বাধিক ওজন শতকরা, অথবা doublets একটি একক তালিকা উভয়ের জন্য এক অ্যারে, উদাহরণস্বরূপ) এ হতে পারে না। সর্বনিম্ন এবং সর্বাধিক শতাংশ যে কোনও ক্রমে হতে পারে (
[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
।