دو سطل

دو سطل

دشوار

دستورالعمل‌ها

با دو سطل با اندازه‌های متفاوت و این که ابتدا کدام سطل پر شود، تعیین کنید که با انتقال سنجیده‌ی مایع بین سطل‌ها، برای اندازه‌گیری مقدار دقیقی از لیتر به چند عمل نیاز است.

چند قاعده وجود دارد که راه‌حل شما باید از آن‌ها پیروی کند:

  • شما فقط می‌توانید هر بار یک عمل انجام دهید.
  • فقط ۳ عمل ممکن وجود دارد:
    1. ریختن محتوای یک سطل در سطل دیگر تا زمانی که یکی از این دو حالت پیش بیاید: الف) سطل اول خالی شود ب) سطل دوم پر شود
    2. خالی کردن یک سطل و دست نزدن به سطل دیگر.
    3. پر کردن یک سطل و دست نزدن به سطل دیگر.
  • پس از هر عمل، نباید به وضعیتی برسید که سطل شروع خالی و سطل دیگر پر باشد.

برنامه‌ی شما این موارد را به عنوان ورودی می‌گیرد:

  • اندازه‌ی سطل اول
  • اندازه‌ی سطل دوم
  • تعداد لیتر موردنظر که باید به آن رسید
  • این که ابتدا کدام سطل پر شود، سطل اول یا سطل دوم

برنامه‌ی شما باید این‌ها را تعیین کند:

  • تعداد کل اعمالی که برای رسیدن به تعداد لیتر موردنظر باید انجام شود، با احتساب اولین پر کردن سطل شروع
  • کدام سطل باید در پایان تعداد لیتر موردنظر را داشته باشد، سطل اول یا سطل دوم
  • چند لیتر در سطل دیگر باقی می‌ماند

نکته: هر بار که در یکی از سطل‌ها یا هر دو تغییری داده شود، یک (۱) عمل به شمار می‌آید.

مثال: سطل اول می‌تواند تا ۷ لیتر را در خود نگه دارد و سطل دوم تا ۱۱ لیتر. فرض کنید در گامی مشخص، سطل اول ۷ لیتر و سطل دوم ۸ لیتر دارد (۷،۸). اگر سطل اول را خالی کنید و سطل دوم را تغییر ندهید، به طوری که به ترتیب ۰ لیتر و ۸ لیتر باقی بماند (۰،۸)، این یک عمل به شمار می‌آید. در عوض، اگر از سطل اول در سطل دوم ریخته باشید تا سطل دوم پر شود، به طوری که نتیجه ۴ لیتر در سطل اول و ۱۱ لیتر در سطل دوم باشد (۴،۱۱)، آن هم فقط یک عمل به شمار می‌آید.

مثال دیگر: سطل اول می‌تواند ۳ لیتر را در خود نگه دارد و سطل دوم تا ۵ لیتر. به شما گفته می‌شود که باید با سطل اول شروع کنید. بنابراین اولین عمل شما پر کردن سطل اول است. برای عمل دوم تصمیم می‌گیرید سطل اول را خالی کنید. برای عمل سوم، نمی‌توانید سطل دوم را پر کنید، چون این کار قاعده‌ی سوم را نقض می‌کند: پس از هیچ عملی نباید به وضعیتی برسید که سطل شروع خالی و سطل دیگر پر باشد.

نوشته‌شده با <3 در Fullstack Academy توسط Lindsay Levine.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Bash Exercism

آماده‌اید دو سطل را شروع کنید؟

در Exercism ثبت‌نام کنید تا Bash را همراه با 97 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.