দুই বালতি

দুই বালতি

মধ্যম

নির্দেশনা

দুটি ভিন্ন আকারের বালতি এবং প্রথমে কোন বালতি ভরবেন তা দেওয়া থাকলে, বালতিগুলোর মধ্যে কৌশলগতভাবে তরল স্থানান্তর করে সঠিক পরিমাণ লিটার মাপতে কতগুলো অ্যাকশন লাগবে, তা নির্ণয় করুন।

আপনার সমাধানকে কিছু নিয়ম মেনে চলতে হবে:

  • আপনি একবারে কেবল একটি অ্যাকশন করতে পারবেন।
  • সম্ভাব্য অ্যাকশন মাত্র ৩টি:
    1. একটি বালতি থেকে অন্যটিতে ঢালা, যতক্ষণ না: a) প্রথম বালতিটি খালি হয়ে যায় b) দ্বিতীয় বালতিটি ভরে যায়
    2. একটি বালতি খালি করা এবং অন্যটিতে কিছু না করা।
    3. একটি বালতি ভরা এবং অন্যটিতে কিছু না করা।
  • কোনো অ্যাকশনের পরে আপনি এমন অবস্থায় পৌঁছাতে পারবেন না, যেখানে শুরু করার বালতিটি খালি আর অন্যটি ভরা।

আপনার প্রোগ্রাম ইনপুট হিসেবে নেবে:

  • বালতি one-এর আকার
  • বালতি two-এর আকার
  • কাঙ্ক্ষিত কত লিটার পর্যন্ত পৌঁছাতে হবে
  • প্রথমে কোন বালতি ভরবেন, বালতি one না বালতি two

আপনার প্রোগ্রাম নির্ধারণ করবে:

  • কাঙ্ক্ষিত পরিমাণ লিটারে পৌঁছাতে মোট কতটি অ্যাকশন লাগবে, শুরুর বালতির প্রথম ভরাটসহ
  • কাঙ্ক্ষিত পরিমাণ লিটার শেষমেশ কোন বালতিতে থাকবে, বালতি one না বালতি two
  • অন্য বালতিতে কত লিটার বাকি থাকবে

লক্ষ করুন: এক বা উভয় বালতিতে যেকোনো সময় পরিবর্তন করা হলে সেটি এক (১) অ্যাকশন হিসেবে ধরা হবে।

উদাহরণ: বালতি one-এ সর্বোচ্চ ৭ লিটার ধরে, আর বালতি two-তে সর্বোচ্চ ১১ লিটার ধরে। ধরা যাক, একটি নির্দিষ্ট ধাপে বালতি one-এ ৭ লিটার আর বালতি two-তে ৮ লিটার আছে (৭,৮)। আপনি যদি বালতি one খালি করেন এবং বালতি two-তে কোনো পরিবর্তন না করেন, ফলে যথাক্রমে ০ লিটার আর ৮ লিটার থাকে (০,৮), তবে সেটি একটি অ্যাকশন হিসেবেই ধরা হবে। এর বদলে, আপনি যদি বালতি one থেকে বালতি two-তে ঢালতেন যতক্ষণ না বালতি two ভরে যায়, ফলে বালতি one-এ ৪ লিটার আর বালতি two-তে ১১ লিটার থাকত (৪,১১), তবে সেটিও কেবল একটি অ্যাকশন হিসেবেই ধরা হতো।

আরেকটি উদাহরণ: বালতি one-এ ৩ লিটার ধরে, আর বালতি two-তে সর্বোচ্চ ৫ লিটার ধরে। আপনাকে বলা হয়েছে, আপনাকে বালতি one দিয়ে শুরু করতে হবে। তাই আপনার প্রথম অ্যাকশন হলো বালতি one ভরা। দ্বিতীয় অ্যাকশন হিসেবে আপনি বালতি one খালি করার সিদ্ধান্ত নেন। তৃতীয় অ্যাকশনে আপনি বালতি two ভরতে পারবেন না, কারণ এতে তৃতীয় নিয়মটি ভাঙে, অর্থাৎ কোনো অ্যাকশনের পরে আপনি এমন অবস্থায় পৌঁছাতে পারবেন না যেখানে শুরুর বালতিটি খালি আর অন্যটি ভরা।

Fullstack Academy-এ <3 দিয়ে লিখেছেন Lindsay Levine।

এক্সেপশন মেসেজ

কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। এটা করার সময় আপনার সর্বদা একটি অর্থবহ এরর মেসেজ যোগ করা উচিত, যাতে বোঝা যায় এররটির উৎস কী। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং Debug করতে অনেক সুবিধা হয়। এমন পরিস্থিতিতে যেখানে আপনি জানেন যে এররের উৎসটি একটি নির্দিষ্ট টাইপ হবে, আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করা বেছে নিতে পারেন, তবে তবুও একটি অর্থবহ মেসেজ যোগ করা উচিত।

এই নির্দিষ্ট অনুশীলনীতে একটি ValueError "থ্রো" করতে আপনার raise স্টেটমেন্ট ব্যবহার করা আবশ্যক। আপনি যদি exception raise করেন এবং এর সাথে একটি মেসেজও যোগ করেন, তবেই টেস্টগুলো পাস করবে।

একটি মেসেজসহ ValueError রেইজ করতে, exception টাইপের আর্গুমেন্ট হিসেবে মেসেজটি লিখুন:

raise ValueError("A meaningful error message here.")

সূত্র

Water Pouring Problemলিংকটি নতুন উইন্ডো বা ট্যাবে খোলে
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

দুই বালতি শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।