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

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

Вы просматриваете старую версию (v. 1) этой страницы.
Последняя версия - v. 3 , последнее редактирование Aug 28, 2013 (просмотр отличий | )
просмотр истории страницы | просмотр следующей версии >>

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

Version 1.2.1

Программа переписана на Java. Для её работы требуется Java 7.

Применение

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

  • -h (--help) - программа выводит краткую справку по параметрам ввода и завершает работу (также выполняется при неправильно заданных параметрах);
  • -a (--auto) - программа выбирает тип задачи автоматически при наличии нескольких вариантов (если опция не указана, в этой ситуации запрашивается ввод пользователя); использование -q включает эту опцию;
  • -v (--verbose) - программа выводит в консоль информацию о выполняемых действиях (используется для контроля работы программы в случае ошибки);
  • -q (--quiet) - по эффекту противоположно -v (если используются обе опции, эффективна {-v}), отменяет вывод в консоль (по умолчанию выводятся название обрабатываемой папки и сообщение об ошибке/успешном завершении); также включает опцию -a;
  • -m (--move) - файлы перемещаются без сохранения оригиналов (по умолчанию они копируются);
  • -k (--keep) - после перемещения файлов (без -m опция не имеет эффекта) пустые папки не удаляются (по умолчанию выполняется рекурсивный поиск и удаление пустых папок);
  • -i (--infiles-only) - работать только со входными файлами (для задач без выходных файлов);
  • -t (--type) TaskType - уточняет имя типа формата задачи (при определении типа программа игнорирует те, которые не начинаются с TaskType; подробнее о типах см. Конфигурация);
  • -o (--output) OutFile - изменяет имя выходного файла программы (по умолчанию marks.txt);
  • -n (--name) TaskName - фиксирует значение TaskName (см. Конфигурация);
  • -d (--directory) TaskDir - задаёт путь к папку с конвертируемой задачей (обязательный параметр);
  • -l (--level) depth - задаёт глубину размещения задач при обработке группы задач (задачи должны быть одного типа);
  • -w (--workdir) WorkDir - задаёт директорию вывода (по умолчанию это папка задачи), существование директории необязательно.

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

При наличии свободных аргументов (без опций) они обрабатываются после всех опций по порядку следования, следующим образом:

  • если значение TaskDir не установлено, считается, что аргумент задаёт его
  • иначе, если значение WorkDir не установлено, считается, что аргумент задаёт его
  • иначе аргумент лишний и программа откажется работать.
    Таким образом, можно просто запустить программу как
    TaskConv path/to/taskdir path/to/workdir

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

  • обрабатывается список параметров (если параметр задан больше одного раза, происходит аварийное завершение программы);
  • считывается конфигурация из файла .cfg и директории DB, которые должны находиться в рабочей папке (.cfg опционален);
  • программа пытается определить тип задачи (задач) по количеству подходящих к шаблону входных и выходных файлов (их число и значения переменных должны совпадать с ними же у выходных, если не задана опция -i; при использовании -l тип не определится, если хотя бы одна папка на указанном уровне не содержит правильной задачи данного типа – кроме того, задачи без выходных файлов нужно обрабатывать отдельно);
  • если подошло больше одного типа программа предлагает выбор пользователю (для каждой задачи указано количество найденных тестов, варианты предлагаются в нисходящем порядке), если не задана опция -a (в этом случае автоматически выбирается вариант [1] – с наибольшим количеством);
  • в случае успешного определения типа формата задачи входные и выходные файлы копируются (перемещаются) в соответствующие директории вывода (они создаются если не существуют), попутно составляется список тестов по группам (для каждой задачи);
  • после перемещения (т.е. если указан -m, но не указан -k) папка задачи рекурсивно очищается от пустых директорий;
  • список тестов выводится (для каждой задачи) в выходной файл программы (см. -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 соответственно.

Примеры запуска программы:

TaskConv -mql2 ../load/Baltic12 ../tasks/Baltic2012

Обрабатывает папку с олимпиадой, задачи которой размещены подобным образом: "../load/Baltic12/Day 1/sometask"; задачи обрабатываются и их тесты размещаются следующим образом: "../tasks/Baltic2012/Day 1/sometask", после чего папка с задачами рекурсивно очищается от пустых папок. Вывод отсутствует, неопределённости разрешаются автоматически.

TaskConv -v ../../Temp/Olymp

Просто обрабатывает задачу в папке "../../Temp/Olimp" и копирует входные и выходные файлы в корень этой папки с соответствующими именами. Действия программы комментируются сообщениями в стандартный вывод (консоль).

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

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