Skip to content

Commit d276d13

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

File tree

8 files changed

+11345
-1
lines changed

8 files changed

+11345
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ bądź przy pomocy polecenia `grep 'nazwa zadania' -R .` wywołanego z główneg
4040
## Jak samemu skorzystać z checklisty:
4141
Sforkuj [szablon](https://github.com/testowyuczen/oi) tego repozytorium [klikając tutaj](https://github.com/testowyuczen/oi/fork), i w zakładce Actions swojego repozytorium kliknij `I understand my workflows, go ahead and enable them` - bez tego checklista nie będzie się aktualizować automatycznie.
4242

43-
Po wbiciu jakiegoś zadania, np 'Rycerz:wq' z pierwszego dnia II etapu XXXI OI:
43+
Po wbiciu jakiegoś zadania, np ['Rycerz' z pierwszego dnia II etapu XXXI OI](https://oi.edu.pl/archive/pl/oi/31/ryc):
4444
- Zapisz rozwiązanie. np. w pliku `rozwiazania/xxxi/etap2/dzien1/ryc/ryc.cpp`.
4545
- Dodaj je do repozytorium wykonując `git add `rozwiazania/xxxi/etap2/dzien1/ryc/ryc.cpp`, (przy pomocy `git status` możesz zobaczyć co już dodałeś w tym commicie).
4646
- Scommituj je np. w ten sposób: `git commit -m "Dodano rozwiązanie zadania 'Rycerz' z XXXI OI"` (jeśli zapomnieliśmy czegoś dodać wystarczy powtórzyć poprzedni krok i użyć `git commit --am`.

statystyki/README.md

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

statystyki/gen_ranking.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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+
# Funkcja konwertująca liczbę na rzymską
13+
def int_to_roman(num):
14+
val = [
15+
1000, 900, 500, 400, 100, 90,
16+
50, 40, 10, 9, 5, 4, 1
17+
]
18+
syms = [
19+
"M", "CM", "D", "CD", "C", "XC",
20+
"L", "XL", "X", "IX", "V", "IV", "I"
21+
]
22+
roman = ""
23+
i = 0
24+
while num > 0:
25+
for _ in range(num // val[i]):
26+
roman += syms[i]
27+
num -= val[i]
28+
i += 1
29+
return roman
30+
31+
for key, zadanie in data.items():
32+
edycja = zadanie["edycja"]
33+
etap = zadanie["etap"]
34+
dzien = zadanie["dzien"]
35+
wyniki = zadanie["wyniki"]
36+
full_name = zadanie.get("full_name", zadanie["nazwa"].upper())
37+
task_url = zadanie.get("task_url", "#") # jeśli brak linku
38+
39+
if not wyniki:
40+
continue
41+
42+
srednia = sum(wyniki) / len(wyniki)
43+
procent_setek = wyniki.count(100) / len(wyniki) * 100
44+
45+
etapy[etap].append({
46+
"edycja": edycja,
47+
"dzien": dzien,
48+
"srednia": srednia,
49+
"procent_setek": procent_setek,
50+
"full_name": full_name,
51+
"task_url": task_url
52+
})
53+
54+
# funkcja do kolorowania procentu setek
55+
def kolor_procent(p):
56+
if p >= 50:
57+
return f"🟢 {p:.1f}%"
58+
elif p >= 20:
59+
return f"🟡 {p:.1f}%"
60+
else:
61+
return f"🔴 {p:.1f}%"
62+
63+
# generowanie tabel markdown po etapach
64+
for etap in sorted(etapy.keys()):
65+
print(f"\n## Etap {etap}\n")
66+
print("| Zadanie | Średni wynik | Procent setek |")
67+
print("|---------|--------------|---------------|")
68+
69+
zadania_sorted = sorted(etapy[etap], key=lambda x: x["srednia"], reverse=True)
70+
71+
for z in zadania_sorted:
72+
edycja = int_to_roman(z["edycja"])
73+
dzien = z["dzien"]
74+
full_name = z["full_name"]
75+
task_url = z["task_url"]
76+
srednia = round(z["srednia"], 2)
77+
procent = kolor_procent(z["procent_setek"])
78+
if etap in [2, 3]:
79+
print(f"| {edycja} OI - dzień {dzien} - [{full_name}]({task_url}) | {srednia} | {procent} |")
80+
else:
81+
print(f"| {edycja} OI - [{full_name}]({task_url}) | {srednia} | {procent} |")

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)