You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.4 KiB

data = open("input.txt", 'r').read().split("\n\n")
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)
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(seeds2)[0])