1. Что именно за проблема
Во время раундов появилась конкретная схема: участник получает у LLM готовый код и просто отправляет его, почти не понимая. Это не всегда ловится плагиатом: человек может изменить переменные, поменять местами некоторые части кода.
2. Идея
Xeppelin — open-source tool, изначально сделанный для ICPC, который:
- запускается локально перед контестом
- логирует изменения файлов в рабочей директории
- сохраняет таймлайн разработки (когда и как менялся код)
- не записывает экран, клавиатуру, сеть или вкладки
- после контеста строит визуализацию активности
Это не мой tool, но вы можете найти его тут
3. Что именно предлагается для Codeforces (реализация, не идея)
Предложение — использовать Xeppelin как внешний источник поведенческих данных, без вмешательства в CF-инфраструктуру. Поток работы:
Участник запускает Xeppelin перед раундом
Решает задачи как обычно (локально, в IDE)
После раунда Xeppelin выдаёт:
- лог изменений файлов
- таймлайн активности
Этот лог можно автоматически связать с CF-сабмитами (по contestId + handle)
CF при этом:
- не меняет процесс сабмита
- не получает данные в реальном времени
- не требует изменений в CF и может быть полностью опциональным: участник сам решает, прикладывать ли activity log.
4. Какие именно данные получаются
Из Xeppelin доступны чёткие и простые метрики:
- количество изменений файла до AC
- размеры отдельных изменений
- время активной работы vs простои
- был ли код написан постепенно или “одним куском”
- повторяется ли одинаковый паттерн по нескольким задачам
Это метаданные процесса, не содержимое экрана и не ввод пользователя.
5. Почему это хорошо ловит именно читеров:
Типичный паттерн копипаста или списывания LLM-решения:
- долгий простой
- один большой апдейт файла
- почти отсутствие правок
- сразу AC
Этот паттерн:
- редко встречается у людей, которые реально пишут код
- хорошо виден именно в файловом таймлайне
- плохо подделывается без реального переписывания решения
6. Как это можно использовать на практике (без банов)
Xeppelin не доказательство, а сигнал. Реалистичные применения:
- дополнительный input для пост-контест анализа
- основание для provisional rating в явно аномальных случаях
- инструмент для модераторов/авторов, а не авто-наказание
7. Почему это безопасно для CF
- нет прокторинга
- нет вмешательства в сабмиты
- нет обязательных установок
- нет real-time нагрузки
Xeppelin работает полностью снаружи, CF получает данные после контеста или вообще только по запросу.
8. Ограничение и компромиссное решение
Недостаток
Очевидный минус такого подхода — невозможно и не нужно покрывать 100% участников. Часть людей не сможет или не захочет использовать внешний логгер (устройства, политика установки, личные причины).
Попытка сделать такой софт обязательным для всех rated-раундов действительно слишком жёсткая и может навредить доступности Codeforces.
Компромиссное решение (без изменения базовой системы CF)
Вместо этого предлагается следующий вариант:
- Рейтинг остаётся один и тот же, как сейчас
- У каждого результата появляется статус:
Verified — если участник приложил activity log (Xeppelin)
- Unverified — обычное участие, без логов
Это не отдельный рейтинг и не “вторая лига”
- Это дополнительный слой доверия, похожий по духу на unofficial standings или verified badges
Практически это даёт:
- возможность фильтровать лидерборд по Verified
- приоритет доверия к verified-результатам
- меньше provisional-проверок для verified участников
При этом:
- никто не теряет доступ к рейтингу
- формат раундов не ломается
- честным участникам появляется понятный стимул подтверждать процесс
9. TL;DR
Есть уже существующий инструмент (Xeppelin), который логирует процесс разработки без слежки. Его можно напрямую связать с CF-раундами и использовать как дополнительный сигнал против копипаста LLM-решений — без банов и без ломания платформы.















