Difference between revisions of "Запись о посылке в таблице"

From EjudgeWiki
Line 27: Line 27:
 
  };
 
  };
 
Здесь используются предположения о размере и размещении целых типов, справедливые
 
Здесь используются предположения о размере и размещении целых типов, справедливые
для архитектуры Linux-ix86. Далее даётся подробное описание назначения каждого из полей
+
для архитектуры <tt>Linux-ix86</tt>. Далее даётся подробное описание назначения каждого из полей
 
структуры.
 
структуры.
Поле submission хранит номер посылки. Каждая посылка нумеруется от 0 и до некото-
+
 
рого максимального значения. Дисциплина хранения файлов с исходным текстом программы
+
Поле <tt>submission</tt> хранит номер посылки. Каждая посылка нумеруется от 0 и до некоторого максимального значения. Дисциплина хранения файлов с исходным текстом программы
 
и протоколов тестирования посылки в настоящее время такова, что максимальный номер
 
и протоколов тестирования посылки в настоящее время такова, что максимальный номер
посылки не может превышать 100000. Номер посылки должен быть проставлен для всех за-
+
посылки не может превышать 100000. Номер посылки должен быть проставлен для всех записей в базе посылок, даже для записей со статусом ''EMPTY'', при этом номер посылки должен
писей в базе посылок, даже для записей со статусом EMPTY, при этом номер посылки должен
+
совпадать с расположением структуры соответствующей посылки в файле. Так, непосредственно за заголовком файла должна идти посылка с номером 0, затем посылка с номером 1
совпадать с расположением структуры соответствующей посылки в файле. Так, непосред-
 
ственно за заголовком файла должна идти посылка с номером 0, затем посылка с номером 1
 
 
и т. д. Пропуски в последовательной нумерации посылок не допускаются. Посылки должны
 
и т. д. Пропуски в последовательной нумерации посылок не допускаются. Посылки должны
 
размещаться в файле посылок в строго возрастающем порядке.
 
размещаться в файле посылок в строго возрастающем порядке.
Поле timestamp содержит время приёма данной посылки сервером турнира serve.
+
 
Время хранится во внутреннем формате Unix-систем, то есть как число секунд, прошедших
+
Поле <tt>timestamp</tt> содержит время приёма данной посылки сервером турнира <tt>serve</tt>.
 +
Время хранится во внутреннем формате <tt>Unix</tt>-систем, то есть как число секунд, прошедших
 
с 1 января 1970 года. Все посылки в файле посылок должны быть упорядочены в порядке
 
с 1 января 1970 года. Все посылки в файле посылок должны быть упорядочены в порядке
неубывания их времени приёма за исключением записи со статусом EMPTY. Время приёма
+
неубывания их времени приёма за исключением записи со статусом ''EMPTY''. Время приёма
 
посылки может быть меньше времени начала турнира или больше времени конца турнира
 
посылки может быть меньше времени начала турнира или больше времени конца турнира
только для посылок, у которых поле is_hidden установлено в true. Для записи в базе
+
только для посылок, у которых поле <tt>is_hidden</tt> установлено в ''true''. Для записи в базе
посылок со статусом EMPTY значение данного поля должно быть равным 0.
+
посылок со статусом ''EMPTY'' значение данного поля должно быть равным 0.
Поле nsec содержит наносекундную компоненту времени приёма данной посылки сер-
+
 
вером турнира. Данное поле может принимать значения в интервале от 0 до 999999999.
+
Поле <tt>nsec</tt> содержит наносекундную компоненту времени приёма данной посылки сервером турнира. Данное поле может принимать значения в интервале от 0 до 999999999.
 
Для каждой посылки в турнире полное время её приёма (то есть время, включающее как
 
Для каждой посылки в турнире полное время её приёма (то есть время, включающее как
секундную, так и наносекундную компоненты) уникально. Посылки в базе посылок все-
+
секундную, так и наносекундную компоненты) уникально. Посылки в базе посылок всегда упорядочиваются по полному времени приёма посылки. Данное поле введено в <tt>ejudge</tt>
гда упорядочиваются по полному времени приёма посылки. Данное поле введено в ejudge
 
 
версии 2.1.27, для турниров, обслуживаемых предыдущей версией системы, наносекундная
 
версии 2.1.27, для турниров, обслуживаемых предыдущей версией системы, наносекундная
 
компонента времени всегда равна нулю. Формат журнала посылки совместим снизу вверх и
 
компонента времени всегда равна нулю. Формат журнала посылки совместим снизу вверх и
сверху вниз, то есть для ejudge младших версий поле nsec будет проигнорировано, а для
+
сверху вниз, то есть для <tt>ejudge</tt> младших версий поле <tt>nsec</tt> будет проигнорировано, а для
ejudge старших версий значение поля nsec по умолчанию будет установлено в 0.
+
<tt>ejudge</tt> старших версий значение поля nsec по умолчанию будет установлено в 0.
Поле size содержит размер исходного файла программы в байтах. Протокол взаимо-
+
 
действия CGI-программы и сервера турнира накладывает ограничения на максимальный
+
Поле <tt>size</tt> содержит размер исходного файла программы в байтах. Протокол взаимодействия CGI-программы и сервера турнира накладывает ограничения на максимальный
размер программы. Кроме того, CGI-программы master, judge, team не принимают данные
+
размер программы. Кроме того, CGI-программы <tt>master, judge, team</tt> не принимают данные
от веб-браузера по методу POST, если размер данных превышает ? кб. Кроме того, макси-
+
от веб-браузера по методу <tt>POST, если размер данных превышает ? кб. Кроме того, макси-
 
мальный размер принимаемых на проверку программ может быть установлен в глобальной
 
мальный размер принимаемых на проверку программ может быть установлен в глобальной
конфигурационной переменной max_run_size конфигурационного файла сервера турнира
+
конфигурационной переменной <tt>[[serve.cfg:global:max_run_size|max_run_size]]</tt> конфигурационного файла сервера турнира
serve.cfg. Значение этой переменной по умолчанию устанавливается в 65535 байтов, но
+
<tt>[[serve.cfg]]</tt>. Значение этой переменной по умолчанию устанавливается в 65535 байтов, но
не может превышать ограничения на приём данных по методу POST и ограничения протоко-
+
не может превышать ограничения на приём данных по методу <tt>POST</tt> и ограничения протокола. Для записей в базе посылок со статусом ''EMPTY'', ''VSTART'' или ''VSTOP'' поле <tt>size</tt> должно
ла. Для записей в базе посылок со статусом EMPTY, VSTART или VSTOP поле size должно
 
349
 
 
содержать 0.
 
содержать 0.
Обратите внимание, что текущая версия системы ejudge передаёт программу как одну си-
+
 
строку, то есть как последовательность байт, в которой нулевой байт означает конец строки.
+
Обратите внимание, что текущая версия системы <tt>ejudge</tt> передаёт программу как одну си-строку, то есть как последовательность байт, в которой нулевой байт означает конец строки.
 
Поэтому в настоящее время не поддерживаются нулевые символы в тексте программы, а
 
Поэтому в настоящее время не поддерживаются нулевые символы в тексте программы, а
 
также сдача программ в каком-либо бинарном (или архивном) формате.
 
также сдача программ в каком-либо бинарном (или архивном) формате.
Поле ip содержит IP-адрес (IPV4) хоста, с которого с помощью веб-браузера было
+
 
 +
Поле <tt>ip</tt> содержит IP-адрес (IPV4) хоста, с которого с помощью веб-браузера было
 
отослано решение. Старший байт поля IP-адреса в данной структуре содержит первый октет
 
отослано решение. Старший байт поля IP-адреса в данной структуре содержит первый октет
 
IP-адреса в точечной нотации. Таким образом IP-адрес хранится в локальном (а не сетевом)
 
IP-адреса в точечной нотации. Таким образом IP-адрес хранится в локальном (а не сетевом)
порядке байт в слове. Для записи в базе посылок со статусом EMPTY данное поле должно
+
порядке байт в слове. Для записи в базе посылок со статусом ''EMPTY'' данное поле должно
 
содержать значение 0.
 
содержать значение 0.
Поле sha1 содержит контрольную сумму исходного текста программы, вычисляемую
+
 
 +
Поле <tt>sha1</tt> содержит контрольную сумму исходного текста программы, вычисляемую
 
по алгоритму SHA1. Этот алгоритм любой последовательности байт ставит в соответствие
 
по алгоритму SHA1. Этот алгоритм любой последовательности байт ставит в соответствие
160-битное число, при этом вероятность коллизии крайне мала. Если два файла имеют оди-
+
160-битное число, при этом вероятность коллизии крайне мала. Если два файла имеют одинаковую контрольную сумму SHA1, они с вероятностью близкой к единице идентичны. Для
наковую контрольную сумму SHA1, они с вероятностью близкой к единице идентичны. Для
+
записей в базе посылок со статусом ''EMPTY'', ''VSTART'' или ''VSTOP'' данное поле должно содержать нулевую контрольную сумму.
записей в базе посылок со статусом EMPTY, VSTART или VSTOP данное поле должно содер-
+
 
жать нулевую контрольную сумму.
+
Контрольная сумма используется для того, чтобы автоматически выявлять дубликаты посылок. Таковыми считаются посылки, у которых совпадают IP-адрес, размер, контрольная
Контрольная сумма используется для того, чтобы автоматически выявлять дубликаты по-
+
сумма, идентификатор участника, идентификатор задачи и идентификатор языка программирования. Дубликаты посылок не проверяются и им немедленно присваивается статус
сылок. Таковыми считаются посылки, у которых совпадают IP-адрес, размер, контрольная
+
“Ignored”. Дубликаты посылок могут возникать, если пользователь после посылки решения на проверку, не дождавшись подтверждения о её получении, нажимает кнопку браузера
сумма, идентификатор участника, идентификатор задачи и идентификатор языка програм-
 
мирования. Дубликаты посылок не проверяются и им немедленно присваивается статус
 
“Ignored”. Дубликаты посылок могут возникать, если пользователь после посылки реше-
 
ния на проверку, не дождавшись подтверждения о её получении, нажимает кнопку браузера
 
 
“Refresh”.
 
“Refresh”.
Поле team хранит идентификатор пользователя, от имени которого выполнена дан-
+
 
ная посылка. Идентификатор пользователя представляет собой положительное целое число
+
Поле <tt>team</tt> хранит идентификатор пользователя, от имени которого выполнена данная посылка. Идентификатор пользователя представляет собой положительное целое число
(идентификатор пользователя 0 является недопустимым). Текущая версия системы ejudge
+
(идентификатор пользователя 0 является недопустимым). Текущая версия системы <tt>ejudge</tt>
накладывает верхнее ограничение на идентификатор пользователя, равное 100000. Для запи-
+
накладывает верхнее ограничение на идентификатор пользователя, равное 100000. Для записи в базе посылок со статусом ''EMPTY'' данное поле должно содержать значение 0.
си в базе посылок со статусом EMPTY данное поле должно содержать значение 0.
+
 
Поле problem хранит идентификатор задачи. Идентификатор задачи представляет собой
+
Поле <tt>problem</tt> хранит идентификатор задачи. Идентификатор задачи представляет собой
целое число, большее нуля (0 как идентификатор задачи недопустим). Система ejudge накла-
+
целое число, большее нуля (0 как идентификатор задачи недопустим). Система <tt>ejudge</tt> накладывает верхнее ограничение на идентификатор задачи, равное максимальному числу задач,
дывает верхнее ограничение на идентификатор задачи, равное максимальному числу задач,
 
 
которые могут быть определены в одном турнире. В настоящее время это число равно 100
 
которые могут быть определены в одном турнире. В настоящее время это число равно 100
задачам. Идентификатор задачи в записи базы посылок должен соответствовать идентифи-
+
задачам. Идентификатор задачи в записи базы посылок должен соответствовать идентификатору какой-либо задачи в конфигурационном файле турнира <tt>[[serve.cfg]]</tt>. Идентификатор
катору какой-либо задачи в конфигурационном файле турнира serve.cfg. Идентификатор
+
задачи можно установить явно с помощью конфигурационной переменной <tt>[[serve.cfg:problem:id|id]]</tt> раздела описания задачи этого файла.
задачи можно установить явно с помощью конфигурационной переменной id раздела описа-
+
 
ния задачи этого файла.
 
 
Поле score хранит количество баллов, полученное при тестировании данной посылки,
 
Поле score хранит количество баллов, полученное при тестировании данной посылки,
 
без учёта штрафов за повторные посылки. Это поле используется только в режимах турнира
 
без учёта штрафов за повторные посылки. Это поле используется только в режимах турнира
KIROV и OLYMPIAD. Количество баллов представляет собой неотрицательное целое число.
+
''KIROV'' и ''OLYMPIAD''. Количество баллов представляет собой неотрицательное целое число.
Значение −1 данного поля задаёт неопределённое значение, которое отображается в журнале
+
Значение <tt>−1</tt> данного поля задаёт неопределённое значение, которое отображается в журнале
посылок как N/A. Максимальное число баллов в текущей версии установлено в 100000.
+
посылок как <tt>N/A</tt>. Максимальное число баллов в текущей версии установлено в 100000.
Поле locale_id хранит идентификатор языкового окружения, установленный в кли-
+
 
енте team в момент отправки посылки. Идентификатор языкового окружения представляет
+
Поле <tt>locale_id</tt> хранит идентификатор языкового окружения, установленный в клиенте <tt>team</tt> в момент отправки посылки. Идентификатор языкового окружения представляет
собой неотрицательное целое число от 0 до 127. Значение −1 поля locale_id задаёт
+
собой неотрицательное целое число от 0 до 127. Значение −1 поля <tt>locale_id</tt> задаёт
 
«неопределённое» значение. В этом случае программы serve и run используют значения
 
«неопределённое» значение. В этом случае программы serve и run используют значения
 
по умолчанию (в настоящее время 0). Идентификатор языкового окружения используется
 
по умолчанию (в настоящее время 0). Идентификатор языкового окружения используется
 
программой run при генерации пользовательского протокола тестирования.
 
программой run при генерации пользовательского протокола тестирования.
В настоящее время система ejudge поддерживает два языковых окружения: английское
+
 
350
+
В настоящее время система <tt>ejudge</tt> поддерживает два языковых окружения: английское
 
(идентификатор 0) и русское (идентификатор 1). В обоих случаях используется кодировка
 
(идентификатор 0) и русское (идентификатор 1). В обоих случаях используется кодировка
koi8-r.
+
<tt>koi8-r</tt>.
Поле language хранит идентификатор языка программирования, на котором написана
+
 
 +
Поле <tt>language</tt> хранит идентификатор языка программирования, на котором написана
 
посылаемая программа. Идентификатор языка программирования представляет собой целое
 
посылаемая программа. Идентификатор языка программирования представляет собой целое
 
число в интервале от 0 до 255. Идентификатор языка программирования в записи базы
 
число в интервале от 0 до 255. Идентификатор языка программирования в записи базы
 
посылок должен соответствовать идентификатору какого-либо языка программирования в
 
посылок должен соответствовать идентификатору какого-либо языка программирования в
конфигурационном файле турнира serve.cfg. Идентификатор языка программирования
+
конфигурационном файле турнира <tt>[[serve.cfg]]</tt>. Идентификатор языка программирования
для некоторого языка можно установить явно с помощью конфигурационной переменной id
+
для некоторого языка можно установить явно с помощью конфигурационной переменной [[serve.cfg:language:id|id]]</tt>
 
раздела описания языка программирования этого файла.
 
раздела описания языка программирования этого файла.
Поле status хранит статус посылки. Статус посылки подробно рассматривается в
+
 
таблице 5.1.
+
Поле <tt>status</tt> хранит статус посылки. Статус посылки подробно рассматривается в
 +
таблице [[вердикты тестирования|Допустимые статусы посылок]].
 +
 
 
Поле test хранит либо минимальный номер теста, на котором программа дала неверный
 
Поле test хранит либо минимальный номер теста, на котором программа дала неверный
 
ответ (для турниров по системе ACM), либо количество тестов, на которых программа дала
 
ответ (для турниров по системе ACM), либо количество тестов, на которых программа дала

Revision as of 09:33, 27 February 2012

Навигация: Главная страница/Система ejudge/Использование/Внутренние файлы/Запись о посылке в таблице

Формат одной записи описывается следующей структурой данных на языке Си. Как было сказано выше, размер такой структуры на архитектуре Linux-ix86 равен 64 байтам.

struct run_entry
{
 int            submission;
 time_t         timestamp;
 size_t         size;
 unsigned long  ip;
unsigned long  sha1[5];
 int            team;
 int            problem;
 int            score;
 signed char    locale_id;
 unsigned char  language;
 unsigned char  status;
 signed char    test;
 unsigned char  is_imported;
 unsigned char  variant;
 unsigned char  is_hidden;
 unsigned char  is_readonly;
 unsigned char  pages;
 unsigned char  pad[3];
 long           nsec;
};

Здесь используются предположения о размере и размещении целых типов, справедливые для архитектуры Linux-ix86. Далее даётся подробное описание назначения каждого из полей структуры.

Поле submission хранит номер посылки. Каждая посылка нумеруется от 0 и до некоторого максимального значения. Дисциплина хранения файлов с исходным текстом программы и протоколов тестирования посылки в настоящее время такова, что максимальный номер посылки не может превышать 100000. Номер посылки должен быть проставлен для всех записей в базе посылок, даже для записей со статусом EMPTY, при этом номер посылки должен совпадать с расположением структуры соответствующей посылки в файле. Так, непосредственно за заголовком файла должна идти посылка с номером 0, затем посылка с номером 1 и т. д. Пропуски в последовательной нумерации посылок не допускаются. Посылки должны размещаться в файле посылок в строго возрастающем порядке.

Поле timestamp содержит время приёма данной посылки сервером турнира serve. Время хранится во внутреннем формате Unix-систем, то есть как число секунд, прошедших с 1 января 1970 года. Все посылки в файле посылок должны быть упорядочены в порядке неубывания их времени приёма за исключением записи со статусом EMPTY. Время приёма посылки может быть меньше времени начала турнира или больше времени конца турнира только для посылок, у которых поле is_hidden установлено в true. Для записи в базе посылок со статусом EMPTY значение данного поля должно быть равным 0.

Поле nsec содержит наносекундную компоненту времени приёма данной посылки сервером турнира. Данное поле может принимать значения в интервале от 0 до 999999999. Для каждой посылки в турнире полное время её приёма (то есть время, включающее как секундную, так и наносекундную компоненты) уникально. Посылки в базе посылок всегда упорядочиваются по полному времени приёма посылки. Данное поле введено в ejudge версии 2.1.27, для турниров, обслуживаемых предыдущей версией системы, наносекундная компонента времени всегда равна нулю. Формат журнала посылки совместим снизу вверх и сверху вниз, то есть для ejudge младших версий поле nsec будет проигнорировано, а для ejudge старших версий значение поля nsec по умолчанию будет установлено в 0.

Поле size содержит размер исходного файла программы в байтах. Протокол взаимодействия CGI-программы и сервера турнира накладывает ограничения на максимальный размер программы. Кроме того, CGI-программы master, judge, team не принимают данные от веб-браузера по методу POST, если размер данных превышает ? кб. Кроме того, макси- мальный размер принимаемых на проверку программ может быть установлен в глобальной конфигурационной переменной max_run_size конфигурационного файла сервера турнира serve.cfg. Значение этой переменной по умолчанию устанавливается в 65535 байтов, но не может превышать ограничения на приём данных по методу POST и ограничения протокола. Для записей в базе посылок со статусом EMPTY, VSTART или VSTOP поле size должно содержать 0.

Обратите внимание, что текущая версия системы ejudge передаёт программу как одну си-строку, то есть как последовательность байт, в которой нулевой байт означает конец строки. Поэтому в настоящее время не поддерживаются нулевые символы в тексте программы, а также сдача программ в каком-либо бинарном (или архивном) формате.

Поле ip содержит IP-адрес (IPV4) хоста, с которого с помощью веб-браузера было отослано решение. Старший байт поля IP-адреса в данной структуре содержит первый октет IP-адреса в точечной нотации. Таким образом IP-адрес хранится в локальном (а не сетевом) порядке байт в слове. Для записи в базе посылок со статусом EMPTY данное поле должно содержать значение 0.

Поле sha1 содержит контрольную сумму исходного текста программы, вычисляемую по алгоритму SHA1. Этот алгоритм любой последовательности байт ставит в соответствие 160-битное число, при этом вероятность коллизии крайне мала. Если два файла имеют одинаковую контрольную сумму SHA1, они с вероятностью близкой к единице идентичны. Для записей в базе посылок со статусом EMPTY, VSTART или VSTOP данное поле должно содержать нулевую контрольную сумму.

Контрольная сумма используется для того, чтобы автоматически выявлять дубликаты посылок. Таковыми считаются посылки, у которых совпадают IP-адрес, размер, контрольная сумма, идентификатор участника, идентификатор задачи и идентификатор языка программирования. Дубликаты посылок не проверяются и им немедленно присваивается статус “Ignored”. Дубликаты посылок могут возникать, если пользователь после посылки решения на проверку, не дождавшись подтверждения о её получении, нажимает кнопку браузера “Refresh”.

Поле team хранит идентификатор пользователя, от имени которого выполнена данная посылка. Идентификатор пользователя представляет собой положительное целое число (идентификатор пользователя 0 является недопустимым). Текущая версия системы ejudge накладывает верхнее ограничение на идентификатор пользователя, равное 100000. Для записи в базе посылок со статусом EMPTY данное поле должно содержать значение 0.

Поле problem хранит идентификатор задачи. Идентификатор задачи представляет собой целое число, большее нуля (0 как идентификатор задачи недопустим). Система ejudge накладывает верхнее ограничение на идентификатор задачи, равное максимальному числу задач, которые могут быть определены в одном турнире. В настоящее время это число равно 100 задачам. Идентификатор задачи в записи базы посылок должен соответствовать идентификатору какой-либо задачи в конфигурационном файле турнира serve.cfg. Идентификатор задачи можно установить явно с помощью конфигурационной переменной id раздела описания задачи этого файла.

Поле score хранит количество баллов, полученное при тестировании данной посылки, без учёта штрафов за повторные посылки. Это поле используется только в режимах турнира KIROV и OLYMPIAD. Количество баллов представляет собой неотрицательное целое число. Значение −1 данного поля задаёт неопределённое значение, которое отображается в журнале посылок как N/A. Максимальное число баллов в текущей версии установлено в 100000.

Поле locale_id хранит идентификатор языкового окружения, установленный в клиенте team в момент отправки посылки. Идентификатор языкового окружения представляет собой неотрицательное целое число от 0 до 127. Значение −1 поля locale_id задаёт «неопределённое» значение. В этом случае программы serve и run используют значения по умолчанию (в настоящее время 0). Идентификатор языкового окружения используется программой run при генерации пользовательского протокола тестирования.

В настоящее время система ejudge поддерживает два языковых окружения: английское (идентификатор 0) и русское (идентификатор 1). В обоих случаях используется кодировка koi8-r.

Поле language хранит идентификатор языка программирования, на котором написана посылаемая программа. Идентификатор языка программирования представляет собой целое число в интервале от 0 до 255. Идентификатор языка программирования в записи базы посылок должен соответствовать идентификатору какого-либо языка программирования в конфигурационном файле турнира serve.cfg. Идентификатор языка программирования для некоторого языка можно установить явно с помощью конфигурационной переменной id раздела описания языка программирования этого файла.

Поле status хранит статус посылки. Статус посылки подробно рассматривается в таблице Допустимые статусы посылок.

Поле test хранит либо минимальный номер теста, на котором программа дала неверный ответ (для турниров по системе ACM), либо количество тестов, на которых программа дала правильный ответ (для турниров по системе KIROV или OLYMPIAD). Для турниров по системе ACM если значение данного поля 6 0, то минимальный номер теста не определён (в случаях, когда статус посылки допускает это, например, при статусе “Compilation error”). Для турниров по системам KIROV или OLYMPIAD значение данно- го поля, не большее 0 также означает, что количество тестов, на которых программа дала правильный ответ, не определено. Если для турниров по этим системам поле test хранит положительное значение, то оно на 1 больше количества успешно пройденных тестов. На- пример, если решение дало правильный ответ на 3 тестах, в базе посылок в поле test хранится значение 4. Поле is_imported хранит признак проимпортированной посылки. Поле может при- нимать два значения: 0 и 1, соответствующие булевским значениям false и true. У посылки устанавливается этот флаг при импорте в базу посылок внешнего XML-файла с посылками, если импортируемой посылке не соответствует никакая локальная посылка. В текущей вер- сии системы ejudge при импорте базы посылок не импортируется исходный код программы посылки, а также протоколы тестирования. Поэтому при работе с посылкой, у которой по- ле is_imported установлено в true предполагается, что ни исходного файла, ни файлов протоколов тестирования в архивах турнира не существует. Как следствие, такие посылки не могут быть пересужены с помощью кнопок “Rejudge” интерфейса администратора турни- ра. При необходимости нужный статус посылки должен быть выставлен вручную. Обратите внимание, что результаты редактирования проимпортированной посылки могут потерять- ся при очередном импорте, если эта посылка в импортируемом XML-файле помечена как «авторитетная». Поле variant хранит номер варианта задачи. Для невариантных задач данное поле не используется. Для вариантных задач данное поле может иметь значение 0, что означает, что должен использоваться вариант согласно таблице вариантов (см. глобальную конфигураци- онную переменную variant_map_file), либо данное поле может хранить номер варианта явно. Явный номер варианта задачи может выставляться только администратором турнира при редактировании записи, либо выбираться при отправке посылки из-под привилегирован- ной CGI-программы master или judge пользователем с соответствующими привилегиями. Поле is_hidden хранит флаг скрытой посылки. Поле может принимать два значения: 0 и 1, соответствующие булевским значениям false и true. Флаг скрытой посылки ставится всегда при отправке посылки из-под привилегированных CGI-программ master или judge. Кроме этого флаг скрытой посылки может быть установлен вручную администратором тур- нира. Когда флаг скрытой посылки установлен в true, такая посылка: 351 • Не учитывается при вычислении штрафов за попытки, текущих результатов турнира и не отображается в таблице текущих результатов и публичном журнале посылок (если таковой ведётся). • Не экспортируется в XML-формате. • Может иметь время получения до момента начала турнира и после момента окончания турнира. Поле is_readonly хранит флаг нередактируемой посылки. Поле может принимать два значения: 0 и 1, соответствующие булевским значениям false и true. Флаг нередактируемой посылки может быть установлен вручную администратором турнира. Если флаг нередактируемой посылки установлен в true, данная посылка никогда не пере- суживается с помощью кнопок “Rejudge” интерфейса администратора турнира. Администра- тор турнира не может изменить ни одно поле посылки, за исключением поля is_readonly. Назначение данного флага — предотвратить случайное изменение полей посылки (на- пример, с помощью кнопки “Rejudge”, если статус посылки был установлен вручную), а не запретить каким-либо пользователям редактировать поля базы посылок. Поле pages хранит количество страниц бумаги, использованных при распечатке про- граммы непривилегированным пользователем. Если значение поля равно 0, программа не была распечатана. Значение поля устанавливается после распечатки исходного кода програм- мы в данной посылке. Счётчик страниц включает в себя обязательную титульную страницу, поэтому даже самая маленькая программа потребует две страницы. По умолчанию распечатка программ непривилегированными пользователями запрещена. Чтобы разрешить распечатку необходимо установить в true глобальную конфигурационную переменную enable_printing конфигурационного файла описания турнира serve.cfg.