Формулы расчета рейтинга и т.д.

В сводных таблицах показывается рейтинг, активность, рейтинг на codeforces, взвешенное изменение рейтинга на codeforces и взвешенное количество контестов на codeforces.

Рейтинг

(Кому интересно, конкретный код расчета рейтинга и активности есть вот здесь.)

Рейтинг определяется просто набором решенных задач. А именно, каждая задача стоит некоторое фиксированное количество баллов рейтинга, определяемое уровнем этой задачи.

Задача уровня 1А стоит $2.5$ балла рейтинга. Задача уровня 2А стоит $2.5^2$ баллов рейтинга. Задача уровня 3А стоит $2.5^3$ баллов рейтинга, и т.д. Задача уровня $N$А стоит $2.5^N$ баллов рейтинга.

Задачи промежуточных уровней стоят промежуточное число баллов. А именно, задача уровня $N$Б стоит $2.5^{N+0.25}$ баллов рейтинга, уровня $N$В — $2.5^{N+0.5}$, уровня $N$Г — $2.5^{N+0.75}$ баллов.

Задачи с региональных олимпиад считаются как задачи с уровня 3А. Если одна и та же задача есть на нескольких уровнях, то учитывается только самый высокий уровень этой задачи.

При выводе рейтинга в таблицы он округляется до целых, но при подсчете все считается вещественными числами.

Табличка стоимости (округленная до двух знаков после запятой):

          А          Б          В          Г
 1       2.50       3.14       3.95       4.97
 2       6.25       7.86       9.88
 3      15.62      19.65      24.71      31.07
 4      39.06      49.12      61.76
 5      97.66     122.80     154.41     194.16
 6     244.14     306.99     386.02
 7     610.35     767.48     965.05    1213.49
 8    1525.88    1918.69    2412.63
 9    3814.70    4796.73    6031.57    7584.29
10    9536.74   11991.82   15078.91
11   23841.86   29979.55   37697.29   47401.83
12   59604.64   74948.87   94243.22
13  149011.61  187372.18  235608.05  296261.43

Идеология

Баллы за задачу растут очень быстро, специально для того, чтобы на высоких уровнях было не так важно, что вы решали на младших уровнях. Например, если вы уже на уровне 5, то, скорее всего, задачи уровня 1 не представляют для вас вообще никакой сложности. Поэтому не важно, сколько вы решили на уровне 1. И это получается за счет того, что задачи уровня 5 стоят намного больше, чем задачи уровня 1.

Активность

(Конкретный код расчета — по той же ссылке)

Активность — показатель того, насколько активно вы решали задачи последнее время. Каждая задача, которую вы когда-либо решали, дает свой вклад в активность. У каждой задачи есть "базовые" баллы активности — это квадратный корень из номера уровня. (У всех задач уровня 1 "базовый" балл равен 1, у каждой задачи уровня 2 базовый балл равен 1.4, и т.д.) Этот базовый балл умножается на $0.55^{t/\tau}$, где $t$ — время, прошедшее с того момента, как вы сдали эту задачу, а $\strut\tau$ равно 1 неделе. Например, если вы сдали задачу только что, то базовый балл учитывается полностью. Если вы сдали задачу ровно сутки назад, то базовый балл умножается на $0.55^{1/7}\approx 0.92$. Если вы сдали задачу ровно две недели назад, то базовый балл умножается на $0.55^2\approx0.3$. Если вы сдали задачу 8 недель назад, то базовый балл умножается на $0.55^8\approx0.0083$, т.е. эта задача уже почти не учитывается.

Суммарное значение активности по всем задачам делится на 0.45, в результате получается эдакое среднее число "задач" в неделю.

Получается, что на самом деле учитываются только недавно сданные задачи, а те, которые вы решали давно, не учитываются. Но при этом падение этой "учитываемости" плавное. Если вы перестанете решать задачи, то ваша активность будет постепенно падать со временем (хотя и никогда не станет ровно нулем). В таблицах активность выводится округленной до одного знака после запятой, но на самом деле активность — настоящее вещественное число.

В ряде сводных таблиц сначала указываются школьники, активность которых больше 0.1, и только потом все остальные.

Цвет

Имена школьников в таблицах рисуются цветом, определяемым их рейтингом и активностью. А именно, активность определяет яркость цвета (от почти черного до насыщенного), а рейтинг определяет оттенок (от фиолетового через все цвета радуги до красного). Например, школьник с рейтингом 1 и активностью 10 будет иметь ярко-фиолетовый цвет, школьник с рейтингом 1 и активностью 0.1 будет иметь темно-фиолетовый цвет, школьник с рейтингом примерно 100000 и активностью 10 будет иметь ярко-зеленый цвет, а с активностью 0.1 — темно-зеленый цвет; красный цвет соответствует рейтингу 4500000.

Конкретная формула: в модели HSV цвет участника имеет следующие компоненты:

$h = k\cdot \log(r+r_0) + b$
$v = 0.3 + 0.7 \cdot \log(a+1) / \log(A + 1)$
$s = 1$

здесь $r$ и $a$ — рейтинг и активность, $A=7$, $r_0=200$, а константы $k$ и $b$ подбираются так, чтобы двух опорных точек (рейтинг 600 и рейтинг 4500000) получались правильные цвета (сине-фиолетовый и красный).

Еще есть мелкие поправки на краях возможных интервалов значений. Код здесь.

Параметры codeforces

Код

Рейтинг на CF берется прямо с CF, обновляется раз в сутки.

Взвешенное количество контестов вычисляется так: каждый написанный вами контест дает вклад, равный $0.5^{t/\tau}$, где $t$ — время, прошедшее с написания контеста, а $\tau$ равно 4 неделям. Все такие вклады суммируются. Т.е. только что написанный контест дает вклад 1, контест, написанный 4 недели назад — 0.5, и т.д.

Взвешенное изменение рейтинга вычисляется так: каждый написанный вами контест дает вклад, равный $\delta\cdot0.5^{t/\tau}$, где $\delta$ — изменение рейтинга в этом контесте, $t$ — время, прошедшее с написания контеста, а $\tau$ равно 4 неделям. При этом самый первый в жизни написанный контест не учитывается, т.к. там изменение рейтинга — это бессмысленная вещь.