Files
advent-of-code/adventofcode/2025/day5/day5.py
T
2026-05-21 20:31:57 +02:00

55 lines
1.4 KiB
Python

#!/usr/bin/env python3
import fileinput
def ingredient_is_fresh(ingredient, id_ranges):
for range in id_ranges:
start, end = range
if start <= ingredient <= end:
return True
return False
def merge_ranges(ranges):
"Merge overlapping ranges"
# sort ranges by start value
ranges.sort(key=lambda x: x[0])
queue = [ranges[0]]
for range in ranges[1:]:
current_start, end = range
last_start, last_end = queue.pop()
if current_start <= last_end: # overlap
start = last_start
end = max(last_end, end)
queue.append((start, end))
else: # no overlap
queue.append((last_start, last_end))
queue.append((current_start, end))
return queue
def main(inp):
sep = inp.index("")
id_ranges = [tuple(map(int, x.split("-"))) for x in inp[:sep]]
id_ranges = merge_ranges(id_ranges)
available_ids = (int(x) for x in inp[sep + 1 :])
# Part 1
total = 0
for ingredient in available_ids:
if ingredient_is_fresh(ingredient, id_ranges):
total += 1
print("Part 1:", total)
# Part 2
total = 0
for range in id_ranges:
start, end = range
total += end - start + 1
print("Part 2: ", total)
if __name__ == "__main__":
lines = [x.rstrip() for x in fileinput.input()]
main(lines)