ENCOA-312

This commit is contained in:
Carlos-Mesquita
2025-01-13 21:03:34 +00:00
parent b32e38156c
commit e1b23ae561
7 changed files with 69 additions and 32 deletions

View File

@@ -0,0 +1,40 @@
import math
import random
from typing import Optional, List, Iterator
from ielts_be.configs.constants import EducationalContent
class DifficultyHelper:
def __init__(self, difficulties: Optional[List[str]]):
self.difficulties = difficulties
self.distributed: Optional[Iterator[str]] = None
def distribute_for_count(self, count: int) -> None:
if not self.difficulties or count == 0:
return
result = []
remaining = count
difficulties_count = len(self.difficulties)
for i, diff in enumerate(self.difficulties):
if i == difficulties_count - 1:
slots = remaining
else:
slots = math.ceil(remaining / (difficulties_count - i))
result.extend([diff] * slots)
remaining -= slots
self.distributed = iter(result)
def pick_difficulty(self, difficulty: Optional[str]) -> str:
if difficulty:
return difficulty if difficulty != "Random" else random.choice(EducationalContent.DIFFICULTIES)
if self.distributed:
return next(self.distributed)
return random.choice(EducationalContent.DIFFICULTIES)