| h1. TaskConv: конвертор групповых тестов |
| |
| | Текущая версия: [TaskConv-1.2.1] |
| |
| | h2. Применение |
| | h2. Старые версии |
| * [TaskConv-1.0] |
| |
| | *{_}Применение._* Программа [TaskConv|http://dl.gsu.by/images/agulenko/TaskConv.rar] (Task Convertor) запускается из командной строки и принимает следующие параметры: |
| * {{\-h}} ({{\--help}}) - программа выводит краткую справку по параметрам ввода и завершает работу (также выполняется при неправильно заданных параметрах); |
| | h2. ChangeLog |
| |
| | * {{\-v}} ({{\--verbose}}) - программа выводит в консоль информацию о выполняемых действиях (используется для контроля работы программы в случае ошибки); |
| | * 2013/08/27 v1.2.1 |
| *- Исправлен баг {{runtime exception}} из-за разделителя Windows. |
| *- Исправлены запутывающие сообщения. |
| *- {{\--clean}} заменён на {{\--keep}}, очистка выполняется по умолчанию; использование {{\--keep}} без {{\--move}} не вызывает ошибки. |
| *- Добавлена опция {{\--level}} для одновременной обработки группы задач одного типа. |
| |
| | * {{\-q}} ({{\--quiet}}) - по эффекту противоположно {{\-v}} (если используются обе опции, эффективна лишь последняя из введённых), отменяет вывод в консоль (по умолчанию выводятся название обрабатываемой папки и сообщение в случае ошибки); |
| | * 2013/08/25 v1.2 |
| *- Код полностью переписан на {{Java}}. |
| *- Исправлено определение типа, исправлен баг неправильного определения типа. |
| *- Изменено значение опции {{\--outfile}} по умолчанию. |
| *- Предоставлена возможность выбора типа пользователем при определении нескольких вариантов, добавлена опция {{\--auto}} для сохранения старого поведения. |
| *- Добавлена опция {{\--workdir}} для изменения директории вывода. |
| *- Добавлена опция {{\--clean}} для очистки от пустых поддиректорий после перемещения файлов из них. |
| |
| | * {{\-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 балл). |
| |
| 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}} соответственно. |
| |
| _*Исходный код*_ программы содержится [здесь|http://dl.gsu.by/images/agulenko/taskconv.pas]. |
| | * 2013/08/22 v1.1 |
| *- Добавлена опция {{\--infilesonly}} для задач без выходных файлов. |
| *- Исправлен баг ошибки доступа при неправильном определении типа. |