Source code for day05.lib.parsers

"""Parsing from source file to well defined classes."""
from day05.lib.classes import Mapping, NamedMap


[docs] def grab_inputs(path: str) -> tuple[list[int], list[NamedMap]]: """Parses the source file.""" seeds: list[int] maps: list[NamedMap] = [] named_map: NamedMap with open(path, "r", encoding="utf8") as file: lines = file.readlines() for line in lines: line = line.strip() if line.startswith("seeds"): # grab the seeds seeds_str = line.split(":")[1].split() seeds = [int(seed) for seed in seeds_str] elif line.endswith("map:"): # start a map segment current_map_name = line.split(" map:")[0] named_map = NamedMap(current_map_name) maps.append(named_map) elif len(line.strip()) != 0: # add a mapping to our named_map numbers = [int(item) for item in line.split()] dest, src, size = numbers mapping = Mapping(src_start=src, dest_start=dest, size=size) named_map.add_mapping(mapping) for named_map in maps: named_map.finalize_mappings() return seeds, maps