В этом году в первой номинации Всесибирской олимпиады участникам снова предлагалось написать программу управления роботами-пылесосами.
Как и в прошлом году, игра массовая: в каждой игре запускаются вместе стратегии всех 46 команд. Поэтому, как и в прошлом году, участником пришлось писать стратегии на языке Lua. По появившейся в прошлом году хорошей традиции, в каждом классе, в котором писали соревнование участники, был включен телевизор или проектор, на котором постоянно по циклу показывались последние игры, прошедшие на сервере жюри. Это позволяло участникам быстрее и проще адаптировать свои стратегии под изменения стратегий соперников. Более того, каждый участник мог даже скачать решения всех других участников в любой прошедшей игре, и запустить их локально в любых желаемых конфигурациях.
Правила игры были довольно простые. У каждого игрока есть пылесос, который ездит по полю, и своя территория. Когда пылесос ездит вне своей территории, он оставляет за собой хвост. Если пылесос замыкает свой хвост, вернувшись на свою территорию, тогда все клетки замкнутого контура переходят к нему. Если в хвост пылесоса кто-либо врезается, то игрок умирает: его пылесос, хвост и территория исчезают. Поле циклически замкнуто по горизонтали и вертикали. В качестве очков игрока бралась максимальная достигнутая в течение игры площадь своей территории, к тому же был бонусный множитель за убийства.
Видео одной игры финального тестирования.
Сейчас по задаче можно скачать:
Исходные коды игры. Для сборки нужны CMake и Qt, но дорогу осилит идущий =)
Оригинальные материалы. Этот архив выдавался участникам на соревновании. В нём есть в том числе полное условие задачи и виндовые бинарники. Если визуализатор сходу не запускается, советуем собрать из исходников.
.
.
Немного фото с места проведения:
Было бы здорово, если б участники поделились впечатлениями от игрового тура ;)
Нам, как жюри, очень интересно узнать, что думают участники о подготовленной для них игре. Понравилась ли сама игра? Те, кто участвовал не впервые, могут сравнить с первой номинацией прошлых годов. Не длинным ли получилось условие? Какие-то общие замечания, предложения?
Так же в этот раз мы попробовали сделать достаточно интересное нововведение. Поскольку одна из проблем при разработке стратегий для игры это локальное тестирование, то мы решили дать возможность скачивать скомпилированные коды других участников и запускать их локально. Пользовался ли кто-то из участников такой возможностью? Сделало ли это их жизнь легче?
Мы активно пользовались возможностью запустить локально решения вместе с другими, без отправки в систему. Можно сравнить с прошлым годом: когда мы делали решение, то тестировали только с рандомным и не понимали, почему оно на сервере плохо работает.
Также понравилось правило, которое учитывает результаты на протяжении всего контеста, теперь игра становится живой уже после первого часа, интереснее наблюдать. А вместе с локальным тестированием на сервере теперь крутятся лучшие решения, а слабые крутятся и оптимизируются локально.
В общем, было весело! Не понравилась только то, что столкновение лоб в лоб могло остановить двух игроков до конца игры, если никто не хочет уступать. Ну и это единственный случай, когда положение игрока не меняется при команде move, мне кажется это странным.
Спасибо за отзыв :)
Учёт результатов во время тура специально вводился, чтоб команды не хранили лучшее решения до конца тура. Иначе бы фича с выкачиванием чужих решений была бессмысленна.
По столкновениям согласен, интереснее было бы в варианте, когда наехавший пылесос давит ранее там находившийся :)
На deadline24 делают так, что за игры в конце тура дается больше очков, чем за игры в начале — думаю, уместно было бы так сделать и здесь. Конкретно на deadline это сделано так: последняя игра стоит в x раз дороже первой, и игра через t после начала в контесте длины T стоит в
больше, чем первая.
Мы думали об этом, но такой вариант слишком обесценивает решения в первые часы соревнования. Не стоит забывать о том, что у нас аж 50% очков давалось за результаты финального тестирования (то есть за последнее отправленное решение), а остальные 50% равномерно размазаны по 4 часам тура. Какой смысл давать последним решениям ещё больший вес?