Вступление:
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 но нету доступа к командной строке? Если возможно — как?
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 чтобы с этим бороться.
В новой (0.8.5) версии testlib,
return 1;
помимо quitf() приводит к Check failed, что никуда не годится.UPD это при желании обходится, но некрасивым странным образом.
Ответ на второй вопрос — нет. У вас должна быть возможность залить файл с чекером на сервер. Обычно это делают через scp.
А оный файл с чекером точно-точно нельзя залить через Полигон? Пусть Полигон не_будет понимать всех тонкостей его работы, пусть это будет значить, что при выкачке из Полигона в разные экземпляры еджаджа прийдётся каждый раз повторять некоторую лишнюю работу... Но почему нельзя, если согласиться на такой (умеренный) уровень костыльности?
UPD: Таки можно. Правда, надо и заимпортить с Полигона, и потом ещё отдельно нажать
Check contest settings
.Использование одновременно и этого способа оценивания, и последней версии testlib.h требует хитровывернутых танцев с бубном, чтоб одновременно и добиться невывода в output чекера
wrong result
, и обойти "Защиту от потерянных quit/quitf и readEof".Это вроде как удалось (ценой костыльных наглых
testlibFinalizeGuard.quitCount++;
иhalt(WA_EXIT_CODE);
). Но можно ли это делать как-то лучше?