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

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

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

Version 2+

Программа переписана на Python. Поддерживается компиляция в EXE (проверено на WinXP и Linux) и проверка текущей конфигурации запуском на примерах (автоматически на виртуальных файлах и вручную на сгенерированных).

Все итерации программы (включая исходный код и скомпилированные релизы) можно найти на GitHub.

На странице проекта также есть инструкция по оффлайн-настройке VM с Windows XP для компиляции приложений на Python (до v3.4.4 включительно).

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) - Ошибка/новая особенность - Свяжитесь с Администраторами