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)