International conference of developers
and users of free / open source software

Использование Ejudge для проведения олимпиад по программированию

Дмитрий Храбров, Гомель, Belarus

LVEE 2013

The paper considers usage of open source online programming competitions server ejudge. In addition to technical aspects author's experience is described, concerning both technical and social issues.

Как сказано на официальном сайте, Ejudge – это система для проведения различных мероприятий, в которых необходима автоматическая проверка программ. Система может применяться для проведения олимпиад и поддержки учебных курсов. Кроме этого система распространяется под лицензией GPL, имеет многоязычный веб-интерфейс и поддерживает защищённое исполнение программ (если установлен патч к ядру Linux). Также система активно используется для проведения олимпиад в различных учебных заведениях, и по своему опыту помню, что олимпиады на этой системе проходили успешно.

Для проведения олимпиады необходимо зарегистрировать участников: лично или командно. Далее нужно дать участникам возможность читать условия задач и отправлять решения на тестирование. Перед отсылкой на тестирование участник выбирает компилятор и файл с исходным кодом решения. Далее система на сервере пытается скомпилировать решение с помощью выбранного компилятора. Если произошли ошибки, то участнику выдаётся сообщение. Если компиляция прошла успешно, то происходит непосредственно тестирование. Исполняемому файлу на вход (STDIN или файл) подаются входные данные, заранее сформированные автором задачи. На выполнение обычно ставятся ограничения по времени и по памяти. Если решение участника уложилось в лимиты и выдало ответ, то система сверяет этот ответ с авторским. Кроме того система должна вести статистику, показывать положение участников.

Установка и настройка Ejudge подробно описана на сайте проекта, также есть пошаговые инструкции. Через пакетный менеджер дистрибутива нужно установить необходимые компиляторы, Ejudge при конфигурировании автоматически их подхватит. Так же перед установкой нужно указать пути директорий турниров, веб-сервера и так далее. После установки надо не забыть запустить демон Ejudge, иначе будет показываться сообщение об ошибке. Если нет желания возиться с установкой и настройкой системы, то на официальном сайте лежит готовый и настроенный VirtualBox-образ.

На официальном сайте Ejudge написано, что она имеет настраиваемый внешний вид. При беглом просмотре такая возможность без перекомпиляции найдена не была. Все страницы свёрстаны абсолютным позиционированием элементов, через CSS трудно поддаются изменениям. Так что был заменён логотип и фон страницы, после чего Ejudge не перестала быть собой в плане не слишком удобного интерфейса, однако стала гораздо более привлекательной.

На текущий момент мы успешно провели на Ejudge одну внутривузовскую олимпиаду по программированию. Наиболее востребованы языки: C#, Java, C, Pascal. Mono – реализация C# в Linux. Был некоторый страх, что реализация будет отличаться и студенты будут висеть на ответственных с криками, что C# не работает. Однако Mono отработало шикарно – ни одной жалобы, все довольны. Java есть нативная, однако ей надо минимум 512 мегабайт памяти, это необходимо учесть при конфигурировании виртуальной машины. Компиляторов С/С++ было аж два: gcc и clang. Студенты периодически путали и отправляли Си-программу на тестирование компилятором g++ (для языка С++), однако тот программы мужественно обрабатывал и работал так, как ожидали студенты. Наибольшее недопонимание дали заголовочные файлы windows.h и conio.h, которые студенты не задумываясь автоматически вставляли в свои программы. Приходилось ходить по аудиториям и повторять, что эти файлы подключать нельзя. Из компиляторов паскаля оставили только Free Pascal, так как паскаль в нашем ВУЗе используется всё меньше и был оставлен только для совместимости.

Были два человека, которые спросили про PHP и Brainfuck. Интерпретатор РНР на сервере установлен и доступен для тестирования приложений. Студенту был предоставлен пример программы, но писать на РНР он не рискнул, так как в аудиториях РНР не установлен. Язык Brainfuck системой Ejudge по умолчанию не поддерживается, но студенту дали обещание, что язык будет добавлен только в том случае, если студент будет на нём писать олимпиаду. Вопрос иссяк.

Из весёлых моментов: Ejudge по умолчанию считает C# “небезопасным” языком и он отключен для использования в турнирах. Ещё один тонкий момент был уже после проведения олимпиады – система не захотела показать таблицу результатов студентам. Пришлось открыть таблицу в администраторском интерфейсе и показывать так. Оказалось, что Ejudge по умолчанию показывает таблицу через 2 часа после завершения олимпиады, однако это настраивается в веб-интерфейсе.

В целом система тестирования Ejudge показала себя очень неплохо: свою задачу выполняет, поддерживает все современные языки программирования, имеет большое количество настраиваемых возможностей, почти всё доступно через веб-интерфейс. Из отрицательных черт можно отметить не совсем логичный и удобный интерфейс, причём как турнирный, так и администраторский.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Back