from typing import Any, Iterator from ..base import BaseSolver class Solver(BaseSolver): def solve(self, input: str) -> Iterator[Any]: def is_safe(level: list[int]) -> bool: diff = [a - b for a, b in zip(level[:-1], level[1:], strict=True)] return sum(d > 0 for d in diff) in (0, len(diff)) and all( 1 <= abs(d) <= 3 for d in diff ) def is_any_safe(level: list[int]) -> bool: return any( is_safe(level[:i] + level[i + 1 :]) for i in range(0, len(level)) ) levels = [[int(c) for c in r.split()] for r in input.splitlines()] yield sum(is_safe(level) for level in levels) yield sum(is_safe(level) or is_any_safe(level) for level in levels)