Nim Online (НТО 21/22 :: ИЭС)
Легенда
Мы предлагаем сыграть вам в классическую игру Ним. Правила её просты: есть несколько кучек, в каждой лежит некоторое число камней (оно может различаться). Два игрока поочерёдно берут ненулевое число камней из одной кучки на свой выбор. Выигрывает тот, кто забирает последний камень.
Правда, играть нужно с удалённым сервером, а на всю игровую сессию у вас есть три секунды. Без программирования не обойтись. Поэтому ваша задача: написать бота, который подключится к серверу и сыграет 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. Он даёт две партии с «глупым» тренировочным ботом вне зачёта.