Zrychlení výsledkovky čísla sjednocením sčítání bodů.
This commit is contained in:
parent
d0a6e35298
commit
b9875b5a1a
1 changed files with 40 additions and 53 deletions
|
@ -259,6 +259,13 @@ class VysledkovkaCisla(Vysledkovka):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def problemy_s_body_za_cislo(self):
|
def problemy_s_body_za_cislo(self):
|
||||||
|
"""
|
||||||
|
TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí
|
||||||
|
(výpočet bodů hlavních problémů a výpočet bodů podproblémů)
|
||||||
|
pro zrychlení výpočtu bodů ve výsledkovce.
|
||||||
|
|
||||||
|
Což asi zpomalilo výsledkovku v TeXu. Co s tím? (Tu nevidí řeš.)
|
||||||
|
"""
|
||||||
|
|
||||||
hlavni_problemy_slovnik = dict()
|
hlavni_problemy_slovnik = dict()
|
||||||
for hp in self.hlavni_problemy:
|
for hp in self.hlavni_problemy:
|
||||||
|
@ -277,25 +284,48 @@ class VysledkovkaCisla(Vysledkovka):
|
||||||
|
|
||||||
hlavni_problemy_slovnik[-1][ar.id] = ""
|
hlavni_problemy_slovnik[-1][ar.id] = ""
|
||||||
|
|
||||||
|
problem2nadproblem = dict()
|
||||||
|
|
||||||
|
body_slovnik = {}
|
||||||
|
for tema in self.temata_a_spol:
|
||||||
|
body_slovnik[tema.id] = {}
|
||||||
|
for problem in self.podproblemy[tema.id]:
|
||||||
|
body_slovnik[tema.id][problem.id] = {}
|
||||||
|
problem2nadproblem[problem.id] = tema.id
|
||||||
|
body_slovnik[-1] = {}
|
||||||
|
for problem in self.podproblemy[-1]:
|
||||||
|
body_slovnik[-1][problem.id] = {}
|
||||||
|
problem2nadproblem[problem.id] = -1
|
||||||
|
|
||||||
|
# zakládání prázdných záznamů pro řešitele
|
||||||
|
for ar in self.aktivni_resitele:
|
||||||
|
for tema in self.temata_a_spol:
|
||||||
|
for problem in self.podproblemy[tema.id]:
|
||||||
|
body_slovnik[tema.id][problem.id][ar.id] = ""
|
||||||
|
|
||||||
|
for problem in self.podproblemy[-1]:
|
||||||
|
body_slovnik[-1][problem.id][ar.id] = ""
|
||||||
|
|
||||||
|
|
||||||
hodnoceni_do_cisla = self.hodnoceni_do_cisla
|
hodnoceni_do_cisla = self.hodnoceni_do_cisla
|
||||||
|
|
||||||
for hodnoceni in hodnoceni_do_cisla:
|
for hodnoceni in hodnoceni_do_cisla:
|
||||||
prob = hodnoceni.problem
|
prob = hodnoceni.problem
|
||||||
nadproblem = hlavni_problem(prob)
|
nadproblem = problem2nadproblem[prob.id]
|
||||||
if self.ne_clanek_ne_konfera(nadproblem):
|
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem]
|
||||||
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
|
|
||||||
else:
|
|
||||||
nadproblem_slovnik = hlavni_problemy_slovnik[-1]
|
|
||||||
|
|
||||||
body = hodnoceni.body
|
body = hodnoceni.body
|
||||||
|
|
||||||
|
problem_slovnik = body_slovnik[nadproblem][prob.id]
|
||||||
|
|
||||||
# a mít více řešitelů
|
# a mít více řešitelů
|
||||||
for resitel in hodnoceni.reseni.resitele.all():
|
for resitel in hodnoceni.reseni.resitele.all():
|
||||||
if resitel not in self.aktivni_resitele:
|
if resitel not in self.aktivni_resitele:
|
||||||
continue
|
continue
|
||||||
self.pricti_body(cislobody, resitel, body)
|
self.pricti_body(cislobody, resitel, body)
|
||||||
self.pricti_body(nadproblem_slovnik, resitel, body)
|
self.pricti_body(nadproblem_slovnik, resitel, body)
|
||||||
return hlavni_problemy_slovnik, cislobody
|
self.pricti_body(problem_slovnik, resitel, body)
|
||||||
|
return hlavni_problemy_slovnik, cislobody, body_slovnik
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]:
|
def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]:
|
||||||
|
@ -305,6 +335,10 @@ class VysledkovkaCisla(Vysledkovka):
|
||||||
def body_za_cislo(self) -> dict[int, str]:
|
def body_za_cislo(self) -> dict[int, str]:
|
||||||
return self.problemy_s_body_za_cislo[1]
|
return self.problemy_s_body_za_cislo[1]
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def problemy_slovnik(self):
|
||||||
|
return self.problemy_s_body_za_cislo[2]
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def temata_a_spol(self) -> list[m.Problem]:
|
def temata_a_spol(self) -> list[m.Problem]:
|
||||||
if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT:
|
if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT:
|
||||||
|
@ -328,53 +362,6 @@ class VysledkovkaCisla(Vysledkovka):
|
||||||
def podproblemy_iter(self) -> FixedIterator:
|
def podproblemy_iter(self) -> FixedIterator:
|
||||||
return FixedIterator(self.podproblemy_seznam.__iter__())
|
return FixedIterator(self.podproblemy_seznam.__iter__())
|
||||||
|
|
||||||
@cached_property
|
|
||||||
def problemy_slovnik(self):
|
|
||||||
# získáme body u jednotlivých témat
|
|
||||||
""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních
|
|
||||||
problémech (témata). """
|
|
||||||
|
|
||||||
body_slovnik = {}
|
|
||||||
for tema in self.temata_a_spol:
|
|
||||||
body_slovnik[tema.id] = {}
|
|
||||||
for problem in self.podproblemy[tema.id]:
|
|
||||||
body_slovnik[tema.id][problem.id] = {}
|
|
||||||
body_slovnik[-1] = {}
|
|
||||||
for problem in self.podproblemy[-1]:
|
|
||||||
body_slovnik[-1][problem.id] = {}
|
|
||||||
|
|
||||||
# zakládání prázdných záznamů pro řešitele
|
|
||||||
for ar in self.aktivni_resitele:
|
|
||||||
for tema in self.temata_a_spol:
|
|
||||||
for problem in self.podproblemy[tema.id]:
|
|
||||||
body_slovnik[tema.id][problem.id][ar.id] = ""
|
|
||||||
|
|
||||||
for problem in self.podproblemy[-1]:
|
|
||||||
body_slovnik[-1][problem.id][ar.id] = ""
|
|
||||||
|
|
||||||
temata = set(t.id for t in self.temata_a_spol)
|
|
||||||
|
|
||||||
hodnoceni_do_cisla = self.hodnoceni_do_cisla
|
|
||||||
|
|
||||||
for hodnoceni in hodnoceni_do_cisla:
|
|
||||||
prob = hodnoceni.problem
|
|
||||||
nadproblem = hlavni_problem(prob)
|
|
||||||
if nadproblem.id in temata:
|
|
||||||
nadproblem_slovnik = body_slovnik[nadproblem.id]
|
|
||||||
else:
|
|
||||||
nadproblem_slovnik = body_slovnik[-1]
|
|
||||||
|
|
||||||
problem_slovnik = nadproblem_slovnik[prob.id]
|
|
||||||
|
|
||||||
body = hodnoceni.body
|
|
||||||
|
|
||||||
# a mít více řešitelů
|
|
||||||
for resitel in hodnoceni.reseni.resitele.all():
|
|
||||||
if resitel not in self.aktivni_resitele:
|
|
||||||
continue
|
|
||||||
self.pricti_body(problem_slovnik, resitel, body)
|
|
||||||
return body_slovnik
|
|
||||||
|
|
||||||
class RadekVysledkovkyCisla(object):
|
class RadekVysledkovkyCisla(object):
|
||||||
"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky.
|
"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky.
|
||||||
Umožňuje snazší práci v templatu (lepší, než seznam)."""
|
Umožňuje snazší práci v templatu (lepší, než seznam)."""
|
||||||
|
|
Loading…
Reference in a new issue