Привет, Codeforces!
Месяц назад я присоединился к работе чудесной команды Codeforces во главе с Михаилом Мирзаяновым (MikeMirzayanov). Традиционно, чтобы вникнуть во все тонкости этого проекта, моя работа началась с системы Polygon. Хотелось бы рассказать Вам о ее изменениях.
Для редактирования файлов в Polygon теперь используется Ace Editor. В нем есть приятная глазу подсветка синтаксиса и автодополнение (нужно нажать Ctrl + Space). В скором времени планируется внедрить этот редактор и в Codeforces.
К сожалению, Ace Editor не поддерживает скроллинг текста на телефонах и планшетах, поэтому для них останется старый редактор текста.
На странице валидатора, чекера и интеркатора появилась кнопка View Source, при нажатии на которую можно посмотреть исходный код файла. В основном, это удобно тем, что теперь можно посмотреть код стандартных чекеров.
В библиотеку Testlib также были внесены полезные изменения, которые поддержаны и в Polygon. Теперь можно указывать в валидаторе различные ограничения для различных тестсетов, а также для различных групп тестов. Для регистрации валидатора теперь нужно использовать registerValidation(argc, argv);
, а у validator появились методы validator.group()
и validator.testset()
.
Для проверки теста валидатором из командной строки с использованием тестсета и группы надо выполнить команду val.exe --testset "testsetName" --group "groupName" < testFile
.
Эти изменения удобно использовать, например, при подготовке школьных задач, где выделяются различные группы тестов, а также позволит использовать в раундах Codeforces мультитестсеты, запрещая использовать таковые для взломов.
Также упрощена проверка покрытия тестами различных случаев. Это поддерживается в Polygon во вкладке Invocation.
Если в валидаторе указать название переменной (это функция игнорируется для переменных, содержащих в названии цифры), то в случае, если нет тестов, в которых эта переменная достигает своего минимального или максимального значения, после выполнения Invocation, появится предупреждение об этом.
Кроме того в testlib/Polygon появилась дополнительная функциональность, которую мы назвали features. Зачастую (обычно координатору подготовки задач) требуется удостовериться, что тесты покрывают тот или иной случай (паттерны). Например, в задаче на графы, вероятно, надо быть уверенным, что есть тесты с несвязными графами и большими деревьями. Для того, чтобы гарантировать это теперь достаточно добавить в валидатор в начале декларацию поддержки двух фич addFeature("disconnected");
и addFeature("big-tree");
. В основной части валидатора, после считывания графа можно проверить правда ли он несвязный, и если несвязный, то зафиксировать этот факт вызовом feature("disconnected");
. Аналогично с деревом: если граф — большое дерево, то вызвать feature("big-tree");
.
Теперь Polygon при запуске invocation предупредит о том, если есть задекларированная фича, но такая, которая не встретилась ни в одном тесте. Это говорит о том (на нашем примере), что тесты не содержат несвязных графов и больших деревьев.
Введение Features будет полезно для человека, проверяющего готовую задачу или готовый контест. Но, как нам кажется, эта функция будет полезна и самим авторам задач.
Валидатор выводит информацию о достижении экстремальных значений переменных и использования features, если ему в командную строку вызова добавили --testOverviewLogFileName log.txt
. Именно эти логи разбирает и парсит Polygon, чтобы отобразить предупреждения.
В скором времени Вас ждут все новые и новые улучшения! Всем хорошего летнего настроения!