2025(05): part 2 be solved

This commit is contained in:
2025-12-05 11:13:41 +01:00
parent e0a607a690
commit 6d1d241bce

47
2025/05/part2.py Normal file
View File

@ -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))