Add scoring jokes and algorithm section

This commit is contained in:
Dan
2025-12-11 13:20:01 +03:00
parent ceb2fb079f
commit 81653b058a
2 changed files with 47 additions and 0 deletions

View File

@@ -162,6 +162,34 @@
</div>
<div class="c bili-note">Если заметите результаты раньше — срочно создайте баг-репорт, мы откатим.</div>
</section>
<section class="builder-section scoring">
<div class="builder-section__title h1 c">Как ставят баллы за командный этап</div>
<p class="builder-section__description c">
Сообщение участника чата: «Вообще баллы за командный этап ставят по след принципу:
1) все, что комиссия понаписала в бумажках, увозят на мусоросжигательный завод;
2) согласно принципам геометрического распределения расставляют баллы и умножают на 3.14».
Дополнили до честного алгоритма:
</p>
<div class="code-card">
<pre><code class="code">def assign_team_scores(teams, seed=None):
# шаг 0: игнорируем бумажки, отправляем в мусоросжигательный завод
# шаг 1: геометрическое распределение задаёт редкость хороших баллов
rng = random.Random(seed)
scores = {}
for team in teams:
geom = rng.geometric(p=0.42) if hasattr(rng, "geometric") else 1 + int(rng.random() ** -1.3) % 8
raw = geom * 3.14 # шаг 2: умножаем на 3.14, чтобы придать научный вид
chaos = rng.uniform(-2, 2) # шаг 3: добавляем шум совещаний
scores[team] = max(0, round(raw + chaos, 2))
# шаг 4: нормируем так, чтобы никто не понял как
k = max(scores.values()) or 1
return {t: round(v / k * 100, 2) for t, v in scores.items()}</code></pre>
</div>
<p class="builder-section__description c">
Итог: распределение честное, воспроизводимость гарантирована любым сидом, кроме реального.
</p>
</section>
</main>
<footer class="footer">