Легенда

Мы предлагаем сыграть вам в классическую игру Ним. Правила её просты: есть несколько кучек, в каждой лежит некоторое число камней (оно может различаться). Два игрока поочерёдно берут ненулевое число камней из одной кучки на свой выбор. Выигрывает тот, кто забирает последний камень.

Правда, играть нужно с удалённым сервером, а на всю игровую сессию у вас есть три секунды. Без программирования не обойтись. Поэтому ваша задача: написать бота, который подключится к серверу и сыграет 10 партий. Балл за задачу складывается из отношения выигранных партий к их общему числу.

В каждой партии ваш бот ходит первым. ИИ не прощает ошибок, но при этом у вас есть возможность отказаться от партии в первый свой ход, если вы уверены в своём поражении. Если поражение действительно неминуемо, такой отказ засчитывается как победа в партии.

Итак, вам необходимо подключиться к серверу по адресу 0xdeadbeef.ru:1901. Протокол общения с сервером представляет собой обмен сообщениями через TCP-сокет. Все сообщения должны заканчиваться переносом строки.

В начале сессии клиент передаёт строку с ключом (который вам выдаст Stepik). После чего сервер отправляет клиенту очередное положение и ждёт ответа. По истечении четырёх секунд с начала первой партии сервер автоматически разрывает подключение.

Сообщения сервера:

  • START 5 2 1 2 4 0 – начало партии, после идёт число кучек (здесь 5), и содержимое каждой кучки.
  • NEXT 5 2 1 2 4 0 – очередной ход. Числа аналогичны предыдущему сообщению.
  • KEY ... – ключ-ответ для отправки в Stepik (сервер разрывает подключение).
  • Остальные сообщения содержат ошибку, и за ними идёт разрыв подключения.

Сообщения клиента:

  • 0 2 – взять из кучки 0 (т.е. первой) два камешка
  • X (латинская «икс») – заявить поражение

Чтобы облегчить разработку бота, в сервер встроен демо-режим, доступный по ключу 0000000000000000000000000000000000000000000000000000000000000000000. Он даёт две партии с «глупым» тренировочным ботом вне зачёта.


Видео-разбор


Последнее изменение: Monday, 19 September 2022, 12:38