I was big dumb dumb.

Too complicated for what was needed
This commit is contained in:
icaema 2023-12-06 21:09:14 -05:00
parent ab78dd1fe4
commit 4f1c3a542b
1 changed files with 43 additions and 39 deletions

View File

@ -30,66 +30,69 @@ class Seed:
seeds = []
transforms = []
def map_range(num, map_ranges):
#print(map_ranges)
#print([list(range(tr.src_start, tr.src_start+tr.range)) for tr in map_ranges])
s_range = list(chain.from_iterable([range(tr.src_start, tr.src_start+tr.range) for tr in map_ranges]))
d_range = list(chain.from_iterable([range(tr.dest_start, tr.dest_start+tr.range) for tr in map_ranges]))
#s_range = list(chain.from_iterable([list(range(tr.src_start, tr.src_start+tr.range) for tr in map_ranges]]))
#debug_print("map_range", s_range, d_range)
if DEBUG:
assert len(s_range) == len(d_range)
#s_range = list(range(tr.src_start, tr.src_start+tr.range))
#d_range = list(range(tr.dest_start, tr.dest_start+tr.range))
for i, s_num in enumerate(s_range):
if num == s_num:
#print("match", num, s_num, d_range[i])
return d_range[i]
for range_cont in map_ranges:
if num >= range_cont.src_start and num <= range_cont.src_start+range_cont.range:
debug_print("in range", num, range_cont)
return (num-range_cont.src_start) + range_cont.dest_start
return num
seeds = [Seed(79), Seed(14), Seed(55), Seed(13)]
to_soil_maps = [RangeContainer(50, 98, 2), RangeContainer(52, 50, 48)]
to_fertilizer_maps = [RangeContainer(0, 15, 37), RangeContainer(37, 52, 2), RangeContainer(39, 0, 15)]
for seed in seeds:
seed.soil = map_range(seed.number, to_soil_maps)
seed.fertilizer = map_range(seed.soil, to_fertilizer_maps)
debug_print(f"seed {seed.number}, soil {seed.soil}, fertilizer {seed.fertilizer}")
#debug_print(seeds.soil)
print("Parsing Input:")
print("")
print("===================================\n");
FILENAME = "/home/icaema/Public/advent-of-code/day-05/data/p01test.txt"
FILENAME = "/home/icaema/Public/advent-of-code/day-05/data/p01data.txt"
f = open(FILENAME, "r")
parse_map_no = 0 #the index of the maps that we are processing
# 1 is seed-to-soil
# 2 is soil-to-fert
# and so on
#for line in sys.stdin:
for line in f.readlines():
line = line.strip()
#debug_print("input", line)
debug_print("input", line, "no", parse_map_no)
if line == "":
continue
if line[:7] == "seeds: ":
seeds = [Seed(int(num)) for num in line[7:].split()]
debug_print("seeds", [s.number for s in seeds])
continue
if "map" in line:
parse_map_no += 1
transforms.append([])
continue
pr = [int(x) for x in line.split()]
transforms[-1].append(RangeContainer(pr[0], pr[1], pr[2]))
#debug_print("transforms", transforms[-1])
print("")
print(" Proccessing:")
print("===================================\n");
# Insert Processing Code
for seed in seeds:
attributes = seed.__dir__()[:8]
for i, attribute in enumerate(attributes):
if i == 0: continue
setattr(seed, attribute, map_range(getattr(seed, attributes[i-1]), transforms[i-1]))
debug_print("attr", i , attribute)
debug_print("set_val", i , getattr(seed, attribute))
seed.soil = map_range(seed.number, transforms[0])
debug_print("soil", seed.soil)
#for i, attribute in enumerate(attributes):
# setattr(seed, attribute, map_range(seed, transforms[i-1]))
# debug_print("get", attribute, getattr(seed, attribute))
#debug_print(f"seed {seed.number}, soil {seed.soil}, fertilizer {seed.fertilizer}")
for seed in seeds:
debug_print("location", seed.location)
@ -98,6 +101,7 @@ print(" Calculate Answer:")
print("===================================\n");
min_location = min([s.location for s in seeds])
@ -105,4 +109,4 @@ print("===================================\n");
print("")
print(" Answer:")
print("===================================\n");
print("Answer: XXX");
print(f"min_location: \n{min_location}");