| | 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/+ внутри папки с задачей. |
| |  | Открываем +F:/DL/Data/dldata/Tasks/139114.htm+ (по номеру задачи) и добавляем строчку со ссылкой на файл: |
| | | Открываем +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}} полностью игнорируются (файлы копируются без переименования) |
 | | *- Разархивация {{zip}} ({{D:\DelTA\Arc\pkunzip <archive>}}) имеет проблемы в работе - лучше использовать {{rar}} ({{D:\DelTA\Arc\UnRar x <archive>}}): |
| | | *- Для разархивации вместо устарелых архиваторов из ({{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) |