from typing import Generator safe = unsafe = 0 def is_safe_with_dampening(report: str) -> bool: numbers = [int(elem) for elem in report.split()] for ii in range(len(numbers)): if is_safe((elem for idx, elem in enumerate(numbers) if idx != ii)): return True return False def is_safe(numbers: Generator[int, None, None]) -> bool: last_num = 0 increase = True for ii, num in enumerate(numbers): if ii != 0: if ii == 1: increase = num > last_num if (num > last_num) != increase: return False diff = abs(num - last_num) if diff < 1 or diff > 3: return False last_num = num return True with open("input") as f: for report in f.readlines(): if is_safe_with_dampening(report): safe += 1 else: unsafe += 1 print(f"safe: {safe}\nunsafe: {unsafe}")