`Всеукраїнський центр проведення олімпіад в мережі Інтернет

Задача Sticks_interactive.  Є одна купка, яка спочатку містить N паличок. Двоє грають у таку гру. Кожен з гравців на кожному своєму ході може забрати з купки або 1, або 2, або 3 палички. Ніяких інших варіантів ходу нема. Ходять гравці по черзі, пропускати хід не можна. Виграє той, хто забирає останню паличку (можливо, разом із ще однією або ще двома).

Напишіть програму, яка інтерактивно гратиме за першого гравця.

Технічні умови.  На початку, один раз, Ваша програма повинна прочитати одне ціле число в окремому рядку – початкову кількість паличок N (1 ≤ N ≤ 1000). Потім вона повинна повторювати такий цикл:

  • Вивести окремим рядком єдине число – свій хід, тобто кількість паличок, які вона зараз забирає з купки. Це повинно бути ціле число від 1 до 3, не більше за поточну кількість паличок у купці.
  • Якщо після цього купка стає порожньою, вивести окремим рядком “І_won!” (без лапок, через підкреслення замість пробілу, символ-у-символ за зразком) і завершити роботу.
  • Інакше, прочитати хід програми-суперниці, тобто кількість паличок, які вона зараз забирає з купки (єдине ціле число, в окремому рядку). Гарантовано, що хід допустимий (є цілим числом від 1 до 3 і не перевищує поточного залишку паличок у купці). Само собою, ця гарантія дійсна лише за умови, що Ваша програма правильно визначила, що гра ще не закінчилася.
  • Якщо після цього купка стає порожньою, вивести “You_won...” (без лапок, через підкреслення замість пробілу, символ-у-символ за зразком) і завершити роботу.

Все це повинно повторюватися, доки не будуть забрані всі палички (тобто, доки якась із програм не виграє). Програма-суперниця не виводить фраз “I_won!” / “You_won...” чи якихось їх аналогів.

Перевірка задачі автоматична, тому слід чітко дотримуватися вказаного формату спілкування з програмою-суперницею. Рекомендується, щоб Ваша програма після кожного свого виведення робила дію flush(output) (Pascal), вона ж cout.flush() (C++), вона ж fflush(stdout) (C), вона ж sys.stdout.flush() (Python), вона ж System.out.flush() (Java). Це істотно зменшує ризик, що проміжна відповідь «застрягне» десь по дорозі, не дійшовши до програми-суперниці.

Приклад:

Введення

Виведення

Примітки

5

 

2

 

1

 

2

I_won!

У купці з самого початку 5 паличок. Ваша програма забирає одну, лишається чотири; програма-суперниця забирає дві, лишається дві; Ваша програма забирає обидві, повідомляє про свій виграш і завершує роботу.

Порожні рядки наведені лише заради того, щоб було ясніше, що коли вводиться / виводиться. Не треба ні виводити їх, ні очікувати, що їх виводитиме програма-суперниця.

Особливості оцінювання.  У приблизно половині тестів програма-суперниця ідеальна, тобто не робить помилок. У іншій приблизно половині тестів, програми-суперниці різні та грати не вміють – роблять ходи, які дотримуються вимог «забирати від 1 до 3 паличок» та «забирати не більше паличок, ніж є у купці», але можуть вибирати не найкращий з допустимих ходів, дотримуючись кожна своїх власних уявлень про те, як грати в цю гру. Буде оцінюватися як уміння Вашої програми виграти там, де це легко, так і вміння Вашої програми достойно, згідно правил гри, програти, так і вміння Вашої програми скористатися (теж згідно правил) помилками чи іншими неадекватностями програми-суперниці, якщо такі будуть. За будь-яке порушення правил гри з боку Вашої програми, відповідний тест оцінюватиметься як не пройдений.

© LIKT 1998-2024