Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Начало работы с ada-judge

ada-judge – это совершенно новая платформа для проведения соревнований по программированию, написанная на языке Rust. Она не зависит от сторонних сервисов, таких как Codeforces Polygon, и является полностью самостоятельной. Основной функционал ada-judge включает:

  • Создание контестов в формате IOI
  • Создание задач, в том числе интерактивных и с двойным запуском
  • Тестирование посылок на языках Rust, C++, C и Go с изолированным запуском решений
  • Администрирование контестов, задач и пользователей

Развёртывание

Для того, чтобы развернуть ada-judge на своём сервере, необходимы docker и git.

  1. Склонируйте основнойgit-репозиторий ada-judge:
    git clone https://codeberg.org/oneprog/ada-judge
    
    Или зеркало (оно обновляется раз в 8 часов):
    git clone https://github.com/OneProgGit/ada-judge
    
  2. Перейдите в директорию со склонированным репозиторием и создайте там конфигурационный файл .env, заполните его в следующем формате:
    # Данные PostgreSQL
    POSTGRES_USER=
    POSTGRES_PASSWORD=
    POSTGRES_DB=
    # Данные Redis
    REDIS_PASSWORD=
    REDIS_USER=
    REDIS_USER_PASSWORD=
    # Параметры JWT
    JWT_SECRET=
    JWT_EXP_HOURS=
    # Имя контейнера песочницы `submissions-judger`
    SANDBOX_IMAGE=sandbox
    # Количество параллельных инвокеров
    WORKERS_COUNT=
    
  3. Создайте директорию submissions_envs, где будут храниться посылки.
  4. Соберите и запустите ada-judge:
    docker-compose build; docker-compose up -d
    
  5. ada-judge готов к использованию!

ada-judge-app

ada-judge-app – это нативное GUI-приложение для ada-judge, доступное для Linux, Mac и Windows. Есть два способа его установки:

  1. Готовые бинарники. Самый простой способ, но обновления поступают реже, а также недоступны некоторые платформы, такие как Windows/Linux ARM.
  2. Через cargo. В этом случае компиляция будет происходить на вашем устройстве. Для этого способа необходим тулчейн Rust версии 1.97.0 и новее. Выполните в терминале команду:
    cargo install ada-judge-app
    

ada-judge-cli

ada-judge-cli – это терминальное приложение, созданное для упрощения создания задач. Для установки необходим тулчейн Rust версии 1.97.0 и новее. Выполните в терминале команду:

cargo install ada-judge-cli

Регистрация

Самый простой способ создать аккаунт ada-judge – использовать ada-judge-app.

  1. Откройте его:
    ada-judge-app
    
  2. Нажмите создать аккаунт >>:
  3. Заполните поля и нажмите создать аккаунт >>:
  4. Чтобы получить права владельца, необходимо, находясь в директории с репозиторием, выполнить:
    > docker-compose exec -t postgres bash
      > psql -U <пользователь PostgreSQL> -d <база данных PostgreSQL>
        > update users set admin_level='owner' where id = <ваш id>;
        UPDATE 1
    

Создание контестов

Для того, чтобы создать контест, в ada-judge-app нужно:

  1. Нажать на кнопку создать + на главной странице:
  2. В появившемся окне заполнить нужные поля и нажать создать +:

Создание задач

ada-judge позволяет создавать задачи удобно и быстро, сочетая ada-judge-cli и ada-judge-app.

Шаги с CLI

  1. Перейдите в директорию, где будут лежать ваши задачи
  2. Создайте шаблон задачи:
    ada-judge-cli problem ./<название задачи> prepare
    
  3. Типичная структура задачи такая:
    ├── checker
    ├── config.toml
    └── tests
        ├── <тест>
        │   ├── in # входные данные теста
        │   └── out # выходные данные теста
    
  4. Отредактируйте config.toml в следующем формате:
    name = "<название задачи>"
    type = "<тип задачи>" # default -- обычная задача, interactive -- интерактивная, run_twice -- с двойным запуском
    contest_id = <id контеста>
    problem_index = <индекс задачи в контеста, начиная с 0>
    time_limit_ms = <лимит по времени, мс>
    memory_limit_mb = <лимит по памяти, МБ>
    checker_path = "<путь до бинарника чекера>"
    tests_path = "<путь до директории с тестами>"
    
    # Подгруппы
    [[subgroups]]
    type = "<тип подгруппы>" # sample -- примеры, main - основная
    tests = [<тесты подгруппы>]
    score = <баллы за подгруппу>
    depends_on = [<индексы подгрупп, прохождение которых требуется для тестирование на этой подгруппе, начиная с 0 в порядке их следования в файле конфига>]
    
  5. Можно добавить тесты к задаче:
    ada-judge-cli problem <название задачи> insert-tests <начиная с> <заканчивая на, включительно>
    
  6. Можно протестировать решение на тестах:
    ada-judge-cli problem <название задачи> run <путь к бинарнику решения> <начиная с> <заканчивая на, включительно>
    
  7. Архивируйте задачу:
    ada-judge-cli problem <название задачи> zip
    

Шаги с GUI

  1. Откройте вкладку Задачи:
  2. Нажмите выбрать задачу для добавления...:
  3. Выберите архив задачи
  4. Нажмите + создать задачу