Рабочий стол > DL Руководство пользователя > ... > Конвертор групповых тестов > TaskConv-1.0 > Просмотр
TaskConv-1.0 Войти | Зарегистрироваться   Просмотр версии для печати текущей страницы.

Добавлено Гуленко Алексей, последний раз изменено Гуленко Алексей Aug 28, 2013
Метки: 
(нет)

TaskConv: конвертор групповых тестов

Version 1.0

Применение

Применение. Программа TaskConv (Task Convertor) запускается из командной строки и принимает следующие параметры:

  • -h (--help) - программа выводит краткую справку по параметрам ввода и завершает работу (также выполняется при неправильно заданных параметрах);
  • -v (--verbose) - программа выводит в консоль информацию о выполняемых действиях (используется для контроля работы программы в случае ошибки);
  • -q (--quiet) - по эффекту противоположно -v (если используются обе опции, эффективна лишь последняя из введённых), отменяет вывод в консоль (по умолчанию выводятся название обрабатываемой папки и сообщение в случае ошибки);
  • -m (--move) - файлы перемещаются без сохранения оригиналов (по умолчанию они копируются);
  • -t (--type) TaskType - уточняет имя типа формата задачи (при определении типа программа игнорирует те, которые не начинаются с TaskType; подробнее о типах см. Конфигурация);
  • -o (--output) OutFile - изменяет имя выходного файла программы (по умолчанию marks.tmp);
  • -n (--name) TaskName - фиксирует значение TaskName (см. Конфигурация);
  • -d (--directory) TaskDir - задаёт путь к папку с конвертируемой задачей (обязательный параметр).

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

Поведение. TaskConv работает следующим образом:

  • обрабатывается список параметров (если один параметр с аргументом задан дважды, происходит аварийное завершение программы);
  • считывается конфигурация из файла .cfg и директории DB, которые должны находиться в рабочей папке;
  • программа пытается определить тип задачи по количеству подходящих к шаблону входных и выходных файлов (чем больше входных файлов, тем лучше; их число должно совпадать с числом выходных);
  • в случае успешного определения типа формата задачи входные и выходные файлы переименуются, попутно составляется список тестов по группам;
  • список тестов выводится в выходной файл программы (см. -o) в формате, подходящем для занесения в task.cfg (стоимость каждого теста считается за 1 балл).

Настройка

Конфигурация. Типы формата задачи описаны в файлах, помещённых в папку DB. В первой строке описан шаблон пути входного файла, во второй - соответствующего выходного. Шаблон представляет собой путь к файлу из папки задачи, в котором части пути, различающиеся для разных тестов, обозначены метками-<переменными>.

Каждая переменная заключается в фигурные скобки, предваряемые знаком <$> (${переменная}). Исключением могут быть переменные, обозначающие номер теста в группе (если в группе из одного теста этот номер не указывается, переменная заключается в квадратные скобки - $[переменная]).
Распознаются следующие переменные:

  • TaskName - имя задачи;
  • S - номер группы тестов;
  • SS - номер теста в группе;
  • SL - буква теста в группе (нумерация латиницей).

TaskName определять сложнее всего и, в случае неправильно составленного шаблона, оно может быть определено неправильно. Во избежание подобных ситуаций добавлена возможность жёсткого фиксирования его значения (см. -n); также, программа считает, что в TaskName могут входить только
символы, указанные в первой строке файла .cfg (именно для этого он и предназначен) - по умолчанию это все буквы латиницы.

Дополнительно

Примеры. Пример файла шаблона для задачи с олимпиады IOI:

DB/IOI
${TaskName}-test/subtask${S}/grader.in.${SS}
${TaskName}-test/subtask${S}/grader.expect.${SS}

То есть, если задача называется race, то её тесты размещены в подпапке race-test; если у задачи 4 группы тестов, то внутри race-test лежат папки subtask1, subtask2, subtask3 и subtask4; если в первой группе 3 теста, то в папке race-test/subtask1 лежат файлы grader.in.1, grader.in.2, grader.in.3, grader.expect.1, grader.expect.2 и grader.expect.3; эти файлы будут скопированы (перемещены) в корень папки задачи с именами 1.in, 2.in, 3.in, 1.out, 2.out и 3.out соответственно, а в строки с 1 по 3 выходного файла программа выведет числа -1, -1 и 1 соответственно.

Пример файла шаблона для задачи с олимпиады CEOI:

DB/CEOI
${TaskName}${S}$[SL].in
${TaskName}${S}$[SL].out

То есть, если задача называется bal, имеет 5 групп тестов с номерами 0-4, в группах с номерами 0-2 один тест, а в остальных по два, то файлы тестов будут находиться в корне папки задачи и иметь названия bal0.in, bal0.out, bal1.in, bal1.out, bal2.in, bal2.out, bal3a.in, bal3a.out, bal3b.in, bal3b.out, bal4a.in, bal4a.out, bal4b.in и bal4b.out; эти файлы будут переименованы в 1.in, 1.out, 2.in, 2.out, 3.in, 3.out, 4.in, 4.out, 5.in, 5.out, 6.in, 6.out, 7.in и 7.out соответственно, а в выходной файл программа выведет числа 1, 1, 1, -1, 1, -1 и 1 соответственно.

Исходный код программы содержится здесь.

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами