Установка задач с открытыми тестами
Пример установки задачи с открытыми тестами
Известные проблемы
Пример установки задачи с открытыми тестами
Пишется чекер, как к стандартной задаче на программирование (см. здесь).
Далее делается файл task.cfg (см. здесь) следующего содержания:
- убран COUNT_BY и т.п.
- установлен TYPE = OPENTESTS
- задан формат имени выходного файла OPENTESTS ( %s соответствует номеру файла: tiny.o3 )
- включён чекер: CHECKER = 1
Помещаем его и чекер в папку задачи, делаем архив input.rar со входными файлами (переименованными согласно условию) и помещаем его в подпапку webfiles/ внутри папки с задачей.
Открываем F:/DL/Data/dldata/Tasks/139114.htm (по номеру задачи) и добавляем строчку со ссылкой на файл:
...
<p><pre>
<a href="webfiles/input.rar">Загрузить тесты< /a>
< /pre>< /p>< /body>< /html>
Установленная в примере задача находится здесь.
Известные проблемы
- Обнаружено путём отладки задачи 12_IOI_d1t1 - "Pebbling Odometer"
- Подготовка к тестированию (удаление файла checker.exe, копирование содержимого входной директории) выполняется в tempdir/<time>/, а копирование файла вывода и чекера (и его запуск) - в cache/
- Как следствие, задачи с несколькими входными файлами (INPUT = DIRECTORY) с открытыми тестами не тестируются
- Костыль - заархивировать директории (1.in/, 2.in/ и т.д.) в файлы (1.in, 2.in и т.д.), а чекером запускать какой-нибудь unpack.bat (примеры: zip, rar; subtask.cfg - файл, присутствующий в тестах, и его следует каждый раз удалять; запуск: unpack.bat 1.in)
- Очевидно, в ранее установленных задачах с открытыми тестами всегда был один входной файл, а не директория (и он копировался вместе с пользовательским файлом вывода)
- Имена файлов в опциях INPUT и OUTPUT в task.cfg полностью игнорируются (файлы копируются без переименования)
- Разархивация zip (D:\DelTA\Arc\pkunzip <archive>) имеет проблемы в работе - лучше использовать rar (D:\DelTA\Arc\UnRar x <archive>):
- обрабатываются только архивы, имеющие расширение .zip (если дать ему файл 1.in, архиватор попытается обработать файл 1.in.zip)
- при распаковке расширения файлов без причины или отражения в логе обрезаются до 3 (трёх) символов (input0.grid -> input0.gri)
- Чекер запускается Limiter'ом с фиксированными ограничениями по времени и по памяти
- чекер может не успеть обработать большие тесты (особенно если их нужно распаковывать)
- чекеры на Java на больших тестах могут вылетать с ACCESS_VIOLATION (предположительно превышение Memory Limit)