parent
ab78dd1fe4
commit
4f1c3a542b
|
|
@ -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}");
|
||||
Loading…
Reference in New Issue