"""Валидация математической корректности задач""" import re from typing import Union from fractions import Fraction class ProbabilityValidator: """Валидатор для проверки корректности вероятностей""" @staticmethod def is_valid_probability(probability: Union[float, Fraction]) -> bool: if isinstance(probability, Fraction): probability = float(probability) return 0 <= probability <= 1 @staticmethod def validate_task(task: dict) -> bool: try: required_fields = ['question', 'answer', 'solution', 'steps'] for field in required_fields: if field not in task: return False if not ProbabilityValidator.is_valid_probability(task['answer']): return False if not ProbabilityValidator.validate_grammar(task['question']): return False return True except Exception: return False @staticmethod def validate_grammar(question: str) -> bool: q = question.lower() forbidden_patterns = [ r'\bптиц\b.*\bчай\b', r'\bкур\b.*\bчай\b', r'\bгус\b.*\bчай\b', r'\bшар\b.*\bчай\b', ] for pattern in forbidden_patterns: if re.search(pattern, q): return False if re.search(r'\bчай\b', q): tea_patterns = [ r'\bчай\b.*\bпакетик\b', r'\bпакетик\b.*\bчай\b', r'\bчёрн\w*\b.*\bчай\b', r'\bзелён\w*\b.*\bчай\b', ] if not any(re.search(p, q) for p in tea_patterns): return False if re.search(r'\b(птиц|кур|гус|утк)\w*\b', q): bird_patterns = [ r'\bферм\w*\b', r'\bкур\w*\b.*\bгус\w*\b', r'\bгус\w*\b.*\bкур\w*\b', ] if not any(re.search(p, q) for p in bird_patterns): return False return True