2023 day 5 part 2 solved (finally)

master
kwout 10 months ago
parent 150bcd5f84
commit aa6066acee
  1. 33
      2023/5.py
  2. 2
      2023/6.py

@ -3,14 +3,41 @@ seeds = [int(i) for i in data[0][7:].split()]
maps = [[[int(i) for i in numb.split()] for numb in block.splitlines()[1:]] for block in data[1:]]
#[destinationStart, sourceStart, length]
seeds2 = []
#[(start, end)]
for i in range(0, len(seeds), 2):
seeds2.append((seeds[i], seeds[i]+seeds[i+1]-1))
for m in maps:
newSeeds = list(seeds)
for line in m:
target, source, length = line
newSeeds2 = list()
for target, source, length in m:
for i in range(len(seeds)):
seed = seeds[i]
if seed in range(source, source+length):
newSeeds[i] = seed + (target - source)
while seeds2:
rangeStart, rangeEnd = seeds2.pop()
for r, mapStart, length in m:
mapEnd = mapStart + length -1
delta = r - mapStart
if mapEnd < rangeStart or mapStart > rangeEnd:
continue
if rangeStart < mapStart:
seeds2.append((rangeStart, mapStart - 1))
rangeStart = mapStart
if rangeStart < mapStart:
seeds2.append((rangeStart, mapStart - 1))
rangeStart = mapStart
newSeeds2.append((rangeStart + delta, rangeEnd + delta))
break
else:
newSeeds2.append((rangeStart, rangeEnd))
seeds = newSeeds
seeds2 = newSeeds2
print(min(newSeeds))
print(min(newSeeds))
print(min(seeds2)[0])

@ -6,8 +6,6 @@ races = [(int(cols[0][i]), int(cols[1][i])) for i in range(1,len(cols[0]))]
#[(time, record)]
realRace = (int(lines[0].split(": ")[1].replace(" ","")), int(lines[1].split(": ")[1].replace(" ","")))
print(realRace)
#d = t * v
#charge + t = time
#t = time - charge

Loading…
Cancel
Save