Daysper.ini
В файле daysper.ini можно указывать глобальные настройки daysper, свойства каждой конкретной задачи, а также параметры контестов.
Область действия файлов[править | править код]
Для каждого каталога определяется список файлов daysper.ini, которые учитываются при работе в этом каталоге. А именно, при работе в каждом каталоге daysper ищет файлы daysper.ini в следующих каталогах и загружает настройки из тех файлов, которые находит (при этом приоритет имеют настройки в файлах, загружаемых позже):
- каталог, в котором находится исполняемый файл daysper
- корневой каталог (в Windows — корневой каталог на том диске, где находится текущий каталог)
- первый каталог от корня по пути к текущему каталогу
- второй каталог от корня по пути к текущему каталогу
- ...
- родительский каталог текущего каталога
- текущий каталог
Например, если текущий каталог — Z:\work\sis-june\svn\z-prime\problems\aplusb\, а исполняемый файл daysper находится в каталоге C:\daysper\, то файлы daysper.ini будут искаться в следующих каталогах: C:\daysper\, Z:\, Z:\work\, Z:\work\sis-june\, Z:\work\sis-june\svn\, Z:\work\sis-june\svn\z-prime\, Z:\work\sis-june\svn\z-prime\problems\, Z:\work\sis-june\svn\z-prime\problems\aplusb\ (в этом порядке). Параметры, указанные в каждом очередном файле, будут затирать загруженные ранее.
О значениях по умолчанию[править | править код]
Если значение какого-либо параметра не указано ни в одном из загруженных файлов daysper.ini, то будет использоваться значение по умолчанию. Для некоторых параметров это значение зависит от значения других параметров; в таком случае будут использоваться правильные значения этих других параметров. Например, значение по умолчанию параметра inputFile — это значение параметра id, к котором приписан суффикс .in. Если параметр inputFile нигде не указан, то в качестве его значения будет использовано правильное значение параметра id (с учетом последнего загруженного значения параметра id из файлов daysper.ini или с учетом правил его определения по умолчанию, см. ниже), к которому приписан суффикс .in.
Для некоторых параметров (особенно для тех, чье значение по умолчанию зависит от значений других параметров) значение по умолчанию будет использоваться также в случае, если в качестве значения параметра указана пустая строка.
О настройках daysper и свойствах задачи[править | править код]
В файлах daysper.ini указываются как настройки daysper (строки компиляции и т.п.), так и свойства конкретной задачи (имена входных/выходных файлов и т.п.), так и параметры контестов (набор задач и т.п.). В простейшем варианте, настройки daysper имеет смысл указывать в файле daysper.ini в том каталоге, где находится исполняемый файл daysper, или в верхнем каталоге "дерева каталогов-задач", настройки задачи — в самих задачах, настройки контестов — в самих контестах. Тем не менее, вполне допустимо указание любых параметров в любых файлах, и это даже нередко имеет смысл.
Структура файла[править | править код]
Файл daysper.ini — это стандартный .ini-файл. Символ # указывает начало комментария.
Параметры указываются в виде пар имя=значение по одной на строке. Параметры могут группироваться в секции, начало секции задается строкой с названием секции в квадратных скобках.
Названия параметров и секций чувствительны к регистру.
Сортировка параметров[править | править код]
Параметры в одной секции сортируются по ключу (имени параметра). На большинство параметров это не влияет, но это влияет, например, на порядок задач в контесте, на порядок команд компиляции TeX'а и т.п.
Примеры[править | править код]
(Как сказано выше, в любом файле можно устанавливать значения любых свойств; ниже примеры разбиты на три группы лишь для удобства)
Пример файла, который имеет смысл класть в каталог с исполняемым файлом daysper или в корень "дерева каталогов-задач":
inputFormat=%2.2d answerFormat=%2.2d.a testTextFormat=%d [compilers] .pas=fpc -Mdelphi -FE. -Fu..\..\..\testlib %s .dpr=fpc -Mdelphi -FE. -Fu..\..\..\testlib %s #.pas=dcc32 -cc -E. -U..\..\..\testlib %s #.dpr=dcc32 -cc -E. -U..\..\..\testlib %s .cpp=g++ %s -o %s .c=g++ %s -o %s .cxx=g++ %s -o %s .java=javac -d . %s .php=copy %s . [executers] .java=java %s .php=php %s.php [tex-commands] 1=latex 1a=latex 2=dvips 3=dvipdfmx
Пример файла, который может иметь смысл класть в каталоге с задачей:
solution=pk tests-directory=result source-directory=src id=aplusb
Пример файла, который может иметь смысл класть в каталоге с контестом:
[contest] basepath=../../problems [contest-problems] 1=firesafe 1a=domino 1b=$\pagebreak 2=points 3=$\pagebreak 4=bridges 6=topsort2t
Еще пример файла, который может иметь смысл класть в каталоге с контестом, и который имеет тот же смысл, что и предыдущий:
[contest] basepath=.. [contest-problems] 1=../problems/firesafe 1a=../problems/domino 1b=$\pagebreak 2=../problems/points 3=$\pagebreak 4=../problems/bridges 6=../problems/topsort2t
Оба этих примера, помимо перечисления задач контеста, указывают, что между второй и третьей, а также между третьей и четвертой задачами в TeX-файл условий надо вставить команды \pagebreak.
Параметры daysper.ini[править | править код]
inputFormat[править | править код]
Указывает формат названия input-файлов. Конкретное имя файла получается командой sprintf(inputFormat, testNumber).
По умолчанию — %2.2d
answerFormat[править | править код]
Указывает формат названия answer-файлов. Конкретное имя файла получается командой sprintf(answerFormat, testNumber).
По умолчанию — %2.2d.a
После загрузки каждого файла daysper.ini проверяется, не стали ли совпадать строки inputFormat и answerFormat; если стали, то daysper выходит с ошибкой.
testTextFormat[править | править код]
Указывает формат номера теста, в котором он будет выводиться на экран в различных диагностических сообщениях. Конкретная строка получается командой sprintf(testTextFormat, testNumber). Как правило, менять этот параметр не требуется.
По умолчанию — %2.2d
id[править | править код]
Идентификатор задачи. Используется для формирования имен входного и выходного файла по умлочанию, а также для формирования названий файлов с решениями.
По умолчанию — имя каталога с задачей.
inputFile[править | править код]
Имя входного файла в задаче.
По умолчанию — значение параметра id, к которому приписан суффикс .in
outputFile[править | править код]
Имя выходного файла в задаче.
По умолчанию — значение параметра id, к которому приписан суффикс .out
solution[править | править код]
Идентификатор решения по умолчанию (используется командами build, check, export, если им явно не указано решение).
По умолчанию — пустая строка.
source-directory[править | править код]
Каталог, где ожидаются исходники тестов. Помимо прочего, по наличию такого каталога определяется, является ли конкретный каталог каталогом с задачей.
По умолчанию — tests
tests-directory[править | править код]
Каталог, где должны находиться сгенерированные тесты.
По умолчанию — tests-ready
testsets[править | править код]
Набор тестсетов (через пробел), используемый при генерации и экспортировании задачи по умолчанию.
По умолчанию — all
tex-prologue[править | править код]
Пролог TeX'овских файлов. Подключается командой \input в начало любых генерируемых TeX'овских файлов. По умолчанию — пустая строка, т.е. фактически этот параметр обязательно должен быть указан, если вы планируете генерировать TeX-файлы.
statement-needs-examples[править | править код]
Указывает, нужны ли в задаче автоматически-генерируемые примеры в условия. Должен равняться true или false; по умолчанию — false.
Секция compilers[править | править код]
Описывает команды компиляции для различных языков программирования. Каждое значение здесь имеет формат суффикс=строка, где суффикс — суффикс (расширение) имени файла, к которому "применим" этот компилятор, а строка — строка компиляции. Строка компиляции может содержать шаблоны %s, первый из них будет заменен на имя файла с исходником, второй — на имя файла, где ожидается результат компиляции (с расширением exe под Windows).
Строка компиляции должна быть указана так, чтобы она допускала компиляцию файлов, не находящихся в текущем каталоге, с созданием бинарника в текущем каталоге (для этого и добавлены параметры -FE. у FP, -E. у Delphi, -d . у Java).
Если язык является полностью интерпретируемым (например, php), и не требует компиляции, то надо написать строку вида
.php=copy %s .
Секция executers[править | править код]
Описывает команды запуска программы для различных языков программирования. Аналогично секции compilers, только шаблон %s единственный и заменяется на имя выполняемого файла (без расширения). Если для какого-то языка отсутствет строка запуска, то считается, что надо напрямую запустить бинарник.
Секция contest[править | править код]
Задает отдельные параметры, специфичные для контеста. На данный момент имеется единственный такой параметр — basepath.
basepath[править | править код]
Параметр basepath секции compilers задает общую часть пути к задачам контеста. А именно, его значение и символ / приписываются в начале каждой задачи из секции contest-problems. По умолчанию — строка ".".
Например, если basepath будет указан ../../problems, а в секции contest-problems будет задача aplusb, то она будет искаться в каталоге ../../problems/aplusb. То же будет, если basepath указан "." (или не указан вообще), а в секции contest-problems указано ../../problems/aplusb.
Секция contest-problems[править | править код]
Специфична для контеста. Перечисляет задачи, входящие в контест, а также некоторую дополнительную информацию. А именно, у каждого параметра секции его имя (часть, указанная до знака =) игнорируется, а значение (часть после =) задает:
- если значение начинается с символа $, то:
- при автоматической генерации условий контеста этот доллар отбрасывается, а оставшаяся строка вставляется в генерируемый TeX-файл (в том месте, где встретился этот параметр секции contest-problems). Это позволяет задавать raw TeX-команды, например, для более качественного разбиения на страницы или вставки нестандартного текста в сами условия.
- в остальных случаях этот параметр игнорируется.
- остальные параметры задают задачи контеста — указывают (с учетом параметра basepath) имя каталога, в котором находится задача. Не рекомендуется начинать названия задач с каких-либо символов, кроме букв, цифр, слешей и точки, т.к. в будущем, возможно, другие первые символы будут трактоваться как какая-нибудь еще дополнительная информация.
Задачи (и дополнительные TeX-команды) считаются идущими в том порядке, в котором они перечислены в секции contest-problems.
См. примеры выше.
Секция tex-commands[править | править код]
Перечисляет команды, которые необходимо выполнить для компиляции TeX-файлов. У каждого параметра секции его имя (часть, указанная до знака =) игнорируется, а значение (часть после =) задает очередную команду, которую надо выполнить. При компиляции в конце каждой команды приписывается имя компилируемого файла без расширения, после чего эти команды выполняются в том порядке, в котором они заданы в секции tex-compilers. См. примеры выше и здесь.