بمعرفة دلوين مختلفين في الحجم وأي الدلوين يجب ملؤه أولًا، حدّد عدد الإجراءات اللازمة لقياس عدد محدد من اللترات بنقل السائل بين الدلوين بذكاء.
هناك بعض القواعد التي يجب أن يتبعها حلّك:
سيستقبل برنامجك المدخلات التالية:
وعلى برنامجك أن يحدد:
ملاحظة: أي تغيير يُجرى على أحد الدلوين أو كليهما يُحتسب إجراءً واحدًا (1).
مثال: يستوعب الدلو الأول حتى 7 لترات، ويستوعب الدلو الثاني حتى 11 لترًا. لنفترض أن الدلو الأول يحتوي في خطوة معينة على 7 لترات وأن الدلو الثاني يحتوي على 8 لترات (7,8). إذا فرّغت الدلو الأول دون إجراء أي تغيير على الدلو الثاني، فتبقى لديك 0 لتر و8 لترات على الترتيب (0,8)، فهذا يُحتسب إجراءً واحدًا. أما إذا كنت قد سكبت من الدلو الأول في الدلو الثاني حتى امتلأ الدلو الثاني، فتصبح النتيجة 4 لترات في الدلو الأول و11 لترًا في الدلو الثاني (4,11)، فهذا أيضًا يُحتسب إجراءً واحدًا فقط.
مثال آخر: يستوعب الدلو الأول 3 لترات، ويستوعب الدلو الثاني حتى 5 لترات. ويُقال لك إن عليك البدء بالدلو الأول. لذا فإن إجراءك الأول هو ملء الدلو الأول. ثم تختار تفريغ الدلو الأول في إجراءك الثاني. أما في إجراءك الثالث، فلا يجوز لك ملء الدلو الثاني، لأن هذا يخالف القاعدة الثالثة: لا يجوز أن تنتهي بعد أي إجراء إلى حالة يكون فيها الدلو الذي بدأت به فارغًا والدلو الآخر ممتلئًا.
كُتبت بـ<3 في Fullstack Academy بقلم Lindsay Levine.
في الحزمة twobucket، نفّذ دالة Solve بلغة Go بالتوقيع التالي:
func Solve(sizeBucketOne,
sizeBucketTwo, goalAmount int, startBucket string,
) (goalBucket string, numSteps, otherBucketLevel int, e error)
تُرجع Solve أربع قيم: دلو الهدف الناتج ("one" أو "two")، وعدد الحركات/الخطوات اللازمة للوصول إلى الكمية المستهدفة، وعدد اللترات المتبقية في الدلو الآخر، وقيمة خطأ.
أرجِع خطأً عند وجود أي معامل غير صالح أو عند تعذّر إيجاد حل.
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.