Формат заданий
 

Версия 1.9

скачать пример пакета с заданием

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

Структура XML-файла с задачей

Название тэга
Тэг верхнего уровня
Атрибуты Комментарии
<CATS> version o (по умолчанию "1.4") Обязательный внешний тэг
<Problem>
<CATS>
  • title - заголовок задачи;
  • lang o - язык описания задачи;
  • tlimit - лимит времени на прохождения одного теста (в секундах);
  • mlimit1.1 - лимит памяти на прохождение одного теста (в мегабайтах);
  • author o - автор;
  • inputFile - имя входного файла или *STDIN1.8;
  • outputFile - имя выходного файла или *STDOUT1.8;
  • difficulty o −1.4 - авторская оценка сложности задачи в баллах от (1 до 100);
  • stdChecker o −1.4 - имя стандартной программы проверки;
  • maxPoints o 1.3 - максимальный балл за задачу, имеет приоритет перед суммой баллов по тестам
Стандартная программа проверки служит для сравнения выходного файла с файлом, содержащим ответ теста. Перечень стандартных программ проверки:
  • nums - проверяет совпадение целых чисел (4 байта - long int);
  • floats2 - проверяет совпадение вещественных чисел (10 байт - long double);
  • strs - проверяет совпадение строк до 256 символов;
  • longnums - проверяет совпадение длинных целых чисел (до 10000 цифр);
  • longstrs - проверяет совпадение длинных строк (до 10000 символов);
Начиная с версии 1.4, вместо атрибута stdChecker рекомендуется пользоваться тегом <Import> с использованием следующих стандартных guid:
  • std.nums - проверяет совпадение последовательностей 32-битных целых чисел;
  • std.longnums - проверяет совпадение последовательностей беззнаковых целых чисел произвольной длины;
  • std.floats<n>, где n от 2 до 5 -- проверяет совпадение вещественных чисел с точностью до n знаков;
  • std.strs - проверяет совпадение наборов строк произвольной длины.
<Keyword>
<Problem>
  • code - код ключевого слова
Код ключевого слова должен быть известен системе
<ProblemStatement>
<Problem>
  • attachment o 1.9 -- идентификатор объекта <Attachment>;
  • url o 1.9 -- произвольный URL;
Описание условия задачи в формате STML. Если указан атрибут attachment или url, текст задачи заменяется ссылкой.
<ProblemConstraints>
<Problem>
  Описание ограничений на входные данные задачи в формате STML
<InputFormat>
<Problem>
  Описание формата входного файла в формате STML
<OutputFormat>
<Problem>
  Описание формата выходного файла в формате STML.
<JsonData>1.7
<Problem>
  Дополнительные данные к задче в формате JSON. Рекомендуется использовать тэг <include>.
<Explanation>1.5
<Problem>
  • attachment o 1.9 -- идентификатор объекта <Attachment>;
  • url o 1.9 -- произвольный URL;
Разбор задачи в формате STML. Если указан атрибут attachment или url, текст разбора заменяется ссылкой.
<Checker>
<Problem>
  • name - идентификатор объекта <Checker> (произвольная текстовая строка);
  • src o - путь к файлу с исходным кодом;
  • de_code o - код среды разработки;
  • style o 1.2 -- формат параматров, может принимать значения:
    • "legacy" -- параметры input answer output, значение по умолчанию для совместимости со старыми задачами
    • "testlib" -- параметры input output answer, для совместимости с библиотекой testlib. Рекомендуется использовать в новых задачах.
    • "partial" -- параметры аналогично testlib. Баллы за тест считываются со стандартного выхода checker'а.
  • export o 1.4 - глобальный идентификатор.
  • timeLimit o 1.7 -- лимит времени в секундах.
  • memoryLimit o 1.7 -- лимит памяти в мегабайтах.
Описание проверяющей программы. Данный тэг игнорируется, если в описании задачи присутствует атрибут stdChecker. "src" - задает путь к файлу, относительно корня архива. Допускается использование вложенных каталогов. Регистр пути к файлу должен совпадать с регистром имен файлов в архиве. Перечень стандартных кодов сред разработки:
  • 11.2 - None (h;inc)
  • 21.6 - Answers in zip (zip)
  • 101 - Cross-platform C/C++ compiler (cpp;c)
  • 102 - GNU C++ (cc;cxx)
  • 103 - MS Visual C++ (cpp;c)
  • 104 - Borland C++ 3.1 (cpp;c)
  • 105 - GNU C (c)
  • 201 - Borland Pascal 7.0 (pas)
  • 202 - Free Pascal (pp)
  • 203 - Borland Delphi (dpr)
  • 301 - Quick Basic (qb) (поддерживается не полностью)1.1
  • 302 - Free Basic (bas) 1.4
  • 401 - Java (java)1.3
  • 402 - C# (cs)1.6
  • 501 - Perl (pl)1.4
  • 502 - Python (py)1.6
  • 503 - Haskell (hs)1.6
  • 504 - Ruby (rb)1.6
Если код среды разработки не указан, то он определяется по расширению файла, в порядке приоритета, заданного списком стандартных кодов сред разработки.

Код возврата прооверяющей программы: 0 -- OK, 1 -- WA, 2 -- PE, 3 -- Internal error.

<Picture>
<Problem>
  • name -- идентификатор объекта <Picture> (произвольная текстовая строка);
  • src o -- путь к файлу с изображением.
Описание картинки, встраиваемой в текст задачи.
<Attachment>1.6
<Problem>
  • name -- идентификатор объекта <Attachment> (произвольная текстовая строка);
  • src -- путь к файлу вложением.
Произвольный файл, доступный для скачивания из текста задачи.
<Solution>
<Problem>
  • name -- идентификатор объекта <Solution>;
  • src o -- путь к файлу с исходным кодом;
  • de_code o -- код среды разработки.
  • export o 1.4 -- глобальный идентификатор.
  • timeLimit o 1.7 -- лимит времени в секундах. По умолчанию совпадает с лимитом задачи.
  • memoryLimit o 1.7 -- лимит памяти в мегабайтах. По умолчанию совпадает с лимитом задачи.
Описание эталонного решения.
<Generator>
<Problem>
  • name -- идентификатор объекта <Generator>;
  • src o -- путь к файлу с исходным кодом;
  • de_code o -- код среды разработки;
  • outputFile o 1.2 -- имя выходного файла или *STDOUT;
  • export o 1.4 -- глобальный идентификатор.
  • timeLimit o 1.7 -- лимит времени в секундах.
  • memoryLimit o 1.7 -- лимит памяти в мегабайтах.
Описание генератора тестов. Генератор должен создать файл, имя которого заданно в атрибуте outputFile. Этот файл используется в качестве исходных данных в теге <In>. По умолчанию имя файла должно совпадать со значением атрибута inputFile тега <Problem>. Специальное значение outputFile="*STDOUT" означает, что генератор выдаёт тест на стандартный вывод.
Для групповых генераторов атрибут outputFile может содержать контекстные переменные1.5, обозначающие номер теста, а также шаблоны поиска файлов 1.9 '?' и '*'. Например, для генератора, создающего файлы t01, t02, ..., t50 в подкаталогах subtask1, subtask2, ...:
      <Generatore name="gen" src="gen.pas" outputFile="subtask?/t%0n" />
      <Test rank="1-50" > <In use="gen" genAll="1"> ...
<GeneratorRange>1.2
<Problem>
  • from -- порядковый номер первого генератора;
  • to -- порядковый номер последнего генератора;
  • name -- идентификатор объекта <Generator>;
  • src o -- путь к файлу с исходным кодом;
  • de_code o -- код среды разработки.
  • outputFile o 1.2 -- имя выходного файла или "*STDOUT".
  • export o 1.4 -- глобальный идентификатор.
  • timeLimit o 1.7 -- лимит времени в секундах.
  • memoryLimit o 1.7 -- лимит памяти в мегабайтах.
В атрибутах name, src и export тега <GeneratorRange> допускается использование контекстных переменных, обозначающих номер текущего генератора. Например:
<GeneratorRange from="1" to="10" name="g%0n" src="gen%0n.pas"/>
<Visualizer>1.9
<Problem>
  • name -- идентификатор объекта <Visualizer>;
  • src o -- путь к файлу с исходным кодом;
  • de_code o -- код среды разработки, рекомендуется использовать код 1;
  • export o -- глобальный идентификатор.
Визуализатор тестовых данных.
<Test>
<Problem>
Содержит описание тестов. В задаче должны присутствовать тесты со значениями rank от 1 до некоторого N. Если ни одного теста нет, то любое компилируемое решение будет принято как верное. Начиная с версии 1.5 в атрибутах тегов <In> и <Out>, вложенных в <Test>, можно использовать контекстные переменные, обозначающие номер теста. Например:
<Test rank="1-10">
  <In src="%0n.in"/><Out use="solution"/>
</Test>
Для более экономного описания можно распределять описание теста на несколько тегов, например:
<Test rank="1-5" points="1" />
<Test rank="6-10" points="2" />
<Test rank="1-10"><Out use="sol"></Test>
При этом данные об одном тесте, указанные в различных тегах, не должны перекрываться.
<TestRange>1.1 −1.5
<Problem>
  • from -- порядковый номер первого теста;
  • to -- порядковый номер последнего теста;
  • points o -- количество баллов за каждый тест диапазона.
Начиная с версии 1.5, рекомендуется использовать тег <Test>.
В атрибутах тегов <In> и <Out>, вложенных в <TestRange>, можно использовать контекстные переменные, обозначающие номер теста. Например:
<TestRange from="1" to="10">
  <In src="%0n.in"/><Out use="solution"/>
</TestRange>
<In>
<Test>
, <TestRange>1.1
  • use o -- идентификатор объекта <Generator>;
  • param o -- параметры, передаваемые генератору тестов при запуске;
  • src o -- путь к входному файлу теста (если не указан атрибут use).
  • genAll o 1.5 -- использовать групповую генерацию.
Описание входного файла теста. Если указан атрибут "use", то входной файл теста будет получен путём запуска генератора тестов.
<Out>
<Test>
, <TestRange>1.1
  • use o -- идентификатор объекта <Solution>;
  • src o -- путь к выходному файлу теста (если не указан атрибут use).
Если указан атрибут "use", то выходной файл теста будет получен путём запуска эталонного решения.
<Testset>1.5
<Problem>
Содержит описание тестового набора. При подключении задачи к турниру можно указать тестовые наборы, которые будут использоваться для проверки. По умолчанию используются все имеющиеся в пакете тесты. Если указано количество баллов за набор тестов, то баллы начисляются только в случае, когда все тесты из набора пройдены. Допустимо смешивать наборы и независимые тесты, а также указывать в пакете пререкрывающиеся наборы. Тест не должен принадлежать нескольким оценённым, зависимым и/или скрытым наборам, использующимся одновременно.
<Module>1.2
<Problem>
  • name -- идентификатор объекта <Module>;
  • src -- путь к файлу с исходным кодом;
  • de_code o -- код среды разработки.
  • type -- вид модуля (generator, checker, solution).
  • export o 1.4 -- глобальный идентификатор.
Описание модуля. Файлы модулей распаковываются и компилируются вместе с каждым объектом соответствующего вида. Для модулей, отдельная компиляция которых не требуется, следует указывать среду разработку "None" (de_code="1"). Порядок компиляции модулей совпадает с порядком перечисления в файле описания задачи.
<Import>1.4
<Problem>
  • guid -- глобальный идентификатор импортируемого объекта. Может содержать символ *, обозначающий произвольную подстроку.1.5
  • type o -- тип импортируемого объекта модуля (generator, checker, solution).
  • name o 1.5 -- идентификатор объекта для ссылок в текущей задаче
Импорт объекта из существующей задачи. Поиск объекта осуществляется по guid. Если указан атрибут type, проверяется соответствие типа объекта. Эффект от импорта объекта эквивалентен добавлению его копии в пакет с задачей.
<Sample>
<Problem>
  • rank -- спецификация порядковых номеров примеров (не пересекается с аналогичным атрибутом тега <Test>).
Описание демонстрационного теста. В атрибутах тегов <SampleIn> и <SampleOut>, вложенных в <Sample>, можно использовать контекстные переменные, обозначающие номер примера1.9. Например:
<Sample rank="1" to="3">
  <SampleIn src="%0n.in"/>
  <SampleOut src="%0n.out"/>
</Sample>
<SampleIn>
<Sample>
  • src o 1.6 -- путь ко входному файлу примера.
Содержит текст с примером входного файла в случае, если не указан атрибут src. Отступы и переносы задаются так же, как и в текстовом файле.
<SampleOut>
<Sample>
  • src o 1.6 -- путь к выходному файлу примера.
Содержит текст с примером выходного файла в случае, если не указан атрибут src. Отступы и переносы задаются так же, как и в текстовом файле.

Cпецификация порядковых номеров теста

Спецификация представляет собой спискок элементов, разделённых запятыми. Каждый элемент может быть:

Контекстные переменные

Имеют вид %n, %0n, что обозначает соответственно подстановку номера и номера с лидирующим нулём.

Описание формата STML (Simple Text Markup Language)

Формат STML -- упрощенное подмножество HTML. В STML определены следующие тэги:

Название тэга
Тэг верхнего уровня
АтрибутыКомментарии
<img>
  • picture -- идентификатор объекта <Picture>;
  • width o -- ширина изображения (в пикселях);
  • height o -- высота изображения (в пикселях);
  • align o -- метод выравнивание изображения
    (Может принимать значения: left - выравнивание по левому краю, right - по правому краю).
Вставка картинки.
<a>1.6
  • attachment -- идентификатор объекта <Attachment>;
Вставка ссылки на вложенный файл.
<object>1.6
  • attachment -- идентификатор объекта <Attachment>;
Вставка ссылки на вложенный файл.
<include>1.7
  • src -- имя включаемого файла; файл должен иметь ту же кодировку, что и XML;
Вставка текста из файла.
<i>   Выделение курсивом.
<b>   Выделение жирным шрифтом.
<sup>   Перевод в надстрочный индекс.
<sub>   Перевод в подстрочный индекс.
<p>   Параграф
<table>
  • border o - 1 - граница присутствует,
    0 - в противном случае (по умолчанию граница присутствует);
  • width o - ширина таблицы.
Таблица.
<tr>
<table>
  Ряд таблицы
<td>
<tr>
  Ячейка таблицы
<th>
<tr>
  Заголовок таблицы

Для любого тега внутри STML имеется возможность использовать атрибут cats-if, значением которого является условие относительно тегов задачи.

Условие состоит из набора выражений, разделённых запятой. Каждое выражение имеет вид name, !name, name=value или !name=value, где знак ! обозначает отрицание, name -- имя тега, value -- значение тега.

o Атрибуты, помеченные этим знаком, являются необязательными.

1.1 Данная возможность присутствует начиная с версии 1.1.

1.2 Данная возможность присутствует начиная с версии 1.2.

1.3 Данная возможность присутствует начиная с версии 1.3.

1.4 Данная возможность присутствует начиная с версии 1.4.

1.5 Данная возможность присутствует начиная с версии 1.5.

1.6 Данная возможность присутствует начиная с версии 1.6.

1.7 Данная возможность присутствует начиная с версии 1.7.

1.8 Данная возможность присутствует начиная с версии 1.8.

1.9 Данная возможность присутствует начиная с версии 1.9.

−1.4 Данная возможность считается устаревшей начиная с версии 1.4.

−1.5 Данная возможность считается устаревшей начиная с версии 1.5.

  Кафедра информатики, математического и компьютерного моделирования  
Дальневосточный федеральный университет