ट्रैक
/
Python
Python
/
अभ्यास
/
दो बाल्टियाँ
दो बाल्टियाँ

दो बाल्टियाँ

मध्यम

निर्देश

अलग-अलग आकार की दो बाल्टियाँ दी गई हैं, और यह भी बताया गया है कि पहले कौन-सी बाल्टी भरनी है। बाल्टियों के बीच तरल को समझदारी से इधर-उधर डालते हुए एक ठीक-ठीक संख्या में लीटर नापने के लिए कितनी क्रियाएँ आवश्यक हैं, यह पता कीजिए।

आपके हल को इन नियमों का पालन करना होगा:

  • एक बार में आप केवल एक ही क्रिया कर सकते हैं।
  • केवल 3 क्रियाएँ ही संभव हैं:
    1. एक बाल्टी को दूसरी बाल्टी में तब तक डालना जब तक कि: a) पहली बाल्टी खाली न हो जाए b) दूसरी बाल्टी भर न जाए
    2. एक बाल्टी को खाली करना और दूसरी बाल्टी में कोई बदलाव न करना।
    3. एक बाल्टी को भरना और दूसरी बाल्टी में कोई बदलाव न करना।
  • किसी क्रिया के बाद आप ऐसी स्थिति में नहीं पहुँच सकते जहाँ शुरुआती बाल्टी खाली हो और दूसरी बाल्टी भरी हुई हो।

आपका प्रोग्राम इनपुट के रूप में ये चीज़ें लेगा:

  • पहली बाल्टी का आकार
  • दूसरी बाल्टी का आकार
  • जितने लीटर नापने हैं वह संख्या
  • पहले कौन-सी बाल्टी भरनी है, पहली या दूसरी

आपके प्रोग्राम को यह पता लगाना होगा:

  • जितने लीटर नापने हैं, उन्हें नापने के लिए कुल कितनी क्रियाएँ करनी होंगी, जिनमें शुरुआती बाल्टी को पहली बार भरना भी शामिल है
  • अंत में उतने लीटर किस बाल्टी में होंगे, पहली बाल्टी या दूसरी
  • दूसरी बाल्टी में कितने लीटर बचे रहेंगे

ध्यान दें: जब भी किसी एक या दोनों बाल्टियों में कोई बदलाव किया जाता है, वह एक (1) क्रिया माना जाता है।

उदाहरण: पहली बाल्टी में 7 लीटर तक समा सकते हैं, और दूसरी बाल्टी में 11 लीटर तक। मान लीजिए कि किसी दिए गए चरण में पहली बाल्टी में 7 लीटर हैं और दूसरी बाल्टी में 8 लीटर (7,8)। अगर आप पहली बाल्टी खाली कर दें और दूसरी बाल्टी में कोई बदलाव न करें, जिससे आपके पास क्रमशः 0 लीटर और 8 लीटर रह जाते हैं (0,8), तो यह एक क्रिया मानी जाएगी। इसके बजाय, अगर आप पहली बाल्टी से दूसरी बाल्टी में तब तक डालें जब तक दूसरी बाल्टी भर न जाए, जिससे पहली बाल्टी में 4 लीटर और दूसरी बाल्टी में 11 लीटर हो जाएँ (4,11), तो वह भी केवल एक ही क्रिया मानी जाएगी।

एक और उदाहरण: पहली बाल्टी में 3 लीटर समा सकते हैं, और दूसरी बाल्टी में 5 लीटर तक। आपसे कहा गया है कि शुरुआत पहली बाल्टी से करनी है। इसलिए आपकी पहली क्रिया पहली बाल्टी भरना है। दूसरी क्रिया के लिए आप पहली बाल्टी खाली करना चुनते हैं। तीसरी क्रिया में आप दूसरी बाल्टी नहीं भर सकते, क्योंकि इससे तीसरे नियम का उल्लंघन होता है। किसी भी क्रिया के बाद आप ऐसी स्थिति में नहीं पहुँच सकते जहाँ शुरुआती बाल्टी खाली हो और दूसरी बाल्टी भरी हुई हो।

लिंडसे लेविन ने Fullstack Academy में <3 के साथ लिखा।

एक्सेप्शन संदेश

कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश देना चाहिए, जिससे पता चले कि एरर कहाँ से आ रही है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में काफी मदद मिलती है। जिन जगहों पर आपको पता हो कि एरर एक खास टाइप की ही होगी, वहाँ आप पहले से मौजूद एरर टाइप में से कोई एक उठाना चुन सकते हैं, लेकिन तब भी एक अर्थपूर्ण संदेश ज़रूर देना चाहिए।

इस खास अभ्यास में ValueError को "फेंकने" के लिए आपको raise स्टेटमेंट का इस्तेमाल करना होता है। टेस्ट तभी पास होंगे जब आप exception को raise करें और उसके साथ एक संदेश भी शामिल करें।

किसी संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

raise ValueError("A meaningful error message here.")
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

दो बाल्टियाँ शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।