Difference between revisions of "Gvaluer"

From EjudgeWiki
Line 24: Line 24:
 
  group_definition : "group" GROUP_ID "{" { group_option } "}" ;
 
  group_definition : "group" GROUP_ID "{" { group_option } "}" ;
 
  group_option :
 
  group_option :
     "tests" FIRST_TEST_NUM "-" LAST_TEST_NUM ";" /* определяет диапазон номеров тестов в этой группе */
+
     "tests" FIRST_TEST_NUM "-" LAST_TEST_NUM ";"         /* определяет диапазон номеров тестов в этой группе */
   | "score" SCORE ";"                           /* определяет балл за группу тестов */
+
   | "score" SCORE ";"                                     /* определяет балл за группу тестов */
   | "test_score" SCORE ";"                       /* определяет балл за один тест */
+
   | "test_score" SCORE ";"                               /* определяет балл за один тест */
   | "requires" GROUP_ID { "," GROUP_ID } ";"     /* перечисляет группы тестов, от которых зависит данная группа тестов */
+
   | "requires" GROUP_ID { "," GROUP_ID } ";"             /* перечисляет группы тестов, от которых зависит данная группа тестов */
   | "offline" ";"                               /* тесты с off-line проверкой */
+
   | "offline" ";"                                         /* тесты с off-line проверкой */
   | "sets_marked" ";"                           /* установить флаг marked, если группа прошла (с [[Изменения в версии 2.3.27|2.3.27]]) */
+
   | "sets_marked" ";"                                     /* установить флаг marked, если группа прошла (с [[Изменения в версии 2.3.27|2.3.27]]) */
   | "skip" ";"                                   /* безусловно пропустить данную группу тестов (с [[Изменения в версии 2.3.27|2.3.27]]) */
+
   | "skip" ";"                                           /* безусловно пропустить данную группу тестов (с [[Изменения в версии 2.3.27|2.3.27]]) */
 +
  | "sets_marked_if_passed" GROUP_ID { "," GROUP_ID } ";" /* установить флаг marked, если прошли указанные группы тестов (с [[Изменения в версии 2.3.28|2.3.28]]) */
 +
  | "pass_if_count" NUM ";"                              /* считать группу тестов прошедшей, если в ней прошло NUM тестов (с [[Изменения в версии 2.3.28|2.3.28]]) */
 
   ;
 
   ;
  

Revision as of 16:10, 5 October 2013

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

Данный раздел - экспериментальный.

Компиляция

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

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

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

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

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

valuer_cmd = "../gvaluer"

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

Файл valuer.cfg

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

file : { group_definition } EOF ;
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) */
  ;

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

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;
}