अलग-अलग आकार की दो बाल्टियाँ दी गई हैं, और यह भी बताया गया है कि पहले कौन-सी बाल्टी भरनी है। बाल्टियों के बीच तरल को समझदारी से इधर-उधर डालते हुए एक ठीक-ठीक संख्या में लीटर नापने के लिए कितनी क्रियाएँ आवश्यक हैं, यह पता कीजिए।
आपके हल को इन नियमों का पालन करना होगा:
आपका प्रोग्राम इनपुट के रूप में ये चीज़ें लेगा:
आपके प्रोग्राम को यह पता लगाना होगा:
ध्यान दें: जब भी किसी एक या दोनों बाल्टियों में कोई बदलाव किया जाता है, वह एक (1) क्रिया माना जाता है।
उदाहरण: पहली बाल्टी में 7 लीटर तक समा सकते हैं, और दूसरी बाल्टी में 11 लीटर तक। मान लीजिए कि किसी दिए गए चरण में पहली बाल्टी में 7 लीटर हैं और दूसरी बाल्टी में 8 लीटर (7,8)। अगर आप पहली बाल्टी खाली कर दें और दूसरी बाल्टी में कोई बदलाव न करें, जिससे आपके पास क्रमशः 0 लीटर और 8 लीटर रह जाते हैं (0,8), तो यह एक क्रिया मानी जाएगी। इसके बजाय, अगर आप पहली बाल्टी से दूसरी बाल्टी में तब तक डालें जब तक दूसरी बाल्टी भर न जाए, जिससे पहली बाल्टी में 4 लीटर और दूसरी बाल्टी में 11 लीटर हो जाएँ (4,11), तो वह भी केवल एक ही क्रिया मानी जाएगी।
एक और उदाहरण: पहली बाल्टी में 3 लीटर समा सकते हैं, और दूसरी बाल्टी में 5 लीटर तक। आपसे कहा गया है कि शुरुआत पहली बाल्टी से करनी है। इसलिए आपकी पहली क्रिया पहली बाल्टी भरना है। दूसरी क्रिया के लिए आप पहली बाल्टी खाली करना चुनते हैं। तीसरी क्रिया में आप दूसरी बाल्टी नहीं भर सकते, क्योंकि इससे तीसरे नियम का उल्लंघन होता है। किसी भी क्रिया के बाद आप ऐसी स्थिति में नहीं पहुँच सकते जहाँ शुरुआती बाल्टी खाली हो और दूसरी बाल्टी भरी हुई हो।
लिंडसे लेविन ने Fullstack Academy में <3 के साथ लिखा।
twobucket पैकेज में एक Go फंक्शन Solve लागू कीजिए, जिसका सिग्नेचर नीचे दिया गया है:
func Solve(sizeBucketOne,
sizeBucketTwo, goalAmount int, startBucket string,
) (goalBucket string, numSteps, otherBucketLevel int, e error)
Solve चार वैल्यू लौटाता है: वह लक्ष्य बकेट जिस तक पहुँचा गया ("one" या two"), लक्ष्य मात्रा तक पहुँचने के लिए लगे मूव्स/स्टेप्स की संख्या, दूसरे बकेट में बचे लीटर, और एक एरर वैल्यू। किसी भी अमान्य पैरामीटर के लिए, या जब कोई हल संभव न हो, तो एरर लौटाइए।
Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट165 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।