Подготовка олимпиадных задач для ejudge / Alexey Nurgaliev
Краткое руководство по подготовке задач олимпиад по программированию для использования
в системе ejudge.
В руководстве будут рассматриваться только задачи для олимпиад по правилам ACM ICPC или аналогичным.
Обычно в ejudge олимпиадная задача состоит из:
Файл условия (statement.xml)
Решение жюри (на каком либо из разрешенных на соревновании языке)
Набор тестов - пары текстовых файлов, содержащие входные и выходные данные
Чекер - программа, проверяющая корректность решения участника
Конфигурация в настройках контеста (serve.cfg)
Условие
Условие задачи хранится в файле statement.xml. Примерное его содержание:
Параметры в теге problem, по документации ejudge, не используются.
Можно записать любые значения, например, в id номер задачи (A), а в type - standard
В тегах title, description, input_format, output_format, notes
текст должен быть в формате XHTML
(т.е. корректность тегов строго проверяется).
Любой из этих тегов может отсутствовать
title содержит название задачи
description содержит основную часть условия задачи
input_format содержит подробное описание формата входных данных.
Для параметров должны быть указаны диапазоны значений.
Также здесь рекомендуется обращать внимание участников на разделители параметров
(одиночные пробелы, произвольное количество пробелов, переводы строк и т.п.)
output_format содержит подробное описание формата выходных данных
notes содержит примечания к условию
Для лучшего отображения рекомендуется абзацы текста в тегах
description, input_format, output_format, notes оборачивать в теги <p>
Для вставки изображения в условие нужно поместить его файл в каталог задачи и добавить в условие
<img src="${getfile}=имя_файла.png"/>
examples содержит примеры входных и выходных данных.
Каждый пример описывается тегом example, тег input содержит пример входных данных,output - выходных.
Данные в тегах input и output будут отображаться с сохранением форматирования, обращайте внимание на лишние пробелы
Пример statement.xml реальной задачи:
Статья в ejudge wiki
содержит описания и других тегов, которые можно включить в условие.
Решение жюри
Решение задачи, предоставленное жюри.
Должно проходить все тесты, соотвествовать ограничениям по времени и памяти,
а также полностью соответствовать правилам олимпиады (если правилами накладываются какие-либо особые граничения).
Также рекомендуется, чтобы решение было написано на языке, разрешенном на олимпиаде.
Пример решения (для задачи, описанной выше):
Набор тестов
Тест - это два текстовых файла, содержащих корректные входные и выходные данные задачи.
Рекомендуется, чтобы:
Выходные данные содержали вывод решения жюри
Первые тесты соответствовали тестам из приверов в условии
Входные данные соответствовали рекомендациям polygon:
каждая строка завершается EOLN (переводом строки);
не содержат символы с кодами меньше 32;
не содержат начальных или конечных пробелов;
не содержат два подряд идущих пробела;
не содержат начальных или конечных пустых строк;
файл не пустой.
Файлы тестов можно поместить в каталог tests, файлы входных данных назвать номером теста,
файлы выходных данных - номером теста и расширением .a (расположение и наименование можно изменить в настройках контеста).
Чекер
Чекер - программа, проверяющая корректность решения участника, использующая три файла: входные данные,
выходные данные жюри, выходные данные участника.
Проверка может закончиться с одним из результатов:
OK - решение принято
WA (Wrong Answer) - решение неправильное
PE (Presentation Error) - нарушен формат вывода
FAIL - проверка завершилась с ошибкой
Для написания чекеров обычно используется библиотека testlib,
предоставляющая многие полезные методы.
При использовании библиотеки, нужно ее код (testlib.h) также включить в файлы задачи.
Задачи удобно готовить в системе polygon.
Она поддерживает множество возможностей по организации работы над отдельными задачами и над контестом в целом.
Некоторые полезные возможности:
Поддержка управления версиями всех ресурсов задачи
Генераторы для тестов
Валидаторы для тестов
Автоматическая проверка чекеров и решений на тестах задачи (с контролем времени и памяти)
Существует возможность автоматизированной загрузки задач и контестов из polygon в ejudge.
Однако на момент написания руководства условия не импортировались:
polygon использует для оформления условий TeX, а ejudge HTML.