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

ru en

Версия 1.11

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

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

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

Название тега
Тег верхнего уровня
Атрибуты Комментарии
<CATS>
  • version o — номер версии (по умолчанию "1.4").
Обязательный внешний тег.
<Problem>
<CATS>
  • title — заголовок задачи на первом языке из списка lang.
  • lang o — список разделённых запятыми1.10 (естественных) языков описания задачи.
  • tlimit — лимит времени на прохождение одного теста (в секундах).
  • mlimit1.1 — лимит памяти на прохождение одного теста (в мегабайтах или других единицах).
  • wlimit o 1.9 — лимит записи на прохождение одного теста (в мегабайтах или других единицах), по умолчанию 30.
  • author o — автор.
  • inputFile — имя входного файла или *STDIN1.8 или *NONE1.10.
  • outputFile — имя выходного файла или *STDOUT1.8 или *NONE1.10.
  • difficulty o −1.4 — авторская оценка сложности задачи в баллах от (1 до 100).
  • stdChecker o −1.4 — имя стандартной программы проверки.
  • maxPoints o 1.3 — максимальный балл за задачу, имеет приоритет перед суммой баллов по тестам.
  • saveInputPrefix o 1.9 — сохранять для каждого сгенерированного теста начальную часть не более указанной длины (в мегабайтах или других единицах).
  • saveOutputPrefix o 1.9 — сохранять для каждой попытки на каждом тесте начальную часть вывода не более указанной длины (в мегабайтах или других единицах).
  • saveAnswerPrefix o 1.9 — сохранять для каждого теста начальную часть вывода эталонного решения не более указанной длины (в мегабайтах или других единицах).
Стандартная программа проверки служит для сравнения выходного файла с файлом, содержащим ответ теста. Перечень стандартных программ проверки:
  • 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 — путь к файлу с исходным кодом.
  • de_code o — код среды разработки.
  • style o 1.2 — формат параметров, возможные значения:
    • "legacy" — параметры input answer output; значение по умолчанию для совместимости со старыми задачами.
    • "testlib" — параметры input output answer; для совместимости с библиотекой testlib. Рекомендуется использовать в новых задачах.
    • "partial" — параметры аналогично testlib. Баллы за тест считываются со стандартного выхода checker'а.
    • "multiple"1.10 — параметры аналогично testlib. Используется для соревновательных задач. В выходном файле ожидается лог контроллера. В стандартном выходе ожидается по одной строке на агента.
  • export o 1.4 — глобальный идентификатор.
  • timeLimit o 1.7 — лимит времени в секундах.
  • memoryLimit o 1.7 — лимит памяти (в мегабайтах или других единицах).
  • writeLimit o 1.9 — лимит записи (в мегабайтах или других единицах).
Описание проверяющей программы. Данный тег игнорируется, если в описании задачи присутствует атрибут 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 — путь к файлу изображения.
Описание картинки, встраиваемой в текст задачи.
<Attachment>1.6
<Problem>
  • name — идентификатор объекта <Attachment> (произвольная текстовая строка).
  • src — путь к файлу вложения.
Произвольный файл, доступный для скачивания из текста задачи.
<Solution>
<Problem>
  • name — идентификатор объекта <Solution>.
  • src — путь к файлу с исходным кодом.
  • de_code o — код среды разработки.
  • export o 1.4 — глобальный идентификатор.
  • timeLimit o 1.7 — лимит времени в секундах. По умолчанию совпадает с лимитом задачи.
  • memoryLimit o 1.7 — лимит памяти (в мегабайтах или других единицах). По умолчанию совпадает с лимитом задачи.
  • writeLimit o 1.9 — лимит записи (в мегабайтах или других единицах). По умолчанию совпадает с лимитом задачи.
Описание эталонного решения.
<Generator>
<Problem>
Описание генератора тестов. Генератор должен создать файл, имя которого задано в атрибуте outputFile. Этот файл используется в качестве исходных данных в теге <In>. По умолчанию имя файла должно совпадать со значением атрибута inputFile тега <Problem>. Специальное значение outputFile="*STDOUT" означает, что генератор выдаёт тест на стандартный вывод.
Для групповых генераторов атрибут outputFile может содержать контекстные переменные1.5, обозначающие номер теста, а также шаблоны поиска файлов 1.9 '?' и '*'. Например, для генератора, создающего файлы t01, t02, ..., t50 в подкаталогах subtask1, subtask2, ...:
      <Generator 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 — путь к файлу с исходным кодом.
  • de_code o — код среды разработки.
  • outputFile o 1.2 — имя выходного файла или "*STDOUT".
  • export o 1.4 — глобальный идентификатор.
  • timeLimit o 1.7 — лимит времени в секундах.
  • memoryLimit o 1.7 — лимит памяти (в мегабайтах или других единицах).
  • writeLimit o 1.9 — лимит записи (в мегабайтах или других единицах). По умолчанию 999.
В атрибутах name, src и export тега <GeneratorRange> допускается использование контекстных переменных, обозначающих номер текущего генератора. Например:
<GeneratorRange from="1" to="10" name="g%0n" src="gen%0n.pas"/>
<Validator>1.10
<Problem>
Валидатор тестовых данных. Считывает данные из стандартного входа и/или входного файла. Завершается с кодом 0 если файл прошёл валидацию, 1 в противном случае.
<Visualizer>1.9
<Problem>
  • name — идентификатор объекта <Visualizer>.
  • src — путь к файлу с исходным кодом.
  • de_code o — код среды разработки, рекомендуется использовать код 1.
  • export o — глобальный идентификатор.
Визуализатор тестовых данных.
<Interactor>1.9
<Problem>
Интерактор или контроллер (см. <Run>). Допускается только один интерактор на задачу.
<Linter>1.10
<Problem>
Линтер запускается либо до, либо после компиляции в зависимости от атрибута 'stage'. Линтер принимает имена исходных файлов в командной строке и завершается с ненулевым кодом возврата если исходный код не прошёл проверку. Стандартный выход линтера может содержать сообщение об ошибке. Линтер может быть импортирован по глобальному идентификатору. См. <Import>
<Run>1.9
<Problem>
  • method — форма запуска решений.
Допустимые значения атрибута method:
  • default — запуск одиночного процесса с решением.
  • interactive — одновременный запуск решения и интерактора (тег <Interactor>), взаимодействующих через стандартные потоки ввода/вывода.
  • competitive1.10 — одновременный запуск контроллера (тег <Interactor>) и нескольких решений (агентов), взаимодействующих через стандартные потоки ввода/вывода.
  • competitive_modules1.11 — одновременный запуск контроллера и нескольких решений (агентов), взаимодействующих через API в рамках одного процесса.
  • none1.11 — запуск не производится.
<Snippet>1.11
<Problem>
Фрагмент условия или теста к задаче. Может отличаться для каждого участника.
<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 — использовать групповую генерацию.
  • validate o 1.10 — идентификатор объекта <Validator>.
  • validateParam o 1.10 — аргумент командной строки для передачи в <Validator>.
  • hash o 1.10 — хеш входного файла в формате $alg$hex, где 'alg' это одно из значений 'sha' либо 'md5', и 'hex' это последовательность шестнадцатеричных цифр в нижнем регистре, представляющих значение хеша.
  • snippet o 1.11 — идентификатор объекта <Snippet>.
Описание входного файла теста.
Если указан атрибут "use", то входной файл теста будет получен путём запуска генератора тестов. Если в атрибуте "param" содержится символ "|", то для генерации используется конвейер, нaчинающийся с генератора тестов, за которым идут модули генератора. Например:
<Test rank="10"><In use="gen" param="100 | shuffle 19234"/></Test>
Если ни один из атрибутов "src" и "use" не указан, содержит текст входного файла1.9. Пробелы и переводы строк сохраняются в точности.
<Out>
<Test>
, <TestRange>1.1
  • use o — идентификатор объекта <Solution>.
  • src o — путь к выходному файлу теста (если не указан атрибут use).
Если указан атрибут "use", то выходной файл теста будет получен путём запуска эталонного решения. Если ни один из атрибутов "src" и "use" не указан, содержит текст выходного файла1.9. Пробелы и переводы строк сохраняются в точности.
<Testset>1.5
<Problem>
Содержит описание тестового набора. При подключении задачи к турниру можно указать тестовые наборы, которые будут использоваться для проверки. По умолчанию используются все имеющиеся в пакете тесты. Если указано количество баллов за набор тестов, то баллы начисляются только в случае, когда все тесты из набора пройдены. Допустимо смешивать наборы и независимые тесты, а также указывать в пакете перекрывающиеся наборы. Тест не должен принадлежать нескольким оценённым, зависимым и/или скрытым наборам, использующимся одновременно.
<Module>1.2
<Problem>
  • name — идентификатор объекта <Module>.
  • src — путь к файлу с исходным кодом.
  • fileName o 1.11 — имя создаваемого файла с исходным кодом.
  • de_code o — код среды разработки.
  • type — вид модуля (generator, checker, solution, linter).
  • export o 1.4 — глобальный идентификатор.
  • main o 1.10 — использовать этот модуль как главный файл, а отправленный код как модуль с указанным именем. Только для модулей типа 'solution'.
Описание модуля. Файлы модулей распаковываются и компилируются вместе с каждым объектом соответствующего вида. Для модулей, отдельная компиляция которых не требуется, следует указывать среду разработки "None" (de_code="1"). Порядок компиляции модулей совпадает с порядком перечисления в файле описания задачи. Если вместо атрибута src указан атрибут fileName, содержимое тега сохраняется в модуль с именем fileName.
<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-3">
  <SampleIn src="%0n.in"/>
  <SampleOut src="%0n.out"/>
</Sample>
<SampleIn>
<Sample>
  • src o 1.6 — путь ко входному файлу примера.
  • html o 1.11 — признак применимости форматирования внутри текста примера. Если не установлен, специальные символы в тексте воспроизводятся буквально.
Содержит текст с примером входного файла в случае, если не указан атрибут src. Пробелы и переводы строк сохраняются в точности.
<SampleOut>
<Sample>
  • src o 1.6 — путь к выходному файлу примера.
  • html o 1.11 — признак применимости форматирования внутри текста примера. Если не установлен, специальные символы в тексте воспроизводятся буквально.
Содержит текст с примером выходного файла в случае, если не указан атрибут src. Пробелы и переводы строк сохраняются в точности.
<Quiz>1.11
<ProblemStatement>
  • type — тип вопроса, возможные типы: text, radiogroup, checkbox, matching.
  • rank o — номер теста (см. <Test>), по умолчанию берётся порядковый номер тега.
  • points o — количество баллов за тест.
  • descr o — описание теста.
Вопрос из опроса. Если указан хотя бы один из атрибутов rank, points, descr, либо использован тег <Answer> или тег <Choice> с атрибутом correct, автоматически создаётся тест.
<Text>1.11
<Quiz>
Текст вопроса.
<Answer>1.11
<Quiz>
Правильный ответ на вопрос типа text.
<Choice>1.11
<Quiz>
  • correct o — если атрибут равен 1, вариант ответа считается правильным.
Вариант ответа на вопрос типа radiogroup или checkbox.

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.
Вставка текста из файла.
<code>
  • language1.10 — название языка программирования для подсветки синтаксиса.
Оформление текста как кода.
<i>, <em>   Выделение курсивом.
<b>   Выделение жирным шрифтом.
<p>   Параграф.
<table>
  • border o — 1 — граница присутствует,
    0 — в противном случае (по умолчанию граница отсутствует).
  • width o — ширина таблицы.
Таблица.
<tr>
<table>
  Ряд таблицы.
<td>
<tr>
  Ячейка таблицы.
<th>
<tr>
  Заголовок таблицы.

Условия в STML

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

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

Атрибут lang 1.10

По умолчанию текст задачи заключается в тег div с атрибутом lang, соответствующим выбранному тегу языка. Однако если текст использует несколько языков одновременно (например английские термины в русском тексте), участки на языке, отличном от языка по умолчанию, должны иметь явно указанный атрибут lang.

Атрибут cats-dict 1.10

Слова, находящиеся внутри тега с атрибутом cats-dict="1", добавляются к словарю текущего языка.

Атрибут cats-snippet 1.11

Содержимое тега с атрибутом cats-snippet="snippet_name" заменяется фрагментом snippet_name.

Единицы измерения памяти 1.9

Размер памяти в значении атрибута mlimit, memoryLimit, wlimit или writeLimit должен быть целым числом, за которым может следовать суффикс 'B' для байтов, 'K' для килобайтов, 'M' для мегабайтов, 'G' для гигабайтов. Если суффикс не указан, предполагаются мегабайты.

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.10 Данная возможность присутствует начиная с версии 1.10.

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

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

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

Дальневосточный федеральный университет