Формат заданий |
на главнуюсодержание |
скачать пример пакета с заданием
Для хранения задачи используется ZIP-файл, в корне которого обязательно должен быть ровно один XML-файл с описанием условия задачи и некоторый набор дополнительных файлов с тестами, программами проверки и т.д.
Название тега Тег верхнего уровня | Атрибуты | Комментарии |
---|---|---|
<CATS> |
|
Обязательный внешний тег. |
<Problem> |
|
Стандартная программа проверки служит для сравнения выходного
файла с файлом, содержащим ответ теста. Перечень стандартных программ проверки:
Начиная с версии 1.4, вместо атрибута stdChecker рекомендуется пользоваться тегом <Import> с использованием следующих стандартных guid:
|
<Keyword> |
|
Код ключевого слова должен быть известен системе. |
<ProblemStatement> |
|
Описание условия задачи в формате STML. Если указан атрибут attachment или url, текст задачи заменяется ссылкой. |
<ProblemConstraints> |
Описание ограничений на входные данные задачи в формате STML. | |
<InputFormat> |
Описание формата входного файла в формате STML. | |
<OutputFormat> |
Описание формата выходного файла в формате STML. | |
<JsonData> 1.7<Problem> |
Дополнительные данные к задаче в формате JSON.
Рекомендуется использовать тег <include> . |
|
<Explanation> 1.5<Problem> |
|
Разбор задачи в формате STML. Если указан атрибут attachment или url, текст разбора заменяется ссылкой. |
<Checker> |
|
Описание проверяющей программы. Данный тег игнорируется, если в описании задачи присутствует атрибут stdChecker.
"src" — задаёт путь к файлу, относительно корня архива. Допускается использование вложенных каталогов.
Регистр пути к файлу должен совпадать с регистром имён файлов в архиве.
Перечень стандартных кодов сред разработки:
Если код среды разработки не указан, то он определяется по расширению файла, в порядке приоритета, заданного списком стандартных кодов сред разработки. Код возврата проверяющей программы: 0 — OK, 1 — WA, 2 — PE, 3 — Internal error. |
<Picture> |
|
Описание картинки, встраиваемой в текст задачи. |
<Attachment> 1.6<Problem> |
|
Произвольный файл, доступный для скачивания из текста задачи. |
<Solution> |
|
Описание эталонного решения. |
<Generator> |
|
Описание генератора тестов. Генератор должен создать файл,
имя которого задано в атрибуте 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> |
|
В атрибутах 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> |
|
Визуализатор тестовых данных. |
<Interactor> 1.9<Problem> |
|
Интерактор или контроллер (см. <Run> ). Допускается только один интерактор на задачу. |
<Linter> 1.10<Problem> |
|
Линтер запускается либо до, либо после компиляции в зависимости от атрибута 'stage'.
Линтер принимает имена исходных файлов в командной строке и завершается с ненулевым кодом возврата
если исходный код не прошёл проверку.
Стандартный выход линтера может содержать сообщение об ошибке.
Линтер может быть импортирован по глобальному идентификатору. См. <Import> |
<Run> 1.9<Problem> |
|
Допустимые значения атрибута method:
|
<Snippet> 1.11<Problem> |
|
Фрагмент условия или теста к задаче. Может отличаться для каждого участника. |
<Test> |
|
В задаче должны присутствовать тесты со значениями 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> |
|
Начиная с версии 1.5, рекомендуется использовать тег <Test> .В атрибутах тегов <In> и <Out> , вложенных в <TestRange> ,
можно использовать контекстные переменные, обозначающие номер теста.
Например:<TestRange from="1" to="10"> <In src="%0n.in"/><Out use="solution"/> </TestRange> |
<In> , <TestRange> 1.1 |
|
Описание входного файла теста.
Если указан атрибут "use", то входной файл теста будет получен путём запуска генератора тестов. Если в атрибуте "param" содержится символ " | ", то для генерации используется конвейер,
нaчинающийся с генератора тестов, за которым идут модули генератора. Например:
Если ни один из атрибутов "src" и "use" не указан, содержит текст входного файла1.9.
Пробелы и переводы строк сохраняются в точности.
|
<Out> , <TestRange> 1.1 |
Если указан атрибут "use", то выходной файл теста будет получен путём запуска эталонного решения. Если ни один из атрибутов "src" и "use" не указан, содержит текст выходного файла1.9. Пробелы и переводы строк сохраняются в точности. | |
<Testset> 1.5<Problem> |
|
Содержит описание тестового набора. При подключении задачи к турниру можно указать тестовые наборы, которые будут использоваться для проверки. По умолчанию используются все имеющиеся в пакете тесты. Если указано количество баллов за набор тестов, то баллы начисляются только в случае, когда все тесты из набора пройдены. Допустимо смешивать наборы и независимые тесты, а также указывать в пакете перекрывающиеся наборы. Тест не должен принадлежать нескольким оценённым, зависимым и/или скрытым наборам, использующимся одновременно. |
<Module> 1.2<Problem> |
|
Описание модуля. Файлы модулей распаковываются и компилируются вместе с каждым объектом соответствующего вида. Для модулей, отдельная компиляция которых не требуется, следует указывать среду разработки "None" (de_code="1"). Порядок компиляции модулей совпадает с порядком перечисления в файле описания задачи. Если вместо атрибута src указан атрибут fileName, содержимое тега сохраняется в модуль с именем fileName. |
<Import> 1.4<Problem> |
Импорт объекта из существующей задачи. Поиск объекта осуществляется по guid. Если указан атрибут type, проверяется соответствие типа объекта. Эффект от импорта объекта эквивалентен добавлению его копии в пакет с задачей. | |
<Sample> |
|
Описание демонстрационного теста.
В атрибутах тегов <SampleIn> и <SampleOut> , вложенных в <Sample> ,
можно использовать контекстные переменные, обозначающие номер примера1.9.
Например:
<Sample rank="1-3"> <SampleIn src="%0n.in"/> <SampleOut src="%0n.out"/> </Sample> |
<SampleIn> |
Содержит текст с примером входного файла в случае, если не указан атрибут src. Пробелы и переводы строк сохраняются в точности. | |
<SampleOut> |
Содержит текст с примером выходного файла в случае, если не указан атрибут src. Пробелы и переводы строк сохраняются в точности. | |
<Quiz> 1.11<ProblemStatement> |
Вопрос из опроса. Если указан хотя бы один из атрибутов rank , points , descr ,
либо использован тег <Answer> или тег <Choice>
с атрибутом correct , автоматически создаётся тест.
|
|
<Text> 1.11<Quiz> |
Текст вопроса. | |
<Answer> 1.11<Quiz> |
Правильный ответ на вопрос типа text .
|
|
<Choice> 1.11<Quiz> |
|
Вариант ответа на вопрос типа radiogroup или checkbox .
|
Спецификация представляет собой список элементов, разделённых запятыми. Каждый элемент может быть:
-
" 1.5,-
" 1.10,<Testset>
)1.8.Имеют вид %n
, %0n
, что обозначает соответственно подстановку номера и номера с лидирующим нулём.
Формат STML — упрощённое подмножество HTML. В STML определены следующие теги:
Название тега Тег верхнего уровня | Атрибуты | Комментарии |
---|---|---|
<img> |
Вставка картинки. | |
<a> 1.6 |
|
Вставка ссылки на вложенный файл. |
<object> 1.6 |
|
Вставка ссылки на вложенный файл. |
<include> 1.7 |
|
Вставка текста из файла. |
<code> |
|
Оформление текста как кода. |
<i> , <em> |
Выделение курсивом. | |
<b> |
Выделение жирным шрифтом. | |
<p> |
Параграф. | |
<table> |
Таблица. | |
<tr> |
Ряд таблицы. | |
<td> |
Ячейка таблицы. | |
<th> |
Заголовок таблицы. |
Для любого тега внутри 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.
Размер памяти в значении атрибута 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.
Документация - CATS | разработкадокументация© 2002-2020 Авторы |
Дальневосточный федеральный университет |