Как участвовать в конкурсах играющих программ
Итак, что такое конкурс играющих программ? Это необычное соревнование по программированию, в котором участникам требуется реализовать стратегию в некоторой заданной игре. Игры бывают совершенно разными, правила каждой конкретной игры выкладываются на сайте и в тестирующей системе вместе с началом конкурса.
Чтобы принять участие в конкурсе, первым делом нужно зарегистрироваться на сайте (если вы этого ещё не сделали). После того как Вы получите свой логин и пароль (или используете ID ВКонтакте для входа), нужно зарегистрироваться на выбранный конкурс играющих программ в разделе "соревнования". Как только будет доступно условие задачи, его можно скачать и отправлять решение в тестирующую систему. Справка о том, как ей пользоваться, находится здесь.
Об архиве игровых задач.
Пока конкурс не начался (или когда уже закончился, да и вообще в любое время), можно написать стратегию для игры с какого-нибудь из прошедших конкурсов. Для этого нужно зарегистрироваться на контест "Архив игровых задач" отсюда, после чего скачать условия и прочие полезные материалы (вроде визуализаторов и комплектов для запуска локальных партий) со страницы архива.
Комплекты для запуска локальных партий.
Практически к каждой задаче прилагается комплект для запуска партий на Вашем компьютере.
Комплект под Windows.
Для работы комплекта запуска в системе должен быть установлен Visual C++ 2008 Redistributable Package.
Для того, чтобы воспользоваться таким комплектом, нужно:
- Скачать соответствующий комплект.
- Распаковать куда-нибудь.
- Заменить player1.exe и player2.exe на те программы, которые вы хотите запустить играть друг с другом.
- Запустить game_run.exe, в папке с программой окажется файл game.log - протокол партии.
Также можно настроить параметры запуска игроков, отредактировав файл game_run.cfg. В нем можно изменить следующие параметры:
- IdlenessLimit - максимальное количество времени, которое game_run будет ожидать ввода/вывода вашей программы (в миллисекундах)
- TimeLimit - ограничение на использование процессорного времени (в миллисекундах)
- MovesToDoInTL - количество ходов, которое требуется выполнить за время равное TimeLimit
- MemoryLimit - ограничение на используемую память (в байтах)
- Player1 - имя исполнимого файла первого игрока
- Player2 - имя исполнимого файла второго игрока
- Checker - имя программы, проверяющей ходы и определяющей победителей
- Player1CommandLine, Player2CommandLine, CheckerCommandLine - строки запуска соответствующих программ
- GameNumber - номер игры, которую Вы хотите запустить (в некоторых играх от этого зависит начальное состояние игры: расположение объектов на карте итп).
В случае, если Вы пишете на Java, необходимо скомпилировать Вашу программу в единый jar-файл, прописать его в качестве параметра Player1, а в качестве Player1CommandLine прописать что-то вроде "java -Xmx256M -Xss64M -jar yourfile.jar". Если Вы пишете на Perl, Python или PHP, в качестве имени исполнимого файла требуется прописать имя Вашего скрипта, а в качестве строки запуска (например) "perl yourscript.pl". Убедитесь, что пути к требуемым программам находятся в переменной PATH.
При запуске Вашей программы в качестве параметра командной строки ей будет передан номер игрока, за которого она играет (1 или 2 соответственно). Это же будет сделано и при запуске Вашей программы в тестирующей системе.
Комплект под Linux.
Механизм работы и конфигурационный файл утилиты game_run под Linux аналогичен таковому под Windows. Однако эта утилита распространяется в виде исходного кода, потому для начала ее придется собрать. Это можно сделать, скачав архив и запустив make. В случае ошибок сборки - комментируйте эту статью, будем разбираться.
После того как утилита game_run скомпилируется, ей можно пользоваться, так же как и утилитой под Windows.
Наиболее часто встречающиеся проблемы.
В ходе конкурса обычно доступен для просмотра протокол тестирования Вашего решения (в тестирующей системе на вкладке "Результаты тестирования" картинка в колонке "Log"). Он состоит из списка партий, сыгранных Вашей программой и комментария чекера (или системы) о результате игры.
- В протоколе тестирования решение получает вердикт "Compilation error", во всех партиях присуждается поражение.
Убедитесь, что Ваше решение действительно компилируется тем компилятором, который Вы выбрали при отправке. - В протоколе тестирования решение получает вердикт "Idleness limit exceeded".
Наиболее частая причина такого вердикта - если Вы забыли вывести пустую строку после завершения хода. Ваш вывод после каждого хода должен заканчиваться двумя символами перевода строки. Также такой вердикт может возникнуть, если Вы забыли сбросить буфер выходного потока в Вашей программе.
Также такая проблема может возникнуть при выводе бесконечного количества ходов сразу. Убедитесь, что Ваша программа выводит за один раз только один ход. - В протоколе тестирования решение получает вердикт "Player #N terminated".
Эта проблема связана с тем, что Ваше решение завершается после вывода хода. Обратите внимание, что Ваша программа будет запущена ровно один раз, и ей будут поочерёдно подаваться на вход состояния поля. Вы можете использовать это, например предподсчитав что-нибудь.
Комплект для запуска локальных партий (windows) (*.zip, 37 Kb)
Комплект для запуска локальных партий (linux, src) (*.zip, 12 Kb)