Zrychlení výsledkovky čísla sjednocením sčítání bodů.
This commit is contained in:
		
							parent
							
								
									d0a6e35298
								
							
						
					
					
						commit
						b9875b5a1a
					
				
					 1 changed files with 40 additions and 53 deletions
				
			
		|  | @ -259,6 +259,13 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 
 | ||||
| 	@cached_property | ||||
| 	def problemy_s_body_za_cislo(self): | ||||
| 		""" | ||||
| 			TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí | ||||
| 			(výpočet bodů hlavních problémů a výpočet bodů podproblémů) | ||||
| 			pro zrychlení výpočtu bodů ve výsledkovce. | ||||
| 
 | ||||
| 			Což asi zpomalilo výsledkovku v TeXu. Co s tím? (Tu nevidí řeš.) | ||||
| 		""" | ||||
| 
 | ||||
| 		hlavni_problemy_slovnik = dict() | ||||
| 		for hp in self.hlavni_problemy: | ||||
|  | @ -277,25 +284,48 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 
 | ||||
| 			hlavni_problemy_slovnik[-1][ar.id] = "" | ||||
| 
 | ||||
| 		problem2nadproblem = dict() | ||||
| 
 | ||||
| 		body_slovnik = {} | ||||
| 		for tema in self.temata_a_spol: | ||||
| 			body_slovnik[tema.id] = {} | ||||
| 			for problem in self.podproblemy[tema.id]: | ||||
| 				body_slovnik[tema.id][problem.id] = {} | ||||
| 				problem2nadproblem[problem.id] = tema.id | ||||
| 		body_slovnik[-1] = {} | ||||
| 		for problem in self.podproblemy[-1]: | ||||
| 			body_slovnik[-1][problem.id] = {} | ||||
| 			problem2nadproblem[problem.id] = -1 | ||||
| 
 | ||||
| 		# zakládání prázdných záznamů pro řešitele | ||||
| 		for ar in self.aktivni_resitele: | ||||
| 			for tema in self.temata_a_spol: | ||||
| 				for problem in self.podproblemy[tema.id]: | ||||
| 					body_slovnik[tema.id][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 			for problem in self.podproblemy[-1]: | ||||
| 				body_slovnik[-1][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 
 | ||||
| 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | ||||
| 
 | ||||
| 		for hodnoceni in hodnoceni_do_cisla: | ||||
| 			prob = hodnoceni.problem | ||||
| 			nadproblem = hlavni_problem(prob) | ||||
| 			if self.ne_clanek_ne_konfera(nadproblem): | ||||
| 				nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] | ||||
| 			else: | ||||
| 				nadproblem_slovnik = hlavni_problemy_slovnik[-1] | ||||
| 			nadproblem = problem2nadproblem[prob.id] | ||||
| 			nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem] | ||||
| 
 | ||||
| 			body = hodnoceni.body | ||||
| 
 | ||||
| 			problem_slovnik = body_slovnik[nadproblem][prob.id] | ||||
| 
 | ||||
| 			# a mít více řešitelů | ||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | ||||
| 				if resitel not in self.aktivni_resitele: | ||||
| 					continue | ||||
| 				self.pricti_body(cislobody, resitel, body) | ||||
| 				self.pricti_body(nadproblem_slovnik, resitel, body) | ||||
| 		return hlavni_problemy_slovnik, cislobody | ||||
| 				self.pricti_body(problem_slovnik, resitel, body) | ||||
| 		return hlavni_problemy_slovnik, cislobody, body_slovnik | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: | ||||
|  | @ -305,6 +335,10 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 	def body_za_cislo(self) -> dict[int, str]: | ||||
| 		return self.problemy_s_body_za_cislo[1] | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def problemy_slovnik(self): | ||||
| 		return self.problemy_s_body_za_cislo[2] | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def temata_a_spol(self) -> list[m.Problem]: | ||||
| 		if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT: | ||||
|  | @ -328,53 +362,6 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 	def podproblemy_iter(self) -> FixedIterator: | ||||
| 		return FixedIterator(self.podproblemy_seznam.__iter__()) | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def problemy_slovnik(self): | ||||
| 		# získáme body u jednotlivých témat | ||||
| 		""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních | ||||
| 		problémech (témata). """ | ||||
| 
 | ||||
| 		body_slovnik = {} | ||||
| 		for tema in self.temata_a_spol: | ||||
| 			body_slovnik[tema.id] = {} | ||||
| 			for problem in self.podproblemy[tema.id]: | ||||
| 				body_slovnik[tema.id][problem.id] = {} | ||||
| 		body_slovnik[-1] = {} | ||||
| 		for problem in self.podproblemy[-1]: | ||||
| 			body_slovnik[-1][problem.id] = {} | ||||
| 
 | ||||
| 		# zakládání prázdných záznamů pro řešitele | ||||
| 		for ar in self.aktivni_resitele: | ||||
| 			for tema in self.temata_a_spol: | ||||
| 				for problem in self.podproblemy[tema.id]: | ||||
| 					body_slovnik[tema.id][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 			for problem in self.podproblemy[-1]: | ||||
| 				body_slovnik[-1][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 		temata = set(t.id for t in self.temata_a_spol) | ||||
| 
 | ||||
| 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | ||||
| 
 | ||||
| 		for hodnoceni in hodnoceni_do_cisla: | ||||
| 			prob = hodnoceni.problem | ||||
| 			nadproblem = hlavni_problem(prob) | ||||
| 			if nadproblem.id in temata: | ||||
| 				nadproblem_slovnik = body_slovnik[nadproblem.id] | ||||
| 			else: | ||||
| 				nadproblem_slovnik = body_slovnik[-1] | ||||
| 
 | ||||
| 			problem_slovnik = nadproblem_slovnik[prob.id] | ||||
| 
 | ||||
| 			body = hodnoceni.body | ||||
| 
 | ||||
| 			# a mít více řešitelů | ||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | ||||
| 				if resitel not in self.aktivni_resitele: | ||||
| 					continue | ||||
| 				self.pricti_body(problem_slovnik, resitel, body) | ||||
| 		return body_slovnik | ||||
| 
 | ||||
| 	class RadekVysledkovkyCisla(object): | ||||
| 		"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. | ||||
| 		Umožňuje snazší práci v templatu (lepší, než seznam).""" | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue