अलग-अलग आकार की दो बाल्टियाँ दी गई हैं, और यह भी बताया गया है कि पहले कौन-सी बाल्टी भरनी है। बाल्टियों के बीच तरल को समझदारी से इधर-उधर डालते हुए एक ठीक-ठीक संख्या में लीटर नापने के लिए कितनी क्रियाएँ आवश्यक हैं, यह पता कीजिए।
आपके हल को इन नियमों का पालन करना होगा:
आपका प्रोग्राम इनपुट के रूप में ये चीज़ें लेगा:
आपके प्रोग्राम को यह पता लगाना होगा:
ध्यान दें: जब भी किसी एक या दोनों बाल्टियों में कोई बदलाव किया जाता है, वह एक (1) क्रिया माना जाता है।
उदाहरण: पहली बाल्टी में 7 लीटर तक समा सकते हैं, और दूसरी बाल्टी में 11 लीटर तक। मान लीजिए कि किसी दिए गए चरण में पहली बाल्टी में 7 लीटर हैं और दूसरी बाल्टी में 8 लीटर (7,8)। अगर आप पहली बाल्टी खाली कर दें और दूसरी बाल्टी में कोई बदलाव न करें, जिससे आपके पास क्रमशः 0 लीटर और 8 लीटर रह जाते हैं (0,8), तो यह एक क्रिया मानी जाएगी। इसके बजाय, अगर आप पहली बाल्टी से दूसरी बाल्टी में तब तक डालें जब तक दूसरी बाल्टी भर न जाए, जिससे पहली बाल्टी में 4 लीटर और दूसरी बाल्टी में 11 लीटर हो जाएँ (4,11), तो वह भी केवल एक ही क्रिया मानी जाएगी।
एक और उदाहरण: पहली बाल्टी में 3 लीटर समा सकते हैं, और दूसरी बाल्टी में 5 लीटर तक। आपसे कहा गया है कि शुरुआत पहली बाल्टी से करनी है। इसलिए आपकी पहली क्रिया पहली बाल्टी भरना है। दूसरी क्रिया के लिए आप पहली बाल्टी खाली करना चुनते हैं। तीसरी क्रिया में आप दूसरी बाल्टी नहीं भर सकते, क्योंकि इससे तीसरे नियम का उल्लंघन होता है। किसी भी क्रिया के बाद आप ऐसी स्थिति में नहीं पहुँच सकते जहाँ शुरुआती बाल्टी खाली हो और दूसरी बाल्टी भरी हुई हो।
लिंडसे लेविन ने Fullstack Academy में <3 के साथ लिखा।
आसानी के लिए आप यह मान सकते हैं कि सबसे पहले भरा जाने वाला बकेट हमेशा बकेट one ही होता है। अगर बकेट two होना चाहिए, तो बस दोनों बकेट आपस में बदल देना ही काफी है।
Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।