Files
AdventOfCode2025/Problem5_2.py
2025-12-06 10:56:26 -05:00

71 lines
1.4 KiB
Python

def reduceRanges() :
sortedRanges = sorted(ranges, key=lambda r: r[0])
reducedRanges = []
currentRange = sortedRanges[0]
for r in sortedRanges[1:] :
if r[0] <= currentRange[1] + 1 :
#Overlapping or contiguous ranges, extend current range if needed
if r[1] > currentRange[1] :
currentRange = (currentRange[0], r[1])
else :
#No overlap, save current range and start a new one
reducedRanges.append(currentRange)
currentRange = r
#Add the last range
reducedRanges.append(currentRange)
return reducedRanges
testInput = [
"3-5",
"10-14",
"16-20",
"12-18",
"",
"1",
"5",
"8",
"11",
"17",
"32"
]
def readFile() :
ary = []
with open("files/Problem5.txt", "r") as file :
for line in file :
ary.append(line.replace("\n", ""))
return ary
def parseInput(input: list[str]):
ranges = []
numbers = []
readingRanges = True
for line in input:
if line == "":
readingRanges = False
continue
if readingRanges:
parts = line.split("-")
ranges.append((int(parts[0]), int(parts[1])))
else:
numbers.append(int(line))
return ranges, numbers
#rawInput = testInput
rawInput = readFile()
ranges, number = parseInput(rawInput)
reducedRanges = reduceRanges()
freshCount = 0
spoiledCount = 0
for r in reducedRanges :
diff = r[1] - r[0] + 1
#print(f"Range {r[0]}-{r[1]} adds {diff} fresh")
freshCount += diff
print(f"Fresh count: {freshCount}")
#Fresh count: 334714395325710