দুটি ভিন্ন আকারের বালতি এবং প্রথমে কোন বালতি ভরবেন তা দেওয়া থাকলে, বালতিগুলোর মধ্যে কৌশলগতভাবে তরল স্থানান্তর করে সঠিক পরিমাণ লিটার মাপতে কতগুলো অ্যাকশন লাগবে, তা নির্ণয় করুন।
আপনার সমাধানকে কিছু নিয়ম মেনে চলতে হবে:
আপনার প্রোগ্রাম ইনপুট হিসেবে নেবে:
আপনার প্রোগ্রাম নির্ধারণ করবে:
লক্ষ করুন: এক বা উভয় বালতিতে যেকোনো সময় পরিবর্তন করা হলে সেটি এক (১) অ্যাকশন হিসেবে ধরা হবে।
উদাহরণ: বালতি one-এ সর্বোচ্চ ৭ লিটার ধরে, আর বালতি two-তে সর্বোচ্চ ১১ লিটার ধরে। ধরা যাক, একটি নির্দিষ্ট ধাপে বালতি one-এ ৭ লিটার আর বালতি two-তে ৮ লিটার আছে (৭,৮)। আপনি যদি বালতি one খালি করেন এবং বালতি two-তে কোনো পরিবর্তন না করেন, ফলে যথাক্রমে ০ লিটার আর ৮ লিটার থাকে (০,৮), তবে সেটি একটি অ্যাকশন হিসেবেই ধরা হবে। এর বদলে, আপনি যদি বালতি one থেকে বালতি two-তে ঢালতেন যতক্ষণ না বালতি two ভরে যায়, ফলে বালতি one-এ ৪ লিটার আর বালতি two-তে ১১ লিটার থাকত (৪,১১), তবে সেটিও কেবল একটি অ্যাকশন হিসেবেই ধরা হতো।
আরেকটি উদাহরণ: বালতি one-এ ৩ লিটার ধরে, আর বালতি two-তে সর্বোচ্চ ৫ লিটার ধরে। আপনাকে বলা হয়েছে, আপনাকে বালতি one দিয়ে শুরু করতে হবে। তাই আপনার প্রথম অ্যাকশন হলো বালতি one ভরা। দ্বিতীয় অ্যাকশন হিসেবে আপনি বালতি one খালি করার সিদ্ধান্ত নেন। তৃতীয় অ্যাকশনে আপনি বালতি two ভরতে পারবেন না, কারণ এতে তৃতীয় নিয়মটি ভাঙে, অর্থাৎ কোনো অ্যাকশনের পরে আপনি এমন অবস্থায় পৌঁছাতে পারবেন না যেখানে শুরুর বালতিটি খালি আর অন্যটি ভরা।
Fullstack Academy-এ <3 দিয়ে লিখেছেন Lindsay Levine।
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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।