---
metadata:
  - name: generator
    content: Diplodoc Platform v5.47.1
alternate:
  - https://coderun.yandex.ru/docs/ru/problems/difficulty.md
---
> **Documentation Index:** Fetch the complete configuration index at https://coderun.yandex.ru/docs/ru/llms.txt

# Сложность задач

Чтобы отображаемая участникам сложность задач не зависела только от экспертного мнения авторов и редакторов задач, в CodeRun используется **динамический расчёт сложности**. Динамическая сложность зависит от того, как пользователи сервиса решают задачи.

## Механика расчёта показателя сложности задачи

Для расчёта сложности определим следующие параметры:
- $P(i)$ — медианное количество попыток до успешного решения задачи $i$ включительно среди всех решавших задачу;
- $S(i)$ — доля пользователей, решивших задачу $i$, от всех решавших задачу, где $0 \le S(i) \le 1$.

Для каждой задачи считаем **показатель сложности задачи** $M(i) = 5 \cdot P(i) + 95 \cdot (1 - S(i))$.

Таким образом, чем больше решающих не смогли решить задачу и чем больше попыток необходимо до получения заветного вердикта «Решение зачтено», тем выше показатель сложности задачи.

## Распределение задач по категориям

Считаем оптимальным следующее распределение сложностей задач в Каталоге:
- **Лёгкие** — $30\%$;
- **Средние** — $40\%$;
- **Сложные** — $30\%$.

Также вводим специальную начальную сложность **«Не определена»** для задач, которые попытались решить менее 50 пользователей сервиса.

Сортируем все задачи сервиса по возрастанию показателя сложности задач $M(i)$, убираем из отсортированного списка задачи со сложностью «Не определена», а затем делим список на кластеры в пропорции $30-40-30$. Тогда первые $30\%$ задач — лёгкие, следующие $40\%$ задач — средние, оставшиеся $30\%$ — сложные.

## Переходный период

При таком подходе задачи на границах кластеров будут часто менять свою сложность (например, при появлении новых успешных решений). Поэтому, чтобы задача перешла в другой кластер (получила новую сложность), ей нужно пройти порог в $2.5\%$ внутри этой новой сложности. То есть для повышения сложности нужно пересечь отметки в $32.5\%$ и $72.5\%$, для понижения — $27.5\%$ и $67.5\%$ соответственно.

## Периодичность обновлений

Перерасчёт динамической сложности задач производится раз в сутки.
