Daysper.ini

Последняя правка 3791 день назад
Материал из Daysper manual
Перейти к навигации Перейти к поиску

В файле 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. См. примеры выше и здесь.