Установка задач по программированию

Также доступна следующая связанная более пространная документация:

Возможны два случая: ответ в задаче однозначный или не всегда.

1)      Для автоматического тестирования необходимо иметь тесты - пары файлов. Файл 1.in - файл ввода для программы, а 1.out - правильный ответ. Второй тест - файлы 2.in и 2.out и т.д. Рекомендуемое число тестов - от 6 до 12. Маленькое число тестов не позволяет качественно оценить решение, а большое - замедляет процесс тестирования. Тесты следует располагать в порядке их усложнения. Множество тестов должно содержать крайние случаи, максимальный тест, и несколько "средних" по сложности. В файле task.cfg, должны быть указаны имена входных и выходных файлов, время на тест (одно число на все тесты, рекомендуется от 2 до 30 секунд), количество балов за каждый тест (см. пункт 2).

2)       В случае неоднозначного ответа или необходимости оценки неполного решения, кроме перечисленного выше, необходима специальная программа - чекер, которая должна оценивать правильность или некоторое приближение к оптимальному решению. Она будет запускаться для каждого теста с параметрами:

checker.exe <входной файл> <правильный выходной файл> <выходной файл участника> <максимальное количество баллов за тест>


Чтобы для проверки использовался чекер необходимо внести нужную запись в task.cfg.

После выполнения чекера в первой стоке файла $result$.txt должно быть количество баллов за тест, во второй желательно указать комментарии.

Пример:

запуск checker.exe 1.in 1.out output.txt 100

После чего файл $result$.txt содержит следующее:

0
Wrong answer.
Чекер обязательно должен иметь имя checker.exe и должен быть расположен в каталоге задаче вместе с тестами.

Если для проверки чекеру не требуется правильных ответов, то файлов *.out может не быть, но в строке параметров по-прежнему будет указываться имя файла правильного ответа.

См. пример исходного текста чекера.

См. пример исходного текста чекера c проверкой на существование всех нужных файлов.

См. пример исходного текста чекера на DelphiОбратите внимание на строку {$APPTYPE CONSOLE}. Если чекер вылетает, то без неё тестирование будет значительно замедлено.

Пример содержимого каталога задачи:

 

TASK.CFG                файл конфигурации задачи

CHECKER.EXE             запускаемый файл чекера

CHECKER.PAS             исходный текст чекера

1.IN                    входной файл для первого теста

2.IN                    входной файл для второго теста

3.IN                    входной файл для третьего теста

4.IN                    входной файл для четвертого теста

5.IN                    входной файл для пятого теста

1.OUT                   выходной файл для первого теста

2.OUT                   выходной файл для второго теста

3.OUT                   выходной файл для третьего теста

4.OUT                   выходной файл для четвертого теста

5.OUT                   выходной файл для пятого теста

SOLUTION.PAS            авторское решение задачи


Также, вместо файлов 1.in, 2.in, ... N.in и 1.out, 2.out ... N.out можно положить архив tests.rar(скачать пример), в корне которого должны находиться эти же файлы. Данный способ установки рекомендуется для задач с большими тестами.


Следует отметить, что чекеры на Российских студенческих и школьных олимпиадах обычно используют специализированную библиотеку testlib, разработанную командой питерских олимпиадников. Чтобы упростить процесс установки на DL архивов с российских олимпиад, была произведена адаптация библиотеки к формату DL. Достаточно положить библиотеку рядом с иходником российского чекера и перекомпилировать его, чтобы получить версию, правильно работающую с DL. Модифицированную версию testlib всегда можно найти в каталоге \\DL_SERVER\dldata\Archives\_testlib\ или скачать отсюда или для C++.

Внимание: имеющаяся версия тестирующей системы DelTA крайне негативно воспринимает любые попытки чекеров вывода на экран. Поэтому необходимо исключать все такие возможности, как, например, отладочный вывод или сообщение о блокировке выходного файла.
Также системой в штыки воспринимается ненулевой код возврата. Поэтому ни в коем случае нельзя оставлять недомодифицированную оригинальную российскую версию testlib, которая использует код возврата для сообщения об ошибках.