| 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) |