|
|
@ -410,7 +410,7 @@ def body_resitelu_odjakziva(rocnik, resitele): |
|
|
|
body_odjakziva = {} |
|
|
|
|
|
|
|
for r in resitele: |
|
|
|
body_odjakziva[str(r.id)] = 0 |
|
|
|
body_odjakziva[r.id] = 0 |
|
|
|
######################################################################### |
|
|
|
# POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku # |
|
|
|
######################################################################### |
|
|
@ -425,7 +425,7 @@ def body_resitelu_odjakziva(rocnik, resitele): |
|
|
|
# |
|
|
|
#for r in resitele: |
|
|
|
# for i in range(0,10): |
|
|
|
# body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)] |
|
|
|
# body_odjakziva[r.id] += body_pred_roky[i][r.id] |
|
|
|
|
|
|
|
|
|
|
|
# Nasledující řešení je sice správné, ale moc pomalé: |
|
|
@ -444,7 +444,7 @@ def body_resitelu_za_rocnik(rocnik, aktivni_resitele): |
|
|
|
body_za_rocnik = {} |
|
|
|
# inicializujeme na 0 pro všechny aktivní řešitele |
|
|
|
for ar in aktivni_resitele: |
|
|
|
body_za_rocnik[str(ar.id)] = 0 |
|
|
|
body_za_rocnik[ar.id] = 0 |
|
|
|
|
|
|
|
# spočítáme body řešitelům přes všechna řešení s hodnocením v daném ročníku |
|
|
|
print("Před dotazem:{}".format(time.time())) |
|
|
@ -468,7 +468,7 @@ class RadekVysledkovkyRocniku(object): |
|
|
|
self.body_rocnik = body_rocnik |
|
|
|
self.body_celkem_odjakziva = body_odjakziva |
|
|
|
self.body_cisla_sezn = body_cisla_sezn |
|
|
|
elf.titul = resitel.get_titul(body_odjakziva) |
|
|
|
self.titul = resitel.get_titul(body_odjakziva) |
|
|
|
|
|
|
|
def vysledkovka_rocniku(rocnik, jen_verejne=True): |
|
|
|
"""Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve |
|
|
@ -488,7 +488,7 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): |
|
|
|
for cislo in cisla: |
|
|
|
# získáme body za číslo |
|
|
|
_, cislobody = secti_body_za_cislo(cislo, aktivni_resitele) |
|
|
|
body_cisla_slov[str(cislo.id)] = cislobody |
|
|
|
body_cisla_slov[cislo.id] = cislobody |
|
|
|
|
|
|
|
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně |
|
|
|
resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) |
|
|
@ -509,7 +509,7 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): |
|
|
|
# seznam počtu bodů daného řešitele pro jednotlivá čísla |
|
|
|
body_cisla_sezn = [] |
|
|
|
for cislo in cisla: |
|
|
|
body_cisla_sezn.append(body_cisla_slov[str(cislo.id)][str(ar_id)]) |
|
|
|
body_cisla_sezn.append(body_cisla_slov[cislo.id][ar_id]) |
|
|
|
|
|
|
|
# vytáhneme informace pro daného řešitele |
|
|
|
radek = RadekVysledkovkyRocniku( |
|
|
@ -605,10 +605,10 @@ def pricti_body(slovnik, resitel, body): |
|
|
|
# daného řešitele, předěláme na 0 |
|
|
|
# (v dalším kroku přičteme reálný počet bodů), |
|
|
|
# rozlišujeme tím mezi 0 a neodevzdaným řešením |
|
|
|
if slovnik[str(resitel.id)] == "": |
|
|
|
slovnik[str(resitel.id)] = 0 |
|
|
|
if slovnik[resitel.id] == "": |
|
|
|
slovnik[resitel.id] = 0 |
|
|
|
|
|
|
|
slovnik[str(resitel.id)] += body |
|
|
|
slovnik[resitel.id] += body |
|
|
|
|
|
|
|
def secti_body_za_rocnik(rocnik, aktivni_resitele): |
|
|
|
# spočítáme všem řešitelům jejich body za ročník |
|
|
@ -628,16 +628,16 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): |
|
|
|
|
|
|
|
hlavni_problemy_slovnik = {} |
|
|
|
for hp in hlavni_problemy: |
|
|
|
hlavni_problemy_slovnik[str(hp.id)] = {} |
|
|
|
hlavni_problemy_slovnik[hp.id] = {} |
|
|
|
|
|
|
|
# zakládání prázdných záznamů pro řešitele |
|
|
|
cislobody = {} |
|
|
|
for ar in aktivni_resitele: |
|
|
|
# řešitele převedeme na řetězec pomocí unikátního id |
|
|
|
cislobody[str(ar.id)] = "" |
|
|
|
cislobody[ar.id] = "" |
|
|
|
for hp in hlavni_problemy: |
|
|
|
slovnik = hlavni_problemy_slovnik[str(hp.id)] |
|
|
|
slovnik[str(ar.id)] = "" |
|
|
|
slovnik = hlavni_problemy_slovnik[hp.id] |
|
|
|
slovnik[ar.id] = "" |
|
|
|
|
|
|
|
# vezmeme všechna řešení s body do daného čísla |
|
|
|
reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele', |
|
|
@ -650,7 +650,7 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): |
|
|
|
# řešení může řešit více problémů |
|
|
|
for prob in list(reseni.problem.all()): |
|
|
|
nadproblem = hlavni_problem(prob) |
|
|
|
nadproblem_slovnik = hlavni_problemy_slovnik[str(nadproblem.id)] |
|
|
|
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] |
|
|
|
|
|
|
|
# a mít více hodnocení |
|
|
|
for hodn in list(reseni.hodnoceni_set.all()): |
|
|
@ -700,7 +700,7 @@ def vysledkovka_cisla(cislo, context=None): |
|
|
|
# získáme seznam bodů za problémy pro daného řešitele |
|
|
|
problemy = [] |
|
|
|
for hp in hlavni_problemy: |
|
|
|
problemy.append(hlavni_problemy_slovnik[str(hp.id)][ar_id]) |
|
|
|
problemy.append(hlavni_problemy_slovnik[hp.id][ar_id]) |
|
|
|
# vytáhneme informace pro daného řešitele |
|
|
|
radek = RadekVysledkovkyCisla( |
|
|
|
poradi[i], # pořadí |
|
|
|