Add solution to problem 5

This commit is contained in:
2025-12-06 10:56:26 -05:00
parent d76a694bb3
commit efcc76f416
3 changed files with 1310 additions and 0 deletions

57
Problem5_1.py Normal file
View File

@@ -0,0 +1,57 @@
def isInRange(num: int) -> bool:
for r in ranges :
if num >= r[0] and num <= r[1] :
return True
return False
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, numbers = parseInput(rawInput)
freshCount = 0
spoiledCount = 0
for number in numbers :
if isInRange(number):
freshCount += 1
else:
spoiledCount += 1
print(f"Fresh count: {freshCount}")
#Fresh count: 848

70
Problem5_2.py Normal file
View File

@@ -0,0 +1,70 @@
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

1183
files/Problem5.txt Normal file

File diff suppressed because it is too large Load Diff