Дано два відра різного розміру та вказівку, яке з них наповнювати першим. Визначте, скільки дій потрібно, щоб відміряти точну кількість літрів, стратегічно переливаючи рідину між відрами.
Рішення має дотримуватися кількох правил:
Програма приймає як вхідні дані:
Програма має визначити:
Примітка: будь-яка зміна в одному чи обох відрах вважається однією (1) дією.
Приклад: Перше відро вміщає до 7 літрів, а друге - до 11 літрів. Нехай на певному кроці в першому відрі 7 літрів, а в другому 8 літрів (7,8). Якщо спорожнити перше відро й нічого не робити з другим, отримавши відповідно 0 літрів і 8 літрів (0,8), це вважається однією дією. Натомість, якби ми перелили з першого відра в друге, доки друге не наповнилося вщерть, і отримали 4 літри в першому відрі та 11 літрів у другому (4,11), це теж вважалося б лише однією дією.
Ще один приклад: Перше відро вміщає 3 літри, а друге - до 5 літрів. Нам сказано, що починати треба з першого відра. Отже, перша дія - наповнити перше відро. Другою дією ми вирішуємо спорожнити перше відро. Третьою дією не можна наповнювати друге відро, бо це порушує третє правило: після жодної дії не можна опинитися в стані, коли стартове відро порожнє, а інше наповнене вщерть.
Написано з <3 у Fullstack Academy Ліндсі Левін.
| Регістр | Використання | Тип | Опис |
|---|---|---|---|
$a0 |
вхідні дані | адреса | масив слів з ємностями відер |
$a1 |
вхідні дані | ціле число | початкове відро (1 або 2) |
$a2 |
вхідні дані | ціле число | цільовий обʼєм |
$a3 |
вхідні/вихідні дані | адреса | масив слів з остаточним вмістом відер |
$v0 |
вихідні дані | ціле число | кількість потрібних дій, -1, якщо це неможливо |
$t0-9 |
тимчасовий | будь-який | використовується для тимчасового зберігання |
Зареєструйтеся на Exercism, щоб вивчати й опановувати MIPS Assembly, а також 70 вправ та справжнє наставництво від людей, і все це безкоштовно.