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

Revision ru4, by purplesyringa, 2022-07-24 17:52:21

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

Привет, Codeforces!

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

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


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

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

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

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

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

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

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

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

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


Тегаю некоторых людей для лучшей видимости--ваш вклад будет очень полезен: geranazavr555, MikeMirzayanov, grphil, andrewzta, dkirienko.

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)