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

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

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

Для расчёта сложности определим следующие параметры:

  • P(i)P(i) — медианное количество попыток до успешного решения задачи ii включительно среди всех решавших задачу;
  • S(i)S(i) — доля пользователей, решивших задачу ii, от всех решавших задачу, где 0S(i)10 \le S(i) \le 1.

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

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

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

Считаем оптимальным следующее распределение сложностей задач в Каталоге:

  • Лёгкие — 30%30\%;
  • Средние — 40%40\%;
  • Сложные — 30%30\%.

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

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

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

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

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

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

Предыдущая
Следующая