Блог пользователя IlyaCk

Автор IlyaCk, 12 лет назад, По-русски

Вступление:

ejudge scoring checker — балл за задачу (или за каждый тест) выставляется проверяющей программой. Чекер может оценивать тест в любое количество баллов от 0 и до максимального балла за данный тест. ( http://ejudge.ru/wiki/index.php/Serve.cfg:problem:scoring_checker )

Суть вопроса:

1) Может ли кто-то выслать/расшарить несекретный рабочий пример такого чекера? Желательно, совместимого с testlib, используемой на Polygon.

2) Возможно ли вообще всё это настроить, если есть ejudge version 2.3.24, и к ней есть доступ через cgi-bin/serve-control но нету доступа к командной строке? Если возможно — как?

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
12 лет назад, # |
Rev. 6   Проголосовать: нравится 0 Проголосовать: не нравится

http://pastebin.com/iS3dcGPk

Это еще и ответ перезаписывает на текущий лучший.

В serve-control надо установить:
1. Global settings -> Scoring system: Kirov
2. Problems -> Default score for 1 passed test: сколько надо
3. Problems -> Penalty for a submission: 0
4. Problems -> advanced -> Checker calculates score: Yes
Про версию ничего не знаю.

UPD. Ejduge не умеет делать вещественный score за тест, и в конце округлять сумму. Я домножал на 1000 все score чтобы с этим бороться.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    В новой (0.8.5) версии testlib, return 1; помимо quitf() приводит к Check failed, что никуда не годится.

    UPD это при желании обходится, но некрасивым странным образом.

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Ответ на второй вопрос — нет. У вас должна быть возможность залить файл с чекером на сервер. Обычно это делают через scp.

  • »
    »
    12 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    А оный файл с чекером точно-точно нельзя залить через Полигон? Пусть Полигон не_будет понимать всех тонкостей его работы, пусть это будет значить, что при выкачке из Полигона в разные экземпляры еджаджа прийдётся каждый раз повторять некоторую лишнюю работу... Но почему нельзя, если согласиться на такой (умеренный) уровень костыльности?

    UPD: Таки можно. Правда, надо и заимпортить с Полигона, и потом ещё отдельно нажать Check contest settings.

»
12 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Использование одновременно и этого способа оценивания, и последней версии testlib.h требует хитровывернутых танцев с бубном, чтоб одновременно и добиться невывода в output чекера wrong result, и обойти "Защиту от потерянных quit/quitf и readEof".

Это вроде как удалось (ценой костыльных наглых testlibFinalizeGuard.quitCount++; и halt(WA_EXIT_CODE);). Но можно ли это делать как-то лучше?