46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
from lib import get_data
|
|
|
|
data = get_data(__file__)
|
|
|
|
ranges, ids = data.split("\n\n")
|
|
ids = tuple(map(int, ids.splitlines()))
|
|
ranges = [list(map(int, line.split("-"))) for line in ranges.splitlines()]
|
|
|
|
updated = True
|
|
while updated:
|
|
updated = False
|
|
sorted_ranges = []
|
|
for lo, up in ranges:
|
|
assert lo <= up
|
|
for i in range(len(sorted_ranges)):
|
|
slo, sup = sorted_ranges[i]
|
|
if up + 1 < slo:
|
|
sorted_ranges.insert(i, (lo, up))
|
|
elif lo < slo:
|
|
sorted_ranges[i] = (lo, max(up, sup))
|
|
updated = True
|
|
elif lo <= sup:
|
|
sorted_ranges[i] = (slo, max(up, sup))
|
|
updated = True
|
|
else:
|
|
continue
|
|
break
|
|
else:
|
|
sorted_ranges.append((lo, up))
|
|
ranges = sorted_ranges
|
|
|
|
|
|
result_part_1 = 0
|
|
for id_to_check in ids:
|
|
for lo, up in ranges:
|
|
if lo <= id_to_check <= up:
|
|
result_part_1 += 1
|
|
break
|
|
print(result_part_1)
|
|
|
|
result_part_2 = 0
|
|
for lo, up in ranges:
|
|
result_part_2 += up - lo + 1
|
|
print(result_part_2)
|
|
assert result_part_2 == 350780324308385
|