Оценивающие программы

From EjudgeWiki
Revision as of 08:59, 20 April 2022 by Cher (talk | contribs) (enable_checker_token update)

Навигация: Главная страница/Система ejudge/Использование/Оценивающие программы

Оценивающая программа предназначена для выставления оценки за решение участника при нестандартных системах оценивания. В стандартных системах оценивания KIROV или OLYMPIAD общее число баллов за задачу вычисляется суммированием числа баллов, полученных за все пройденные тесты. Дополнительно ejudge поддерживает выставление специальной оценки про совпадении множеств тестов. Тем не менее в более сложных ситуациях встроенных возможностей системы может не хватить.

Входные данные

Переменная окружения EJUDGE устанавливается в значение 1.

Если установлена глобальная конфигурационная переменная separate_user_score, переменная окружения EJUDGE_USER_SCORE устанавливается в значение 1. В противном случае эта переменная окружения не устанавливается.

Если у задачи установлена конфигурационная переменная valuer_sets_marked, переменная окружения EJUDGE_MARKED устанавливается в значение 1. В противном случае эта переменная окружения не устанавливается.

Если у задачи установлена конфигурационная переменная interactive_valuer, переменная окружения EJUDGE_INTERACTIVE устанавливается в значение 1. В противном случае эта переменная окружения не устанавливается.

Если у задачи установлена конфигурационная переменная enable_checker_token, переменная окружения EJUDGE_CHECKER_TOKEN устанавливается в значение 1.

При перетестировании посылки в значение 1 устанавливается переменная окружения EJUDGE_REJUDGE (с версии 3.0).

Переменные окружения устанавливаются только, начиная с версии 2.3.26.

На вход оценивающей программы подается информация о результатах прохождения тестируемой программы на всех тестах. Оценивающая программа должна на основании этой информации выдать на выходе балл, в который оценивается решение. Входные данные подаются на стандартный поток ввода и имеют следующий формат:

  • Первое число N (N > 0) целое и задает количество тестов, на которых была запущена тестируемая программа.
  • Далее идут N троек чисел R S T.
    • Целое число R - это результат выполнения тестируемой программы на данном тесте.
    • Целое число S (S >= 0) - это балл, который получила тестируемая программа. Это 0, если программа не прошла данный тест, и оценка за данный тест, если программа прошла его.
    • Целое число T (T >= 0) - время работы программы в миллисекундах на данном тесте.
    • Если у задачи установлена конфигурационная переменная enable_checker_token, дополнительно передается

токен, который был сгенерирован проверяющей программой.

Формат входных данных свободный, то есть числа на входе разделяются произвольным количеством пробельных символов.

Результат работы

Результатом работы оценивающей программы должно быть одно целое число не меньшее нуля на стандартном потоке вывода. Оценка не должна превосходить максимальный балл за задачу.

Если у задачи установлена конфигурационная переменная valuer_sets_marked, оценивающая программа должна дополнительно вывести на стандартный поток вывода целое число 0 или 1 — значение флага "marked" для данной посылки.

Если установлена глобальная конфигурационная переменная separate_user_score, оценивающая программа должна дополнительно вывести на стандартный поток вывода три числа: пользовательский вердикт проверки, пользовательскую оценку в баллах и количество пройденных тестов, видимых для пользователя. Оценивающая программа может вместо любого из этих чисел вывести -1, тогда будут использованы стандартные алгоритмы вычисления пользовательского вердикта проверки, пользовательской оценки в баллах и количества пройденных тестов.

Дополнительные файлы

Дополнительно в аргументах командной строки оценивающей программе передаются три пути. В них оценивающая программа может записать какие-либо коментарии (в произвольной форме), которые будут доступны участникам и судьям.

Первый аргумент командной строки (argv[1]) задает путь к файлу, в который оценивающая программа может записать комментарии для участника. Содержимое этого файла будет доступно как участнику при просмотре им протокола тестирования, так и привилегированным пользователям.

Второй аргумент командной строки (argv[2]) задает путь к файлу, в который оценивающая программа может записать комментации для привелигированных пользователей. Эти комментарии участнику по умолчанию не доступны.

Оценивающая программа может не создавать и ничего не записывать в эти файлы.

Третий аргумент командной строки (argv[3]) задает путь к каталогу задачи. Аргумент передается, только если турнир настроен в альтернативной раскладке файлов. (С версии 2.3.26).

Интерактивные оценивающие программы

Интерактивные оценивающие программы запускаются параллельно с тестированием решения участника. Результат проверки тестируемой программы на каждом тесте немедленно передается оценивающей программе. Оценивающая программа может либо вернуть признак продолжения тестирования, либо вернуть балл за тестирование, в этом случае дальшейшее тестирование решения участника не проводится.

Каждое сообщение, пересылаемое интерактивной оценивающей программе, заканчивается символом перехода на новую строку. Длина сообщения не превышает 511 символов, включая символ перехода на новую строку \n. В сообщении отсутствуют управляющие символы с кодами 0-31 и 127.

Ответ интерактивной оценивающей программы должен заканчиваться символом перехода на новую строку \n. Длина сообщения не должна превышать 511 символов, включая символ перехода на новую строку \n. В сообщении должны отсутствовать управляющие символы с кодами 0-31 и 127.

При запуске интерактивной оценивающей программы ей посылается сообщение "-1\n".

После завершения тестирования на очередном тесте оценивающей программе посылается сообщение "R S T\n" (см. выше). Если тестирование должно быть продолжено на следующих тестах, оценивающая программа должна ответить сообщением "-1\n". Если тестирование должно быть продолжено на следующих тестах, но некоторые тесты можно пропустить, так как они не повлияют на выставляемый балл, оценивающая программа должна ответить сообщением "-T\n", где T - номер теста, к которому следует перейти. Если тестирование должно быть завершено, оценивающая программа должна ответить сообщением с выставленной оценкой, как описано выше.

Если больше тестов нет, канал закрывается (таким образом оценивающая программа получит признак конца файла на стандартном потоке ввода), на что она должна ответить сообщением с выставленной оценкой.

На каждое сообщение оценивающая программа должна ответить не более, чем за 100 мс астрономического времени.

Интерактивные оценивающие программы поддерживаются, начиная с версии 2.3.26.

Стандартные оценивающие программы

Реализация стандартных оценивающих программ находится в экспериментальной стадии.

  • gvaluer - оценка по группам тестов в соответствии с конфигурационным файлом