Skip to content

Отправка решений

Как это работает

  1. Пользователь отправляет код через Submit (POST /api/v1/problems/{id}/submit).
  2. Submission попадает в очередь RabbitMQ с указанием языка (python, javascript, go, java).
  3. Per-language checker-воркер забирает задачу.
  4. Код запускается в Docker-контейнере с seccomp-профилем, без сети, с CPU/memory-лимитами.
  5. Прогоняются security-тесты и функциональные тесты.
  6. Вердикт отправляется обратно в API.
  7. Фронтенд получает обновление через WebSocket (/api/v1/submissions/ws/{id}).

Вердикты

Вердикт Что значит
Accepted Уязвимость закрыта, функциональные тесты прошли. Баллы начислены.
Wrong Answer Security-тест нашёл уязвимость или функциональный тест упал.
Runtime Error Код упал при выполнении (exception, segfault, неправильный exit code).
Time Limit Exceeded Контейнер не уложился в лимит (обычно 30 секунд).
Memory Limit Exceeded Превышен лимит RAM.
Compilation Error Код не компилируется (для Go / Java).
Internal Error Редкий случай: проблема в инфраструктуре. Попробуйте повторить.

Ограничения

  • Rate limit: N отправок в минуту (точные значения зависят от тарифа).
  • Размер кода: ограничен — обычно достаточно для типичной задачи.
  • Таймаут выполнения: 30 секунд на контейнер.

AI-анализ

Если включён AI-анализ (настройка тарифа), после Wrong Answer вы получаете:

  • Объяснение корня проблемы.
  • Указание на конкретные строки в вашем коде.
  • Ссылки на лучшие практики.

Результат кешируется на 24 часа — повторная отправка того же кода не стоит AI-кредитов.

История отправок

В профиле пользователя доступна история всех submissions: время, задача, язык, вердикт, код. Удобно для ретроспективы по проваленным задачам.

Полезные ресурсы

После Accepted открывается блок Полезные ресурсы со ссылками двух типов:

  • Defense — как правильно защищаться от этого класса уязвимостей (OWASP Cheat Sheets, CWE, статьи вендоров).
  • Practice / Exploitation — где можно отработать эксплойт (PortSwigger Web Security Academy, HackTricks, CTF).

Ресурсы подтягиваются по типу уязвимости — разные для XSS, SQLi, CSRF и т.п.