diff --git a/2023/5/5_2.py b/2023/5/5_2.py new file mode 100644 index 0000000..55565f4 --- /dev/null +++ b/2023/5/5_2.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# 2023 - Advent Of Code 5 - part 2 + +# file = 'input_example.txt' +file = 'input.txt' + +# pylint: disable=consider-using-with +input_lines = [line.strip('\n') for line in open(file, encoding="utf-8")] + +seeds_ranges = [int(x) for x in input_lines[0].split(':')[1].split(' ') if x != ''] +print(f'seeds: {seeds_ranges}') +seeds = [] +# acc = 0 +# for r in range(0, len(seeds_ranges), 2): +# num = seeds_ranges[r + 1] +# acc += num +# print(num) +# print(f'seeds: {acc}') + +# parse ranges +maps = [] +count = 0 +cur_list = [] +for line in input_lines[2:]: + if line == '': + count += 1 + maps.append(cur_list) + elif line.endswith(':'): + cur_list = [] + else: + dest, source, length = line.split(' ') + # print(f'parsed dest: {dest} source: {source} len: {length}') + cur_list.append((int(dest), int(source), int(length))) +maps.append(cur_list) + +min_location = 1917300386 +for r in range(0, len(seeds_ranges), 2): + # print(r) + for s in range(seeds_ranges[r], seeds_ranges[r] + seeds_ranges[r+1]): + location = s + for m in maps: + for r in m: + old = location + if r[1] <= location < (r[1] + r[2]): + location = r[0] + (location - r[1]) + break + if location < min_location: + min_location = location + +print(f'{len(seeds)} seeds') +# print(f'seeds: {seeds}') + +print(min_location)