from tools.aoc import AOCDay from typing import Any class Day(AOCDay): inputs = [ [ (3, "input5_test"), (782, "input5"), ], [ (14, "input5_test"), (353863745078671, "input5"), ] ] def parse_input(self) -> (list[tuple[int, int]], list[int]): ranges, ids = self.getMultiLineInputAsArray() return [tuple(map(int, x.split("-"))) for x in ranges], list(map(int, ids)) def part1(self) -> Any: ranges, ids = self.parse_input() ans = 0 for _id in ids: for _range in ranges: if _range[0] <= _id <= _range[1]: ans += 1 break return ans def part2(self) -> Any: ranges, _ = self.parse_input() checked = [] for _range in ranges: for c in checked.copy(): if (c[0] <= _range[0] <= c[1] + 1) or (c[1] >= _range[1] >= c[0]) or (_range[0] <= c[0] and _range[1] >= c[1]): checked.remove(c) _range = (min(_range[0], c[0]), max(_range[1], c[1])) checked.append(_range) ans = 0 for _range in checked: ans += _range[1] - _range[0] + 1 return ans if __name__ == '__main__': day = Day(2025, 5) day.run(verbose=True)