reginafeles's picture
Upload 40 files
d2213a5 verified
"""Генератор задач: ровно 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'