Pridani par vysvetlujicich komentaru a vypocet bodu za minule serie.
Anet
This commit is contained in:
parent
165b6cb25f
commit
c500721c7b
1 changed files with 13 additions and 10 deletions
|
@ -74,37 +74,36 @@ class CisloView(generic.DetailView):
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(CisloView, self).get_context_data(**kwargs)
|
context = super(CisloView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
# Vysledky k cislu: seznam objektu typu (cislo, resitel, body [v tom cisle], body_celkem [od zac. rocniku])
|
|
||||||
vysledky = VysledkyKCislu.objects.filter(cislo = context['cislo']).order_by('-body_celkem').select_related("resitel")
|
vysledky = VysledkyKCislu.objects.filter(cislo = context['cislo']).order_by('-body_celkem').select_related("resitel")
|
||||||
|
|
||||||
reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel")
|
reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel")
|
||||||
|
|
||||||
# seznam problemu s nejakymi body v tomto cisle
|
|
||||||
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod))
|
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod))
|
||||||
# cislo sloupecku pro problem (inverzni funkce)
|
#setridi problemy podle typu a poradi zadani
|
||||||
problem_index = {}
|
problem_index = {}
|
||||||
for i in range(len(problemy)):
|
for i in range(len(problemy)):
|
||||||
problem_index[problemy[i].id] = i
|
problem_index[problemy[i].id] = i
|
||||||
#umoznuje zjistit index podle id problemu
|
#umoznuje zjistit index podle id problemu
|
||||||
|
|
||||||
# pomocna mapa Resitel: RadekVysledkovky
|
|
||||||
vysledky_resitele = {}
|
vysledky_resitele = {}
|
||||||
stejne_body = {}
|
stejne_body = {}
|
||||||
konec_rozmezi = {}
|
konec_rozmezi = {}
|
||||||
# radky vysledkovky, seznam objektu RadekVysledkovky
|
|
||||||
vysledkovka = []
|
vysledkovka = []
|
||||||
# posledni pocet bodu, pro detekci stejnych mist
|
|
||||||
posledni_body = 100000
|
posledni_body = 100000
|
||||||
predchozi_poradi = None
|
predchozi_poradi = None
|
||||||
|
body_minule = None
|
||||||
|
|
||||||
for vi in range(len(vysledky)):
|
for vi in range(len(vysledky)):
|
||||||
v = vysledky[vi]
|
v = vysledky[vi]
|
||||||
tv = RadekVysledkovky()
|
tv = RadekVysledkovky()
|
||||||
tv.resitel = v.resitel
|
tv.resitel = v.resitel
|
||||||
tv.vysledek = v
|
tv.vysledek = v
|
||||||
tv.body = ['']*len(problemy) # misto pro body za jednotlive uloy
|
#odkazuje na VysledkyKCislu
|
||||||
|
tv.body = ['']*len(problemy)
|
||||||
|
#pole bodu za ulohy
|
||||||
tv.poradi = ''
|
tv.poradi = ''
|
||||||
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
||||||
|
tv.body_minule = 0
|
||||||
|
#pocet bodu do tohoto cisla
|
||||||
if posledni_body > v.body_celkem:
|
if posledni_body > v.body_celkem:
|
||||||
if stejne_body.get(posledni_body):
|
if stejne_body.get(posledni_body):
|
||||||
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
||||||
|
@ -126,12 +125,16 @@ class CisloView(generic.DetailView):
|
||||||
stejne_body[v.body_celkem] += 1
|
stejne_body[v.body_celkem] += 1
|
||||||
#rozsirim pocet resitelu sdilejici stejnou pozici
|
#rozsirim pocet resitelu sdilejici stejnou pozici
|
||||||
vysledky_resitele[v.resitel.id] = tv
|
vysledky_resitele[v.resitel.id] = tv
|
||||||
|
#odkaz na radek vysledkovky patrici danemu resiteli
|
||||||
vysledkovka.append(tv)
|
vysledkovka.append(tv)
|
||||||
|
|
||||||
# doplneni bodu za jednotliva reseni lidi do RadekVysledkovky.body
|
|
||||||
for r in reseni:
|
for r in reseni:
|
||||||
vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body
|
vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body
|
||||||
|
body_za_cislo = vysledky_resitele[r.resitel.id].vysledek.body
|
||||||
|
#body za toto cislo, stejne jako tv.vysledek.body
|
||||||
|
body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem
|
||||||
|
vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo
|
||||||
|
|
||||||
|
|
||||||
context['vysledkovka'] = vysledkovka
|
context['vysledkovka'] = vysledkovka
|
||||||
context['problemy'] = problemy
|
context['problemy'] = problemy
|
||||||
|
|
Loading…
Reference in a new issue