import re import argparse parser = argparse.ArgumentParser() parser.add_argument("filename", help="the file from which to take data") args = parser.parse_args() seeds = [] maps = [] # list of map lists with open(args.filename, "r") as f: seeds_re = re.compile("seeds: ((\d| )*)") new_map_re = re.compile("(.*?) map:") map_data_re = re.compile("\d+ \d+ \d+") current_map = [] for l in f.readlines(): if seeds_re.match(l): seeds = list(map(int, seeds_re.match(l).group(1).split())) if new_map_re.match(l): if current_map: maps.append(current_map) current_map = [] if map_data_re.match(l): current_map.append(list(map(int, map_data_re.match(l).group(0).split()))) if current_map: maps.append(current_map) print("seeds: ", seeds) print("maps are: ") for x in maps: print(x) def mapit(the_map, number): for destination_start, origin_start, length in the_map: offset = number - origin_start if offset < length and offset >= 0: return destination_start + offset return number # maps are lists of numbers, the output they map to, and the range in question def transform(this_mapling, that_mapling): our_origin = {start: this_mapling[1], end: this_mapling[1]+this_mapling[2]} our_destination = {start: this_mapling[0], end: this_mapling[0] + this_mapling[2]} their_origin = {start: that_mapling[1], end: that_mapling[1]+this_mapling[2]} their_destination = {start: that_mapling[0], end: that_mapling[1] + that_mapling[2]} # our destination start is in their origin range