From 6d1d241bcebfc1a2c45ff2b1a7371588f13375b9 Mon Sep 17 00:00:00 2001 From: Kees van Kempen Date: Fri, 5 Dec 2025 11:13:41 +0100 Subject: [PATCH] 2025(05): part 2 be solved --- 2025/05/part2.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 2025/05/part2.py diff --git a/2025/05/part2.py b/2025/05/part2.py new file mode 100644 index 0000000..f6cb3fd --- /dev/null +++ b/2025/05/part2.py @@ -0,0 +1,47 @@ +import numpy as np +from part1 import read_inventory + +def get_disjunct_ranges(ranges): + our_ranges = ranges.copy() + changed = True + + while changed: + changed = False + for i in range(len(our_ranges)): + a, b = our_ranges[i] + for j in range(i + 1, len(our_ranges)): + c, d = our_ranges[j] + if c < a and a <= d and d <= b: + our_ranges[i] = np.array([c, b]) + our_ranges = np.delete(our_ranges, j, 0) + changed = True + break + elif c < a and b < d: + our_ranges[i] = np.array([c, d]) + our_ranges = np.delete(our_ranges, j, 0) + changed = True + break + elif a <= c and c <= b and a <= d and d <= b: + our_ranges[i] = np.array([a, b]) + our_ranges = np.delete(our_ranges, j, 0) + changed = True + break + elif a <= c and c <= b and b < d: + our_ranges[i] = np.array([a, d]) + our_ranges = np.delete(our_ranges, j, 0) + changed = True + break + if changed: + break + return our_ranges + +def get_fresh_id_counts(ranges): + disjunct_ranges = get_disjunct_ranges(ranges) + return np.sum(disjunct_ranges[:,1] - disjunct_ranges[:,0]) + len(disjunct_ranges) + +if __name__ == "__main__": + test_ranges, test_items = read_inventory("testinput") + assert get_fresh_id_counts(test_ranges) == 14 + + ranges, items = read_inventory("input") + print(get_fresh_id_counts(ranges)) \ No newline at end of file