41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
with open("day5/input.txt") as file:
|
|
data = file.readlines()
|
|
|
|
safeFood = []
|
|
maybeRotten = []
|
|
|
|
for index, item in enumerate(data):
|
|
if(item == "\n"):
|
|
print(f"At index {index} is space")
|
|
safeFood = [value.strip("\n") for value in data[:index]]
|
|
maybeRotten = [int(value.strip("\n")) for value in data[index+1:]]
|
|
|
|
safeRanges = []
|
|
|
|
for safeRange in safeFood:
|
|
safeRanges.append([int(number) for number in safeRange.split("-")])
|
|
|
|
|
|
safeFoodNumber = 0
|
|
for item in maybeRotten:
|
|
for ranges in safeRanges:
|
|
if((ranges[0] <= item) and (item <= ranges[1])):
|
|
safeFoodNumber+=1
|
|
break
|
|
|
|
# merge intervals and count unique IDs without allocating every ID
|
|
merged = []
|
|
for start, end in sorted(safeRanges, key=lambda r: r[0]):
|
|
if not merged or start > merged[-1][1] + 1:
|
|
merged.append([start, end])
|
|
else:
|
|
merged[-1][1] = max(merged[-1][1], end)
|
|
|
|
total_covered = sum(end - start + 1 for start, end in merged)
|
|
#print(total_covered)
|
|
# if you need the compact intervals for lookups later: safeRanges = merged
|
|
|
|
#print(safeRanges)
|
|
#print(maybeRotten)
|
|
print(f"Part 1: {safeFoodNumber}\n\rPart 2: {total_covered}")
|