From 2bbef2d9e966ad7aa460a4670e5a7bcd9ae04516 Mon Sep 17 00:00:00 2001 From: kwout Date: Wed, 6 Dec 2023 12:33:44 -0500 Subject: [PATCH] 2023 day 5 part 2 solved (finally) --- 2023/5.py | 33 ++++++++++++++++++++++++++++++--- 2023/6.py | 2 -- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/2023/5.py b/2023/5.py index 1f53209..1b575d0 100644 --- a/2023/5.py +++ b/2023/5.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)) \ No newline at end of file +print(min(newSeeds)) +print(min(seeds2)[0]) \ No newline at end of file diff --git a/2023/6.py b/2023/6.py index c920428..1e627c2 100644 --- a/2023/6.py +++ b/2023/6.py @@ -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