Исправляем бардак в тестирующих системах

Revision ru3, by Death_on_2_Legs, 2022-07-24 17:42:50

...или «как тестирующие системы борются с мельницами»

Привет, Codeforces!

Я уверен в том, что те из вас, кто пытался провести соревнование по программированию или написать свою утилиту для управления контестами знают о проблемах мешающих этому. Есть множество несовместимых форматов, никто не знает как именно должно все работать, Polygon полон невзрачных и, казалось бы, несовместимых опций, ej-polygon, похоже, никогда не работает корректно, в архивы жюри в каждом конкретном случае для корректной работы приходится вносить изменения, необычные виды задач требуют постоянной поддержки и хаков, и так далее.

Хватит препираться, я здесь чтобы попробовать решить эти проблемы!


Для начала, я представляю новый формат, который назову формат problem.xml, и который, как несложно догадаться, основан на формате Polygon. Я добавил по одному-два специальных случая там и тут, чтобы убедиться, что он на 99% совместим с архивами генерируемыми Polygon сейчас. Однако, в отличие от формата Polygon, он полностью документирован и допускает как можно меньше свободы трактования без ущерба эффективности.

Этот формат позволяет создавать практически произвольные типы задач, в дополнение к обычным типам: стандартному, интерактивному, двойному запуску и задачам с грейдерами. Например:

  • Задачи с пользовательскими скорерами (лучше известными как вальюеры благодаря Ejudge) поддерживаются. Это значит, что баллы за решение не обязательно равны сумме баллов за каждый тест; наоборот, любые соотношения возможны, в том числе отрицательные оценки, оценка программ по эффективности, и даже «напишите программу, которая выводит ваш юзерейм».

  • То, что я буду называть формульные задачи, когда решение пользователя выводит формулу или универсальный алгоритм, который потом выполняется жюри.

  • Опциональная компиляция на каждом тесте, которая пригодится на некоторых контестах по практической разработке.

  • Задачи только с выводом, то есть от пользователя просят отправить ZIP архив, который содержит ответы на каждый тест

  • Произвольные стратегии, что позволяет проблемсеттерам обобщать все вышенаписанное, так как им кажется нужным: задачи с тройным запуском, тестирование во время компиляции, а также подобные CTF соревнования, и все это на расстоянии нескольких строк кода.

  • Арбитраж, позволяющий создавать задачи-марафоны, то есть задачи в которых баллы за решение могут зависеть от результатов других решений.

Черновик спецификации доступен здесь: https://github.com/imachug/problem-xml-specs. Хотя я думаю, что спецификация практически окончена и публикую ее здесь для большей обозримость, я буду рад услышать ваши мысли по этому поводу и изменить что-то, если надо!

Tags polygon, ejudge, pcms2, codeforces

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru9 Russian purplesyringa 2022-07-24 18:13:10 8
en9 English purplesyringa 2022-07-24 18:12:55 3 Tiny change: 'visibility--your input' -> 'visibility—your input'
en8 English purplesyringa 2022-07-24 18:11:10 0 (published)
ru8 Russian purplesyringa 2022-07-24 18:10:53 0 (опубликовано)
en7 English purplesyringa 2022-07-24 18:08:42 4 Tiny change: 'ssary!\n\n\n\n---\n\' -> 'ssary!\n\n---\n\'
ru7 Russian purplesyringa 2022-07-24 18:04:59 7 Мелкая правка: ' программы). Это зна' -> ' программы оценки). Это зна'
ru6 Russian purplesyringa 2022-07-24 18:04:17 275
en6 English purplesyringa 2022-07-24 18:02:23 253
ru5 Russian purplesyringa 2022-07-24 17:59:30 525
ru4 Russian purplesyringa 2022-07-24 17:52:21 921
ru3 Russian Death_on_2_Legs 2022-07-24 17:42:50 2 Мелкая правка: 'ьницами»\nПривет, ' -> 'ьницами»\n\nПривет, '
ru2 Russian Death_on_2_Legs 2022-07-24 17:42:00 2889
en5 English purplesyringa 2022-07-24 17:24:10 34 Tiny change: 'visibility: [user:ge' -> 'visibility--your input is highly appreciated: [user:ge'
ru1 Russian Death_on_2_Legs 2022-07-24 17:23:54 3084 Первая редакция перевода на Русский (сохранено в черновиках)
en4 English purplesyringa 2022-07-24 17:21:03 502
en3 English purplesyringa 2022-07-24 17:14:37 212
en2 English purplesyringa 2022-07-24 16:55:02 9 Tiny change: 'ems fight issues no sane' -> 'ems fight obstacles no sane'
en1 English purplesyringa 2022-07-24 16:43:35 2736 Initial revision (saved to drafts)