From 403bd0d4e32838e69dd686900ca738538ea8301d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 12 Jan 2026 12:56:52 -0800 Subject: [PATCH] 2025 05 --- Python/2025/05/main.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Python/2025/05/main.py diff --git a/Python/2025/05/main.py b/Python/2025/05/main.py new file mode 100644 index 0000000..c733748 --- /dev/null +++ b/Python/2025/05/main.py @@ -0,0 +1,35 @@ +import bisect +intervals, ids = open("input", 'r').read().split("\n\n") + +intervals = sorted([ + [int(nm) for nm in interval.split("-")] for interval in intervals.split("\n") +]) +ids = [int(id) for id in ids.rstrip().split("\n")] + +# Merge intervals +merged_intervals = [intervals[0]] +for interval in intervals[1:]: + if interval[0] <= merged_intervals[-1][1]: + merged_intervals[-1][1] = max(interval[1], merged_intervals[-1][1]) + else: + merged_intervals.append(interval) + +def check_id_in_intervals(id, intervals): + left_interval = bisect.bisect(intervals,id,key=lambda l: l[0])-1 + if left_interval < 0: + return False + return id <= intervals[left_interval][1] + +fresh_ids = [ + check_id_in_intervals(id, merged_intervals) + for id in ids +] + +print(len([fresh_id for fresh_id in fresh_ids if fresh_id is True])) + +# Part 2 +total = 0 +for interval in merged_intervals: + start, end = interval + total += end - start + 1 +print(total)