parent
ab78dd1fe4
commit
4f1c3a542b
|
|
@ -30,66 +30,69 @@ class Seed:
|
||||||
|
|
||||||
|
|
||||||
seeds = []
|
seeds = []
|
||||||
|
transforms = []
|
||||||
|
|
||||||
def map_range(num, map_ranges):
|
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)
|
for range_cont in map_ranges:
|
||||||
if DEBUG:
|
if num >= range_cont.src_start and num <= range_cont.src_start+range_cont.range:
|
||||||
assert len(s_range) == len(d_range)
|
debug_print("in range", num, range_cont)
|
||||||
|
return (num-range_cont.src_start) + range_cont.dest_start
|
||||||
#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]
|
|
||||||
return num
|
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("Parsing Input:")
|
||||||
print("")
|
print("")
|
||||||
print("===================================\n");
|
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")
|
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 sys.stdin:
|
||||||
for line in f.readlines():
|
for line in f.readlines():
|
||||||
line = line.strip()
|
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("")
|
||||||
print(" Proccessing:")
|
print(" Proccessing:")
|
||||||
print("===================================\n");
|
print("===================================\n");
|
||||||
# Insert Processing Code
|
# 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");
|
print("===================================\n");
|
||||||
|
|
||||||
|
|
||||||
|
min_location = min([s.location for s in seeds])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,4 +109,4 @@ print("===================================\n");
|
||||||
print("")
|
print("")
|
||||||
print(" Answer:")
|
print(" Answer:")
|
||||||
print("===================================\n");
|
print("===================================\n");
|
||||||
print("Answer: XXX");
|
print(f"min_location: \n{min_location}");
|
||||||
Loading…
Reference in New Issue