from tools.aoc import AOCDay from typing import Any def check_report(levels: list[int]) -> bool: safe = True mode = None for i, level in enumerate(levels): if i == 0: continue if i == 1: mode = level < levels[i - 1] if not 1 <= abs(level - levels[i - 1]) <= 3 or mode != (level < levels[i - 1]): safe = False break return safe class Day(AOCDay): inputs = [ [ (2, "input2_test"), (680, "input2"), ], [ (4, "input2_test"), (710, "input2"), ] ] def part1(self) -> Any: return sum(check_report(x) for x in self.getInputAsArraySplit(split_char=" ", return_type=int)) def part2(self) -> Any: safe = 0 for report in self.getInputAsArraySplit(split_char=" ", return_type=int): if check_report(report): safe += 1 continue for x in range(len(report)): if check_report(report[:x] + report[x + 1:]): safe += 1 break return safe if __name__ == '__main__': day = Day(2024, 2) day.run(verbose=True)