Skip to content
/ poly3 Public

Веб-конвертер задач из Полигона в BACS

Notifications You must be signed in to change notification settings

jvmusin/poly3

Repository files navigation

Полибакс

Сервис для перекидывания задач из Codeforces.Polygon в BACS.

Kotlin CI with Gradle Kotlin JS IR supported

Мотивация

В наше время все задачи подготавливаются в системе Polygon. В Полигоне удобно писать условия задач, готовить тесты, тестировать авторские решения и много всего остального, что связано с подготовкой задач. Полигон имеет тесную интеграцию с Codeforces, благодаря чему задачи из полигона можно использовать в Codeforces без каких-либо проблем.

Полигон позволяет скачивать задачи в некотором формате в виде .zip файла, содержащего все данные о задаче. Полигон и Бакс понимают разные форматы задач, поэтому просто взять архив из Полигона и положить в Бакс нельзя, необходимо сначала реструктурировать архив так, чтобы его понял Бакс, и уже потом закидывать этот архив в Бакс.

Вся эта работа абсолютно бессмысленна, отнимает время, нервы, а при отсутствии опыта в такой реструктуризации можно и вовсе поехать кукухой не смочь закинуть задачу.

И тут на помощь приходит Полибакс!

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

Правильное тестирование решений — очень важная составляющая при составлении задач. Технические характеристики системы, на которой тестируются решения на Полигоне разнятся с этими же характеристиками на Баксе, поэтому при недосмотре таких мелочей может произойти ситуация, когда решение не должно проходить все тесты, и на Полигоне оно действительно не проходит, а на Баксе вдруг решение работает на полный балл. Возможна и обратная ситуация. В любом случае этих недочётов быть не должно, но при ручном перекидывании задач их легко допустить.

Нужно учитывать, что конвертация происходит не мгновенно, потому что из .zip архива достать все данные по задаче невозможно, приходится лезть в Polygon через Polygon API и вытаскивать нужные данные оттуда.

Возможности Полибакса

Валидация задач

Если задача оформлена некорректно, то конвертацию задачи произвести в принципе невозможно и сервис в этом случае скажет об ошибке и укажет, как её исправить.

К некорректностям относятся:

  • Отсутствие собранного пакета для последней ревизии задачи;
  • Отсутствие условия вообще или .pdf версии в частности;
  • Некорректная нумерация тестов;
  • Некорректно проставленные группы тестов;
  • И многое другое.

Добавление префикса или суффикса к имени задачи

При перекидывании задачи, к её названию можно дописать префикс и/или суффикс. Это может быть полезно, например, чтобы иметь одну и ту же задачу в нескольких экземплярах с разными ограничениями. Также это может быть полезно при подготовке целого контеста, чтобы каждой задаче контеста добавить общий префикс и затем понимать, что задача относилась к конкретному соревнованию.

Изменение ограничений на задачу

При заливании задачи на Бакс можно изменить ограничения по времени и по памяти. Это может быть полезно, если решения тестируются на Баксе быстрее/медленнее, чем на Полигоне. С помощью нивелировать эту разницу.

Тестирование решений

Если с задачей всё в порядке, то можно протестировать решения на задачу. Иногда случается так, что решения работают на Баксе, но не работают на Полигоне. Это можно легко увидеть, нажав на кнопку тестирования и дождавшись окончания тестирования решений.

Перекидывание задач в Бакс

Можно задачу и не тестировать, а просто закинуть в бакс.

Адаптация к новым тестирующим системам

Полибакс хоть и завязан на баксе на данный момент, но добавление новых внешних тестирующих систем не должно быть проблемой, потому что в основе конвертера лежит IR-представление задач, не завязанное ни на какую систему. Всё, что нужно сделать для добавления новых тестирующих систем — написать конвертер из IR-представления задачи в то представление, которое понимает нужная тестирующая система.

Использование

Чтобы использовать Полибакс, потребуется:

  • Завести аккаунт на Полигоне и в настройках получить API-ключ и вместе с ним SECRET;
    • Прописать в системных переменных POLYGON_APIKEY и POLYGON_SECRET полученные ключи.
  • Завести аккаунт в архиве бакса (сделать это без связей не выйдет);
    • Прописать логин и пароль от архива в системных переменных BACS_USERNAME и BACS_PASSWORD.
  • Получить APIKEY от Сайбона (сделать это без связей не выйдет).
    • Прописать его в системную переменную SYBON_APIKEY.

Если не хочется писать все вышеописанные ключи в системных переменных, можно создать файл src/jvmMain/resources/keys.conf и в формате, аналогичном env_keys.conf, прописать все ключи в нём.

Чтобы собрать проект, запускаем ./gradlew stage, и затем можно запускать скрипт, сгенерированный в build/install/poly3/bin/poly3, он запустит весь сервис. Там лежат две версии скрипта — под Windows с расширением .bat и под UNIX без расширения. Никаких внешних зависимостей Полибакс не использует.

После запуска заходим на http://localhost:8080/ и наслаждаемся.

Releases

No releases published

Packages

No packages published

Languages