Просмотр источника
h1. Установка задач с открытыми тестами
[Пример установки задачи с открытыми тестами|#sample] [Известные проблемы|#problems] h2. {anchor:sample}Пример установки задачи с открытыми тестами Пишется чекер, как к стандартной задаче на программирование (см. [здесь|http://dl.gsu.by/doc/use/programmers_task.htm]). Далее делается файл *task.cfg* (см. [здесь|http://dl.gsu.by/doc/use/taskcfg.htm]) следующего содержания: {noformat:title=task.cfg} OUTPUT = FILE(tiny.out) INPUT = FILE(tiny.in) MEM_LIMIT = 268435456 TYPE = OPENTESTS OPENTESTS = tiny.o%s CHECKER = 1 TESTS_BEGIN 20 20 20 20 20 TESTS_END {noformat} * убран +COUNT_BY+ и т.п. * установлен +TYPE = OPENTESTS+ * задан формат имени выходного файла +OPENTESTS+ ( +%s+ соответствует номеру файла: +tiny.o3+ ) * включён чекер: +CHECKER = 1+ Помещаем его и чекер в папку задачи, делаем архив input.rar со входными файлами (переименованными согласно условию) и помещаем его в подпапку +webfiles/+ внутри папки с задачей. Открываем +dldata/Tasks/139114.htm+ (по номеру задачи) и добавляем строчку со ссылкой на файл: {code:title=139114.html} ... <p><pre> <a href="webfiles/input.rar">Загрузить тесты< /a> < /pre>< /p>< /body>< /html> {code} Установленная в примере задача находится [здесь|http://dl.gsu.by/task.jsp?nid=1040077&cid=168]. h2. {anchor:problems}Известные проблемы * При наличии в {{task.cfg}} опции +TIME_LIMIT+ (и, возможно, +COUNT_BY+) задача не обрабатывается как задача с открытыми тестами, и пытается компилировать отправляемые архивы) * При наличии опечатки в {{task.cfg}} тестирование может зависнуть * Обнаружено путём отладки задачи [12_IOI_d1t1 - "Pebbling Odometer"|http://dl.gsu.by/task.jsp?nid=1121896&cid=168] *- Подготовка к тестированию (удаление файла checker.exe, копирование содержимого входной директории) выполняется в {{tempdir/<time>/}}, а копирование файла вывода и чекера (и его запуск) - в {{cache/}} *-- Как следствие, задачи с несколькими входными файлами (+INPUT = DIRECTORY+) с открытыми тестами не тестируются *--- Костыль - заархивировать директории ({{1.in/}}, {{2.in/}} и т.д.) в файлы ({{1.in}}, {{2.in}} и т.д.), а чекером запускать какой-нибудь unpack.bat (примеры: [zip|http://dl.gsu.by/images/agulenko/unpack_zip.bat], [rar|http://dl.gsu.by/images/agulenko/unpack_rar.bat]; subtask.cfg - файл, присутствующий в тестах, и его следует каждый раз удалять; запуск: {{unpack.bat 1.in}}) *-- Очевидно, в ранее установленных задачах с открытыми тестами всегда был один входной файл, а не директория (и он копировался вместе с пользовательским файлом вывода) *- Имена файлов в опциях +INPUT+ и +OUTPUT+ в {{task.cfg}} полностью игнорируются (файлы копируются без переименования) *- Для разархивации вместо устарелых архиваторов из ({{DelTA\Arc}}) лучше использовать ({{DelTA\ext\unpack.cmd}}) со свежим {{7z.exe}}, который поддерживает все форматы (zip 1 и 2, rar 4 и 5). *-- обрабатываются только архивы, имеющие расширение {{.zip}} (если дать ему файл {{1.in}}, архиватор попытается обработать файл {{1.in.zip}}) *-- при распаковке расширения файлов +без причины или отражения в логе+ обрезаются до 3 (трёх) символов ({{input0.grid \-> input0.gri}}) * Чекер запускается Limiter'ом с фиксированными ограничениями по времени и по памяти *- чекер может не успеть обработать большие тесты (особенно если их нужно распаковывать) *- чекеры на Java на больших тестах могут вылетать с ACCESS_VIOLATION (предположительно превышение Memory Limit) |