def run(): # Defaults argv.pop(0) defaults = {'day': '1', 'part': '1', 'input': '__default__'} cli_args = dict(zip(defaults.keys(), argv)) args = ChainMap(cli_args, defaults) day, part, puzzle_input = args.values() input_is_file = True # Handle puzzle input if '__default__' == puzzle_input: puzzle_input = Path(f'./resources/day{day.zfill(2)}.txt') else: input_is_file = Path(puzzle_input).is_file() try: solution = import_module(f"aoc.solution.day{day.zfill(2)}") puzzle_part = getattr(solution, f"part{part}") if input_is_file: with open(puzzle_input, 'r') as file: print(puzzle_part(FileReader(file))) else: print(puzzle_part(FileReader(StringIO(puzzle_input)))) exit(0) except FileNotFoundError: print(f"Input file {puzzle_input} not found.") except AttributeError: print(f"Part {part} not found.") exit(1) except ModuleNotFoundError: print(f"Day {day} not found.") exit(1)
def test_iter_circular(self, lines, break_after, expected): reader = FileReader(lines) seen = list([]) counter = 0 for line in reader.iter_circular(): if counter == break_after: break seen.append(line) counter += 1 assert seen.count(lines[0]) == expected
def test_part_1(test_case, result): file = StringIO(test_case) assert day05.part1(FileReader(file)) == result
def test_part_2(test_case, result): file = StringIO(test_case) assert day10.part2(FileReader(file)) == result
def test_part_2(test_case, result): file = StringIO(test_case.replace('; ', "\n")) assert day06.part2(FileReader(file), 32) == result
def test_part_1(test_case, result): file = StringIO(test_case.replace(', ', "\n")) assert day03.part1(FileReader(file)) == result
def test_part_1(test_case, result): file = StringIO(test_case) assert day10.part1(FileReader(file), False, 3) == result
def test_iteration(self): reader = FileReader(['No Whitespace', '\tWith Whitespace ']) assert list(reader) == ['No Whitespace', 'With Whitespace']
def test_single_line(self): reader = FileReader(['\tSingle Line ']) assert reader.single_line() == 'Single Line'