Browse Source

Pridani par vysvetlujicich komentaru a vypocet bodu za minule serie.

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

21
seminar/views.py

@ -74,37 +74,36 @@ class CisloView(generic.DetailView):
def get_context_data(self, **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")
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))
# cislo sloupecku pro problem (inverzni funkce)
#setridi problemy podle typu a poradi zadani
problem_index = {}
for i in range(len(problemy)):
problem_index[problemy[i].id] = i
#umoznuje zjistit index podle id problemu
# pomocna mapa Resitel: RadekVysledkovky
vysledky_resitele = {}
stejne_body = {}
konec_rozmezi = {}
# radky vysledkovky, seznam objektu RadekVysledkovky
vysledkovka = []
# posledni pocet bodu, pro detekci stejnych mist
posledni_body = 100000
predchozi_poradi = None
body_minule = None
for vi in range(len(vysledky)):
v = vysledky[vi]
tv = RadekVysledkovky()
tv.resitel = v.resitel
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 = ''
#defaultni poradi je prazdne - kvuli sdilenym mistum
tv.body_minule = 0
#pocet bodu do tohoto cisla
if posledni_body > v.body_celkem:
if stejne_body.get(posledni_body):
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
@ -126,11 +125,15 @@ class CisloView(generic.DetailView):
stejne_body[v.body_celkem] += 1
#rozsirim pocet resitelu sdilejici stejnou pozici
vysledky_resitele[v.resitel.id] = tv
#odkaz na radek vysledkovky patrici danemu resiteli
vysledkovka.append(tv)
# doplneni bodu za jednotliva reseni lidi do RadekVysledkovky.body
for r in reseni:
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

Loading…
Cancel
Save