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