Spaces:
Sleeping
Sleeping
| """Валидация математической корректности задач""" | |
| import re | |
| from typing import Union | |
| from fractions import Fraction | |
| class ProbabilityValidator: | |
| """Валидатор для проверки корректности вероятностей""" | |
| def is_valid_probability(probability: Union[float, Fraction]) -> bool: | |
| if isinstance(probability, Fraction): | |
| probability = float(probability) | |
| return 0 <= probability <= 1 | |
| 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 | |
| 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 | |