"""Генератор задач: ровно n задач""" from core.base_generator import BaseTaskGenerator from models.task import Task from config import COMPLEXITY_CONFIG import random class ExactCountGenerator(BaseTaskGenerator): """Генератор задач про ровно n задач""" def generate(self) -> Task: """Генерация задачи""" config = COMPLEXITY_CONFIG[self.complexity] p_more_n = random.choice([0.59, 0.65, 0.67, 0.7, 0.74, 0.79]) p_more_n_minus_1 = random.choice([0.65, 0.7, 0.74, 0.79, 0.8]) if p_more_n_minus_1 <= p_more_n: p_more_n_minus_1 = p_more_n + 0.05 n = random.randint(8, 12) subjects = ['биологии', 'математике', 'физике', 'химии'] subject = random.choice(subjects) question = (f"Вероятность того, что на тестировании по {subject} учащийся П. верно решит больше {n} задач, равна " f"{p_more_n}. Вероятность того, что П. верно решит больше {n - 1} задач, равна {p_more_n_minus_1}. " f"Найдите вероятность того, что П. верно решит ровно {n} задач.") answer = round(p_more_n_minus_1 - p_more_n, 4) steps = [ f"1. P(ровно {n}) = P(> {n - 1}) - P(> {n})", f"2. P = {p_more_n_minus_1} - {p_more_n} = {answer}" ] return Task( type='exact_count', question=question, answer=answer, answer_fraction=f"{answer:.4f}", solution=f"Вероятность = {answer}", steps=steps, complexity=self.complexity ) def get_type(self) -> str: return 'exact_count'