Skip to content

Commit 3640dd0

Browse files
committed
Dodano listę zadań posortowaną po średnim wyniku
1 parent ab60ebd commit 3640dd0

File tree

7 files changed

+11325
-0
lines changed

7 files changed

+11325
-0
lines changed

statystyki/README.md

Lines changed: 503 additions & 0 deletions
Large diffs are not rendered by default.

statystyki/gen_ranking.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import json
2+
from collections import defaultdict
3+
print("# Zadania uszeregowane po średnim wyniku zawodnika")
4+
print ("Disclaimer: Wyniki są zawyżone - wliczają tylko zawodników, którzy osiągneli **próg** (przejścia do następnego etapu bądź otrzymania tytulu finalisty z wyróżnieniem)")
5+
6+
# wczytanie pliku JSON
7+
with open("wyniki.json", "r", encoding="utf-8") as f:
8+
data = json.load(f)
9+
10+
# struktura: etap -> lista zadań
11+
etapy = defaultdict(list)
12+
13+
for key, zadanie in data.items():
14+
edycja = zadanie["edycja"]
15+
etap = zadanie["etap"]
16+
dzien = zadanie["dzien"]
17+
wyniki = zadanie["wyniki"]
18+
full_name = zadanie.get("full_name", zadanie["nazwa"].upper())
19+
task_url = zadanie.get("task_url", "#") # jeśli brak linku
20+
21+
if not wyniki:
22+
continue
23+
24+
srednia = sum(wyniki) / len(wyniki)
25+
procent_setek = wyniki.count(100) / len(wyniki) * 100
26+
27+
etapy[etap].append({
28+
"edycja": edycja,
29+
"dzien": dzien,
30+
"srednia": srednia,
31+
"procent_setek": procent_setek,
32+
"full_name": full_name,
33+
"task_url": task_url
34+
})
35+
36+
# funkcja do kolorowania procentu setek
37+
def kolor_procent(p):
38+
if p >= 50:
39+
return f"🟢 {p:.1f}%"
40+
elif p >= 20:
41+
return f"🟡 {p:.1f}%"
42+
else:
43+
return f"🔴 {p:.1f}%"
44+
45+
# generowanie tabel markdown po etapach
46+
for etap in sorted(etapy.keys()):
47+
print(f"\n## Etap {etap}\n")
48+
print("| Zadanie | Średni wynik | Procent setek |")
49+
print("|---------|--------------|---------------|")
50+
51+
zadania_sorted = sorted(etapy[etap], key=lambda x: x["srednia"], reverse=True)
52+
53+
for z in zadania_sorted:
54+
edycja = z["edycja"]
55+
dzien = z["dzien"]
56+
full_name = z["full_name"]
57+
task_url = z["task_url"]
58+
srednia = round(z["srednia"], 2)
59+
procent = kolor_procent(z["procent_setek"])
60+
61+
print(f"| {edycja} OI - dzień {dzien} - [{full_name}]({task_url}) | {srednia} | {procent} |")
62+

statystyki/generuj.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
python3 scraper.py
3+
python3 parser.py # Sporo trzeba poczyścić danych żeby się nie wywalił :(
4+
python3 gen_ranking.py

0 commit comments

Comments
 (0)