Привет, Codeforces!
Месяц назад я присоединился к работе чудесной команды Codeforces во главе с Михаилом Мирзаяновым (MikeMirzayanov). Традиционно, чтобы вникнуть во все тонкости этого проекта, моя работа началась с системы Polygon. Хотелось бы рассказать Вам о ее изменениях.
Для редактирования файлов в Polygon теперь используется Ace Editor. В нем есть приятная глазу подсветка синтаксиса и автодополнение (нужно нажать Ctrl + Space). В скором времени планируется внедрить этот редактор и в Codeforces.
К сожалению, Ace Redactor не поддерживает скроллинг текста на телефонах и планшетах, поэтому для них останется старый редактор текста.
На странице валидатора, чекера и интеркатора появилась кнопка View Source, при нажатии на которую можно посмотреть исходный код файла. В основном это удобно тем, что теперь можно в удобном виде посмотреть код стандартных чекеров.
В библиотеку Testlib также были внесены полезные изменения, которые поддержаны и в Polygon. Теперь можно указывать в валидаторе различные ограничения для различных тестсетов, а также для различных групп тестов. Для регистрации валидатора теперь нужно использовать registerValidation(argc, argv);
, а у validator появились методы validator.group()
и validator.testset()
.
Для проверки теста валидатором из командной строки нужно выполнить команду val.exe --testset "testsetName" --group "groupName" --testOverviewLogFileName "logFileName" < testName
.
Эти изменения удобно использовать, например, при подготовке школьных задач, где выделяются различные группы тестов, а также позволит использовать в раундах Codeforces мультитестсеты без проблем со взломами.
Также упрощена проверка покрытия тестами различных случаев. Это поддерживается в Polygon во вкладке Invocation.
Если в валидаторе указать название переменной (это функция игнорируется для переменных, содержащих в названии цифры), то в случае, если нет тестов, в которых эта переменная достигает своего минимального или максимального значения, после выполнения Invocation, появится предупреждение об этом.
Если нужно удостовериться, например, что есть тест где значение переменной n четно, нужно добавить в валидатор новую Feature addFeature("even-n")
, а после считывания значения переменной n нужно написать: if (n % 2 == 0) feature("even-n);
.
Введение Feature будет полезно для человека, проверяющего готовую задачу или готовый контест. Но, как нам кажется, эта функция будет полезна и самим авторам задач.
В скором времени Вас ждут все новые и новые улучшения! Всем хорошего летнего настроения!