Smazány staré a pomalé verze počítání bodů odjakživa
This commit is contained in:
		
							parent
							
								
									7677d77ad2
								
							
						
					
					
						commit
						cf5ac6819f
					
				
					 1 changed files with 0 additions and 32 deletions
				
			
		|  | @ -407,38 +407,6 @@ def hlavni_problemy_cisla(cislo): | ||||||
| 
 | 
 | ||||||
| # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník | # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník | ||||||
| def body_resitelu_odjakziva(rocnik, resitele): | def body_resitelu_odjakziva(rocnik, resitele): | ||||||
| 	body_odjakziva = {} |  | ||||||
| 
 |  | ||||||
| #	for r in resitele: |  | ||||||
| #		body_odjakziva[str(r.id)] = 0 |  | ||||||
| ######################################################################### |  | ||||||
| # POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku   # |  | ||||||
| ######################################################################### |  | ||||||
| ## 	# Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka |  | ||||||
| ## 	# s aktivními řešiteli) |  | ||||||
| ##          |  | ||||||
| ## 	body_pred_roky = [] |  | ||||||
| ## 	rok = rocnik.prvni_rok |  | ||||||
| ## 	rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11) |  | ||||||
| ## 	for roc in rocniky:	 |  | ||||||
| ## 		body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele)) |  | ||||||
| ##          |  | ||||||
| ## 	for r in resitele: |  | ||||||
| ## 		for i in range(0,10): |  | ||||||
| ## 			body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)] |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Nasledující řešení je sice správné, ale moc pomalé: |  | ||||||
| # (důsledek toho, že dotazy na joinování databázových tabulek jsou kvadratické) |  | ||||||
| #	for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all(): |  | ||||||
| #		for r in res.resitele.all(): |  | ||||||
| #			# daný řešitel nemusí být v naší podmnožině |  | ||||||
| #			if r not in resitele: continue |  | ||||||
| #			 |  | ||||||
| #			for hodn in res.hodnoceni_set.all(): |  | ||||||
| #				pricti_body(body_odjakziva, r, hodn.body) |  | ||||||
| 
 |  | ||||||
| # Zkusíme agregovat: |  | ||||||
| 	# Následující řádek přidá ke každému řešiteli údaj ".body" se součtem jejich bodů | 	# Následující řádek přidá ke každému řešiteli údaj ".body" se součtem jejich bodů | ||||||
| 	resitele_s_body = Resitel.objects.annotate(body=Sum('reseni__hodnoceni__body')) | 	resitele_s_body = Resitel.objects.annotate(body=Sum('reseni__hodnoceni__body')) | ||||||
| 	# Teď jen z QuerySetu řešitelů anotovaných body vygenerujeme slovník indexovaný řešitelským id obsahující body | 	# Teď jen z QuerySetu řešitelů anotovaných body vygenerujeme slovník indexovaný řešitelským id obsahující body | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky