Browse Source

Pridani par vysvetlujicich komentaru a vypocet bodu za minule serie.

Anet
remotes/origin/vysl
Aneta 10 years ago
parent
commit
c500721c7b
  1. 23
      seminar/views.py

23
seminar/views.py

@ -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…
Cancel
Save