Difference between revisions of "Gvaluer"

From EjudgeWiki
(...)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Оценивающие программы]]/[[gvaluer]]
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Оценивающие программы]]/[[gvaluer]]
 
Данный раздел - экспериментальный.
 
  
 
=== Компиляция ===
 
=== Компиляция ===
Line 9: Line 7:
  
 
Откомпилированную программу можно поместить либо в каталог задачи, либо в каталог <tt>problems</tt> турнира (то есть родительский каталог относительно каталога задачи).
 
Откомпилированную программу можно поместить либо в каталог задачи, либо в каталог <tt>problems</tt> турнира (то есть родительский каталог относительно каталога задачи).
 +
 +
С версии [[изменения в версии 3.13.0|3.13.0]] и выше нет необходимости компилировать программу самостоятельно,
 +
она инсталлируется в каталог проверяющих программ.
  
 
=== Настройка [[serve.cfg]] ===
 
=== Настройка [[serve.cfg]] ===
Line 14: Line 15:
 
Если программа gvaluer помещена в каталог <tt>problems</tt>, то раздел определения задачи должен содержать следующую строку
 
Если программа gvaluer помещена в каталог <tt>problems</tt>, то раздел определения задачи должен содержать следующую строку
 
  [[serve.cfg:problem:valuer_cmd|valuer_cmd]] = "../gvaluer"
 
  [[serve.cfg:problem:valuer_cmd|valuer_cmd]] = "../gvaluer"
 +
 +
С версии [[изменения в версии 3.13.0|3.13.0]] и выше рекомендуется использовать стандартную программу.
 +
 +
[[serve.cfg:problem:standard_valuer|standard_valuer]] = "gvaluer"
  
 
В каталоге задачи необходимо создать файл <tt>valuer.cfg</tt>, в котором описывается структура групп тестов.
 
В каталоге задачи необходимо создать файл <tt>valuer.cfg</tt>, в котором описывается структура групп тестов.
Line 44: Line 49:
 
   | "test_all" ";"                                        /* тестировать на всех тестах даже группы с групповой оценкой (с [[Изменения в версии 3.3.0|3.3.0]]) */
 
   | "test_all" ";"                                        /* тестировать на всех тестах даже группы с групповой оценкой (с [[Изменения в версии 3.3.0|3.3.0]]) */
 
   | "0_if" TEST { "," TEST } ";"                          /* оценить группу в 0 баллов, если прошли только указанные тесты (с [[Изменения в версии 3.6.0|3.6.0]]) */
 
   | "0_if" TEST { "," TEST } ";"                          /* оценить группу в 0 баллов, если прошли только указанные тесты (с [[Изменения в версии 3.6.0|3.6.0]]) */
 +
  | "0_if_subset" TEST { "," TEST } ";"                  /* оценить группу в 0 баллов, если прошли только тесты из указанного множества тестов (с [[Изменения в версии 3.10.2|3.10.2]]) */
 
   ;
 
   ;
  
Line 70: Line 76:
 
     offline;
 
     offline;
 
  }
 
  }
 +
 +
=== Переменные окружения ===
 +
 +
{| class="wikitable" style="margin:auto"
 +
|+ Переменные окружения
 +
|-
 +
! Имя !! значение !! описание
 +
|-
 +
| <code>EJUDGE</code> || любое значение || должна быть установлена
 +
|-
 +
| <code>EJUDGE_INTERACTIVE</code> || любое значение || если установлена, см. <code>[[serve.cfg:problem:interactive_valuer|interactive_valuer]]</code>
 +
|-
 +
| <code>EJUDGE_REJUDGE</code> || любое значение || если установлена, то посылка перепроверяется
 +
|-
 +
| <code>EJUDGE_USER_SCORE</code> || любое значение || если установлена, см <code>[[Serve.cfg:global:separate_user_score|separate_user_score]]</code>
 +
|-
 +
| <code>EJUDGE_MARKED</code> || любое значение || если установлена, см. <code>[[Serve.cfg:problem:valuer sets marked|valuer_sets_marked]]</code>
 +
|-
 +
| <code>EJUDGE_GROUP_MERGE</code> || любое значение || если установлена, см. <code>[[Serve.cfg:problem:enable_group_merge|enable_group_merge]]</code>
 +
|-
 +
| <code>EJUDGE_LOCALE</code> || ID языка (int) || если установлена, см. <code>[[serve.cfg:global:checker_locale|checker_locale]]</code>
 +
|}

Latest revision as of 10:19, 29 December 2024

Навигация: Главная страница/Система ejudge/Использование/Оценивающие программы/gvaluer

Компиляция

Программа находится в каталоге checkers исходных текстов ejudge. Для компиляции необходим компилятор C++ с поддержкой C++11 (например, g++ 4.7 и выше).

g++ -O2 -Wall -std=gnu++11 gvaluer.cpp -ogvaluer

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

С версии 3.13.0 и выше нет необходимости компилировать программу самостоятельно, она инсталлируется в каталог проверяющих программ.

Настройка serve.cfg

Если программа gvaluer помещена в каталог problems, то раздел определения задачи должен содержать следующую строку

valuer_cmd = "../gvaluer"

С версии 3.13.0 и выше рекомендуется использовать стандартную программу.

standard_valuer = "gvaluer"

В каталоге задачи необходимо создать файл valuer.cfg, в котором описывается структура групп тестов.

Файл valuer.cfg

Файл описывает структуру групп тестов. Файл имеет свободный формат, то есть элементы описания могут быть разделены произвольным количеством пробельных символов. Символ # используется для обозначения начала комментария. Символы, начиная от # и до конца текущей строки игнорируются. Синтаксис файла описывается следующей грамматикой:

file : [ global_definition ] { group_definition } EOF ;
global_definition : "global" "{" { global_option } "}" ;  /* определяет настройки для всех групп тестов (с 3.6.1) */
global_option :
    "stat_to_users"                                       /* выводить информацию о прохождении всех групп для участников турнира */
  | "stat_to_judges"                                      /* выводить информацию о прохождении всех групп для привилегированных пользователей */
  ;
group_definition : "group" GROUP_ID "{" { group_option } "}" ;
group_option :
    "tests" FIRST_TEST_NUM "-" LAST_TEST_NUM ";"          /* определяет диапазон номеров тестов в этой группе */
  | "score" SCORE ";"                                     /* определяет балл за группу тестов */
  | "test_score" SCORE ";"                                /* определяет балл за один тест */
  | "requires" GROUP_ID { "," GROUP_ID } ";"              /* перечисляет группы тестов, от которых зависит данная группа тестов */
  | "offline" ";"                                         /* тесты с off-line проверкой */
  | "sets_marked" ";"                                     /* установить флаг marked, если группа прошла (с 2.3.27) */
  | "skip" ";"                                            /* безусловно пропустить данную группу тестов (с 2.3.27) */
  | "sets_marked_if_passed" GROUP_ID { "," GROUP_ID } ";" /* установить флаг marked, если прошли указанные группы тестов (с 2.3.28) */
  | "pass_if_count" NUM ";"                               /* считать группу тестов прошедшей, если в ней прошло NUM тестов (с 2.3.28) */
  | "skip_if_not_rejudge" ";"                             /* пропустить группу тестов, если это не повторное тестирование посылки (REJUDGE) (с 3.0) */
  | "stat_to_judges" ";"                                  /* вывести статистику о прохождении данной группы в файл комментариев для судей (с 3.3.0) */
  | "stat_to_users" ";"                                   /* вывести статистику о прохождении данной группы в файл комментариев для участников турнира (с 3.6.1) */
  | "user_status" STATUS ";"                              /* установить пользовательский статус тестирования в указанный, если прошла данная группа тестов (с 3.3.0) */
  | "test_all" ";"                                        /* тестировать на всех тестах даже группы с групповой оценкой (с 3.3.0) */
  | "0_if" TEST { "," TEST } ";"                          /* оценить группу в 0 баллов, если прошли только указанные тесты (с 3.6.0) */
  | "0_if_subset" TEST { "," TEST } ";"                   /* оценить группу в 0 баллов, если прошли только тесты из указанного множества тестов (с 3.10.2) */
  ;

Пример файла приведен далее

group 0 {
    tests 1-2;
    score 0;
    test_score 0;
}

group 1 {
    tests 3-18;
    score 20;
}

group 2 {
    tests 19-26;
    score 20;
}

group 3 {
    tests 27-42;
    score 60;
    requires 1,2;
    offline;
}

Переменные окружения

Переменные окружения
Имя значение описание
EJUDGE любое значение должна быть установлена
EJUDGE_INTERACTIVE любое значение если установлена, см. interactive_valuer
EJUDGE_REJUDGE любое значение если установлена, то посылка перепроверяется
EJUDGE_USER_SCORE любое значение если установлена, см separate_user_score
EJUDGE_MARKED любое значение если установлена, см. valuer_sets_marked
EJUDGE_GROUP_MERGE любое значение если установлена, см. enable_group_merge
EJUDGE_LOCALE ID языка (int) если установлена, см. checker_locale