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

Ключ
Эти линии были удалены. Это слово было удалено.
Эти линии были добавлены. Это слово было добавлено.

Просмотр истории страницы


Есть 3 изменений. Просмотреть первое изменение .

 h1. TaskConv: конвертор групповых тестов
  
 h2. _Version 2+_
  
h2. _Version 2\+_
  
 Программа переписана на Python. Поддерживается компиляция в EXE (проверено на WinXP и Linux) и проверка текущей конфигурации запуском на примерах (автоматически на виртуальных файлах и вручную на сгенерированных).
  
 Все итерации программы (включая исходный код и скомпилированные релизы) можно найти [на GitHub|https://github.com/LeXofLeviafan/TaskConv/releases].
  
 На странице проекта также есть [инструкция по оффлайн-настройке VM с Windows XP для компиляции приложений на Python (до v3.4.4 включительно)|https://github.com/LeXofLeviafan/TaskConv/wiki/Python-compilation-to-executable-on-Windows-XP-(offline)].
  
 h2. _Version 1.2.1_
  
 ([История версий|TaskConv - история версий])
  
 Программа переписана на Java. Для её работы требуется Java 7.
  
 h2. Применение
  
 *{_}Применение._* Программа [TaskConv|http://dl.gsu.by/images/agulenko/TaskConv-1.2.1.zip] (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 не установлено, считается, что аргумент задаёт его
 - иначе аргумент лишний и программа откажется работать.
 Таким образом, можно просто запустить программу как
 {code}
 TaskConv path/to/taskdir path/to/workdir
 {code}
  
 *{_}Поведение._* {{TaskConv}} работает следующим образом:
 * обрабатывается список параметров (если параметр задан больше одного раза, происходит аварийное завершение программы);
  
 * считывается конфигурация из файла {{.cfg}} и директории {{DB}}, которые должны находиться в рабочей папке ({{.cfg}} опционален);
  
 * программа пытается определить тип задачи (задач) по количеству подходящих к шаблону входных и выходных файлов (их число и значения переменных должны совпадать с ними же у выходных, если не задана опция {{\-i}}; при использовании {{\-l}} тип не определится, если хотя бы одна папка на указанном уровне не содержит правильной задачи данного типа -- кроме того, задачи без выходных файлов нужно обрабатывать отдельно);
  
 * если подошло больше одного типа программа предлагает выбор пользователю (для каждой задачи указано количество найденных тестов, варианты предлагаются в нисходящем порядке), если не задана опция {{\-a}} (в этом случае автоматически выбирается вариант *[1]* -- с наибольшим количеством);
  
 * в случае успешного определения типа формата задачи входные и выходные файлы копируются (перемещаются) в соответствующие директории вывода (они создаются если не существуют), попутно составляется список тестов по группам (для каждой задачи);
  
 * после перемещения (т.е. если указан {{\-m}}, но не указан {{\-k}}) папка задачи рекурсивно очищается от пустых директорий;
  
 * список тестов выводится (для каждой задачи) в выходной файл программы (см. {{\-o}}) в формате, подходящем для занесения в task.cfg (стоимость каждого теста считается за 1 балл).
  
 h2. Настройка
  
 *{_}Конфигурация._* Типы формата задачи описаны в файлах, помещённых в папку {{DB}}. В первой строке описан шаблон пути входного файла, во второй -- соответствующего выходного. Шаблон представляет собой путь к файлу из папки задачи, в котором части пути, различающиеся для разных тестов, обозначены метками\-_переменными_.
  
 Каждая переменная заключается в фигурные скобки, предваряемые знаком <{{$}}> ({{$\{переменная\}}}). Исключением могут быть переменные, обозначающие номер теста в группе (если в группе из одного теста этот номер не указывается, переменная заключается в квадратные скобки - {{$\[переменная\]}}).
 Распознаются следующие переменные:
 * {{TaskName}} \- имя задачи (одинаково для всех тестов в группе);
 * {{S}} \- номер группы тестов (обязательно должен присутствовать в пути или номере теста);
 * {{SS}} \- номер теста в группе;
 * {{SL}} \- буква теста в группе (нумерация латиницей).
  
 На случай неправильного определения {{TaskName}} предусмотрена возможность жёсткого фиксирования его значения (см. {{\-n}}); также, программа считает, что в {{TaskName}} могут входить только символы, указанные в первой строке файла {{.cfg}} (именно для этого он и предназначен) - по умолчанию это все буквы латиницы.
 Проверка шаблона выполняется регистронечувствительно. Разделитель файлов всегда '/'.
  
 h2. Дополнительно
  
 *{_}Примеры._* Пример файла шаблона для задачи с олимпиады IOI:
 {code:title=DB/IOI}
 ${TaskName}-test/subtask${S}/grader.in.${SS}
 ${TaskName}-test/subtask${S}/grader.expect.${SS}
 {code}
 То есть, если задача называется 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:
 {code:title=DB/CEOI}
 ${TaskName}${S}$[SL].in
 ${TaskName}${S}$[SL].out
 {code}
 То есть, если задача называется {{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}} соответственно.
  
 Примеры запуска программы:
 {code}
 TaskConv -mql2 ../load/Baltic12 ../tasks/Baltic2012
 {code}
 Обрабатывает папку с олимпиадой, задачи которой размещены подобным образом: {{"../load/Baltic12/Day 1/sometask"}}; задачи обрабатываются и их тесты размещаются следующим образом: {{"../tasks/Baltic2012/Day 1/sometask"}}, после чего папка с задачами рекурсивно очищается от пустых папок. Вывод отсутствует, неопределённости разрешаются автоматически.
 {code}
 TaskConv -v ../../Temp/Olymp
 {code}
 Просто обрабатывает задачу в папке {{"../../Temp/Olimp"}} и копирует входные и выходные файлы в корень этой папки с соответствующими именами. Действия программы комментируются сообщениями в стандартный вывод (консоль).
  
 *{_}Исходный код{_}* программы содержится в архиве, в папке {{src}}.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами