Гра «Вгадай число»

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 3,00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Suggester:
Problem type

Напишіть програму, яка гратиме у гру "Вгадай число": визначатиме загадане суперником ціле число із заданого діапазону на основі запитів до суперника.

У кожному запиті Ваша програма повинна виводити слово try та одне ціле число, що трактується як запитання «Загадане число ...?». Суперник на це відповідає (гарантовано чесно) одне з трьох:

  • або, що саме це число й загадане,
  • або, що загадане число більше,
  • або, що загадане число менше.

Ваша програма повинна продовжувати (або завершити) гру, враховуючи отримані відповіді. Кількість спроб вгадування (неза-лежно від величини проміжку) - до 50 (п'ятдесяти), включно. При перевищенні цього ліміту, Вашій програмі присуджується технічна поразка (вона не отримує балів за відповідний тест).

Тобто, ця задача є інтерактивною: Ваша програма не отримає всіх вхідних даних на початку, а отримуватиме по мірі виконання доуточ-нення, котрі залежатимуть від попередніх дій Вашої програми. Тим не менш, її перевірка теж відбувається автоматично. Тому, у цій Вашій програмі, як і в програмах-розв'язках інших задач, теж слід не «організовувати діалог інтуїтивно зрозумілим чином», а чітко дотримуватися формату. Тільки це формат спілкування з програмою, котра грає роль суперника.

Протокол взаємодії

На початку, один раз, на вхід Вашій програмі подаються записані в один рядок через пропуск (пробіл) два цілі числа ~a~, ~b~ ~(-2\cdot10^9\leqslant a\leqslant b\leqslant 2\cdot10^9)~ — межі проміжку. Це означає, що загадане ціле число гарантовано перебуває в межах ~a \leqslant x \leqslant b~.

На кожному наступному кроці, на вхід Вашій програмі подається рядок, що містить рівно один з трьох символів:

  • = означає, що останнє виведене Вашою програмою число і є загаданим;
  • + означає, що загадане число більше, ніж виведене Вашою програмою;
  • - означає, що загадане число менше, ніж виведене Вашою програмою.

Поки Ваша програма «не впевнена», яке число загадане, вона повинна повторювати виведення в один рядок через пропуск (пробіл або табуляцію) слова try (маленькими латинськими буквами, без лапок) та одного цілого числа — чергової спроби вгадування. Кожне число-спроба повинно бути в межах ~a \leqslant x \leqslant b~ (див. вище).

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

Коли Вашій програмі «стає абсолютно очевидно», яке число загадане, вона повинна припинити основну частину гри і вивести в один рядок через пропуск (пробіл або табуляцію) слово answer (маленькими латинськими буквами, без лапок) та вгадане число. Після цього слід остат'очно завершити роботу, не виводячи жодного іншого символа.

Приклад

Вхід, суперник Ваша програма
1 100
try 10
+
try 20
-
try 19
-
try 18
-
try 17
=
answer 17

Примітки

  1. Програма-суперник з самого початку загадала число 17.

  2. Щоб було видніше, в якому порядку відбуваються введення та виведення, у прикладі використано оформлення таблицею та розділення порожніми рядками. При фактичній перевірці програма-суперник не виводитиме ніяких порожніх рядків і не чекатиме їх від Вашої програми.

  3. Ваша програма не зобов'язана грати за стратегією, що наведена у цьому прикладі. Це лише приклад можливої роботи програми, що успішно завершує конкретно цю гру.


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.