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): | ||||
|         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,12 +125,16 @@ 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 | ||||
|         context['problemy'] = problemy | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Aneta
						Aneta