diff --git a/2022/day02_rock_paper_scissors.py b/2022/day02_rock_paper_scissors.py new file mode 100644 index 0000000..c96a924 --- /dev/null +++ b/2022/day02_rock_paper_scissors.py @@ -0,0 +1,134 @@ +from __future__ import annotations + +import dataclasses +import enum + +import pytest + + +def main(filename: str, expected_part_1: int = None, expected_part_2: int = None): + print(f"\n+ Running on {filename}") + with open(filename) as f: + data = f.read().strip().split("\n") + + data = parse_data(data) + solution_part_1 = solve_part_1(data) + + print(f"1. Found {solution_part_1}") + if expected_part_1: + assert expected_part_1 == solution_part_1 + + solution_part_2 = solve_part_2(data) + print(f"2. Found {solution_part_2}") + if expected_part_2: + assert expected_part_2 == solution_part_2 + + +class Shape(enum.IntEnum): + ROCK = 1 + PAPER = 2 + SCISSORS = 3 + + @classmethod + def from_input(cls, letter: str) -> Shape: + return { + "A": cls.ROCK, + "B": cls.PAPER, + "C": cls.SCISSORS, + "X": cls.ROCK, + "Y": cls.PAPER, + "Z": cls.SCISSORS, + }[letter] + + +@dataclasses.dataclass +class Round: + opponent: Shape + me: Shape + + @property + def value(self) -> int: + return self.me.value + self.score + + @property + def score(self) -> int: + if self.victory: + return 6 + elif self.draw: + return 3 + else: + return 0 + + @property + def victory(self) -> bool: + return (self.me.value - self.opponent.value % 3) == 1 + + @property + def draw(self) -> bool: + return self.opponent == self.me + + +DataType = list[Round] + + +def parse_data(data: list[str]) -> DataType: + rounds = [] + for round in data: # noqa: A001 + opponent, me = round.split(" ") + rounds.append(Round(Shape.from_input(opponent), Shape.from_input(me))) + return rounds + + +def solve_part_1(data: DataType) -> int: + return sum([round.value for round in data]) # noqa: A001 + + +def solve_part_2(data: DataType) -> int: + return 0 + + +@pytest.mark.parametrize( + "opponent,me", + [ + (Shape.ROCK, Shape.PAPER), + (Shape.PAPER, Shape.SCISSORS), + (Shape.SCISSORS, Shape.ROCK), + ], +) +def test_round_victory(opponent, me): + round = Round(opponent, me) # noqa: A001 + assert round.victory + assert not round.draw + + +@pytest.mark.parametrize( + "opponent,me", + [ + (Shape.ROCK, Shape.ROCK), + (Shape.PAPER, Shape.PAPER), + (Shape.SCISSORS, Shape.SCISSORS), + ], +) +def test_round_draw(opponent, me): + round = Round(opponent, me) # noqa: A001 + assert not round.victory + assert round.draw + + +@pytest.mark.parametrize( + "opponent,me", + [ + (Shape.PAPER, Shape.ROCK), + (Shape.SCISSORS, Shape.PAPER), + (Shape.ROCK, Shape.SCISSORS), + ], +) +def test_round_defeat(opponent, me): + round = Round(opponent, me) # noqa: A001 + assert not round.victory + assert not round.draw + + +if __name__ == "__main__": + main("inputs/day02-test1", expected_part_1=15) + main("inputs/day02") diff --git a/2022/inputs/day02 b/2022/inputs/day02 new file mode 100644 index 0000000..cf8495b --- /dev/null +++ b/2022/inputs/day02 @@ -0,0 +1,2500 @@ +C Z +C Z +A Y +A X +C Z +C Z +A X +C X +A X +C X +A X +A X +A X +A X +C Y +A X +A X +A Y +C Z +C X +C Z +C Y +B Y +C Y +C X +C X +A Z +C Y +A Z +A Z +B X +A Y +A X +B Y +C X +A X +A X +C Z +C Y +B X +A Y +C Z +C Y +C Z +C Z +A X +C Z +C Y +C X +C Z +A X +C Z +A Y +A X +A X +A X +A X +C X +A X +A X +C X +A X +C Y +C Y +A X +C Z +C Y +A X +C Z +C Y +C Z +C Z +B X +C Z +C X +C X +B Z +A X +A X +C Z +C X +C X +A X +A Y +C X +C Y +A X +C Z +A Z +C Z +A Z +A Z +C X +A X +A X +C Z +C Y +C Z +A X +A X +C X +A X +C X +A X +A Z +A Y +C Y +A Y +C Z +A X +A Y +C X +A Z +C Y +C Z +C Z +A Y +C Z +A Z +C Z +A Z +A Z +A X +C X +A Y +A X +C Z +A X +C Z +C Z +A X +C Z +C X +A Z +A X +A Z +A X +C Z +A X +C X +A X +A X +C X +C Z +C Y +C Z +A Y +C Z +C Z +A X +C X +B X +C X +A X +C Y +C Z +C Z +C Z +A Z +C Y +A X +C X +B X +B X +C Y +C X +A X +C X +C X +A Y +C Z +A X +A X +A X +C Z +A X +C Z +C Y +C Z +C X +A X +C Z +A X +C Z +C X +C X +A X +C Z +C Z +C X +A Y +B X +B Z +A Z +C Z +A X +A X +A X +C X +C X +C Y +C Z +A Y +B Z +A X +C X +C X +C X +C Y +C X +A X +A X +A Z +A X +A X +C Z +C Z +C Z +A X +C X +C X +C Y +A X +C Z +A Z +C X +A X +C X +C Z +A X +A X +C Z +C X +C Y +A X +C Y +C Z +A Z +C X +A X +A X +A X +A Z +C X +C X +A X +A X +B X +C Y +C X +C Z +C Y +A X +C X +C Z +C Y +C Y +C X +C Y +B X +C X +C Y +A X +C Z +C Y +A X +A X +C X +A X +A X +A Z +C X +A Z +C X +C X +C X +C Y +A Z +C Z +A X +B X +C X +A X +A Z +C X +C Z +B X +C X +A X +A Y +A Z +C Z +C Z +C X +A Z +C Z +C Z +C X +C Y +C Z +C Z +C X +A Z +C Z +C X +A X +A X +A X +A Z +A Z +C Z +A X +C X +A X +C X +C Z +C X +C X +A X +C X +B Y +A X +B X +A X +C X +C Z +A X +C X +A X +A X +C Z +C X +C X +C X +C Z +A X +B X +A Z +C X +B Z +C Z +B Z +C Z +A Y +A X +B Y +A X +A X +C Z +C X +A X +B X +C X +B Z +C Z +A X +A X +A X +A X +A X +A X +A X +C Y +A Y +C X +C Z +C X +C Y +C Z +C X +A X +C Z +A X +A Z +C X +C Z +C Y +A X +C X +C Z +A X +A Y +C X +A X +C Y +A Y +C Y +A Z +C Z +A X +C Z +C Z +A X +C Z +A Z +C X +C Z +B X +C X +A X +A Y +A X +C Z +A Y +A Y +C X +B Z +C X +A X +A X +A X +A X +A X +C X +C Z +A Z +A X +C Y +C Z +A X +A Z +B Z +A Z +A X +C Y +C X +C X +C X +B Z +A X +C Y +A X +A X +A X +C Y +A X +B X +C X +C X +C Z +C Z +A X +C Y +A Z +A X +C X +A X +C X +C X +C Z +A X +C Y +C Y +A X +A Z +A Z +A X +C X +A X +C Y +B X +A X +C Y +C X +B X +C Z +A X +A X +C X +C Z +C Z +C X +C Y +C Y +A X +C Z +C X +C Y +C X +A X +A X +A X +B Y +C X +A X +C X +C X +A X +C Z +C Z +C X +B X +A Y +A Y +C Z +C Y +C X +C Y +B Y +A Z +C X +A X +A Z +A Y +C X +A Z +C Z +C Y +C Z +A X +C X +C Z +C X +C X +A X +C Z +A Z +C X +C Y +C X +A X +A Z +C Z +C X +A Z +B Z +C Y +B X +A Y +B X +B Y +A Y +A X +A Z +C X +C X +A X +C X +C Z +C Y +A Z +A X +C Z +A X +A X +A Z +A X +A X +C Z +A X +C X +A X +A X +A Y +C Z +A X +C Z +A Z +A X +A X +A Y +C Z +A Z +A Z +A X +C X +A X +A X +C Z +C X +C X +C X +C Y +C X +A X +B X +B X +C Z +C Z +C Z +C X +B Y +A Y +B X +B X +C X +C X +C X +A X +C Y +A Z +A X +C X +A X +A X +A X +B X +C Y +A X +C Z +A X +C X +A X +C Z +C X +A X +A Z +A X +A X +A X +C Z +A Y +B X +A X +B X +C Z +A X +A X +C Y +C Z +C Z +A X +C X +A X +A X +A X +A X +A X +C X +A X +C Y +C X +B X +A X +C Y +C Z +A X +A X +C X +A Z +A X +A Z +A X +C Z +A X +B X +C X +A X +C X +A X +C Y +C Z +A X +C Z +C Z +C X +B X +C Z +A X +A Z +C X +A X +C X +C Z +C Z +C Y +C Z +A X +C X +C Z +A Z +C Z +A Z +C X +C Z +A X +A X +B X +A Z +B X +C Y +C Z +C X +A X +C Z +C Z +C Z +B X +C X +C X +A Z +A X +C Y +A X +B Z +B X +A X +C Y +B X +C Z +C Y +C Z +A X +C Y +A X +A X +A Z +A X +A X +C X +C Y +C Z +C Z +C Y +B Y +C Z +A X +A X +C X +C X +C X +A X +C Y +A X +A Y +A X +C X +C Y +C Y +B X +A X +C Z +A X +C Z +C X +A X +A Z +C X +C Y +A X +A Z +A Z +C Y +A X +C Z +C Z +A X +A Z +B X +A X +C Y +C X +B Z +C Z +A X +C Y +A X +C Y +A Z +A X +C X +C Y +B X +A X +B X +A X +A X +B Y +A X +A X +C X +A X +C X +A X +A X +C Y +A X +C Z +C Z +A Z +C X +A Z +C Y +C Z +C X +A X +C Z +A X +C Y +A X +A Z +C Y +C X +C X +C Z +B X +A X +A X +A Z +C Z +C X +A X +C X +A Z +A Z +A X +C X +C Z +B Z +C X +C X +A X +A X +A X +C Y +C X +A X +C Z +A X +B Y +A X +A X +C X +B X +A X +C X +B Y +A Z +C X +C X +A X +A X +A X +C Y +C X +A Z +C X +A X +C Z +C Z +C Y +A X +A X +B Z +C Y +C Z +A X +C Z +A X +C Z +B X +A Z +A Z +C X +A X +C Z +C X +A X +A X +C X +C Z +C X +A X +C X +A X +A X +C Z +C X +A X +A X +A X +A X +C Y +A X +C X +C Z +C Y +C Z +C X +C Z +A X +C X +C Z +C Z +C Z +B X +C X +A Z +A Z +A X +C X +C Z +B Z +C Z +C Z +A Y +A Y +C X +A X +A X +A Z +A X +A Y +A Z +A X +A X +C Z +C Z +A Y +A X +B X +A X +A X +C X +A X +A Z +C Z +C X +C Z +C X +A Z +B X +A X +A X +C X +B Y +A X +C Z +A X +A Y +A Z +A X +C Z +A Z +B X +C Z +C Y +A X +C Y +A X +C X +C X +C X +A X +C X +C Z +C Y +A Z +C X +C Y +A X +A X +C Z +A X +C X +C X +A X +A X +A Z +C X +C Z +A Z +A Z +A X +B X +B X +A X +C Z +A Z +C Z +C X +C Z +B X +C X +C X +B Z +A X +A Z +B Z +B Z +C X +A Z +A X +A Y +C X +A X +C Z +A X +C X +A X +C Z +C X +C X +C X +C Z +B Z +A X +A X +A X +C Z +A X +A X +C X +B Z +C X +C X +A X +B Y +C X +C X +C X +A X +C X +A Z +C Y +B Z +A X +C Z +C Z +C Z +C Z +A Y +C Z +A X +A X +C X +C X +A X +C X +A Z +A X +C Z +C X +A X +C Z +C X +C Z +B Z +A X +C Y +C Z +A X +A X +C Y +A Z +C X +C Z +C Z +C Y +C Z +A X +C X +A X +A X +C X +A X +C Z +A X +A Z +A X +C Z +C Z +B X +C Z +A Y +A Z +A X +C Y +C X +C Y +A X +A Z +A X +A X +A X +C X +B X +C X +A Y +A Y +C Z +A X +A X +A Z +C X +A X +A Z +C Z +C Z +C X +C X +A X +A X +C Z +A X +C Z +C Z +B Z +A X +A X +C Z +A X +C Z +C Y +C X +A X +A Z +A X +A X +A X +C Y +C Z +A X +C Y +C Z +C Z +A X +A Z +A X +C Z +C Y +C Z +C Y +A X +C X +A X +A X +A X +C X +A X +A X +C Y +C X +A X +C X +A Z +A X +C Z +C X +B Z +C Z +A X +C Y +C Z +C X +A X +A X +B Y +A X +B X +C X +A X +A X +C X +C Y +A X +A X +A X +C X +C Z +A X +B X +C Y +C Y +A X +C Y +C X +A X +C X +A X +A X +A X +C X +C X +B Z +A X +C X +A X +C Z +A X +C Y +A X +C Z +C Z +C Y +A X +A Z +A X +C X +C Z +A X +C Z +C X +C Z +A X +C Y +A X +C Z +C Y +C X +A X +A Y +B X +A X +A Y +A X +A X +A X +A X +C Z +C Y +B X +A X +C X +A X +C X +A X +A Y +A X +C Z +A Z +C X +A X +A X +A X +C Z +C Z +C Y +C X +A X +C X +C Y +A Z +C X +A X +C Y +C Z +C Z +A X +A X +C Z +C Z +C X +C X +C X +C Z +C Y +C X +B Z +C Z +A X +C Z +A X +A X +C X +C X +C Y +A Y +A X +C X +A X +C X +C X +A X +A X +A Y +C Z +C Y +A X +A X +A X +A X +C X +C Y +A X +A Y +A X +A X +C X +A Z +C Z +C Z +C Z +C Z +A X +C Z +C X +C X +B X +C X +C Z +C X +A Z +C Z +B X +B Z +C Y +A X +B X +A X +A X +A X +C X +C X +A X +C Y +A X +C Y +B Y +C Y +A X +C X +C Y +C Z +C X +A X +A X +C X +B X +C Z +C X +A X +A Z +A X +C Z +C X +B X +A Z +A X +B Z +C Z +A X +C Y +A X +C Z +B X +C X +C X +C Y +A X +A X +A X +C Z +C X +B Z +C Z +B X +B Z +A X +A Z +A X +C X +C X +C Z +C X +C X +B Y +A X +A X +A X +A X +A X +A X +C X +A Z +A Z +C X +C X +A X +B Y +C X +C X +A Z +A X +B X +A X +C X +C Z +C Y +C Z +C Z +B X +C Y +C X +A X +A X +C X +C Y +C Z +A X +C X +A X +B Z +A X +C Y +C X +C X +A X +C Z +C Z +A X +C X +C X +C X +A X +A Z +C X +A X +C Z +A X +C Z +C Z +A X +C Z +A Z +C X +A X +A X +C Z +A X +A X +A X +C X +A X +A X +C Z +C X +C Y +B X +C X +C Y +C X +A X +A Y +A X +A X +A Z +C Z +A X +C X +C X +C X +C X +B Z +A X +B Y +C X +C X +C Y +C X +C Z +C Z +A X +C X +A X +C X +A Z +C Y +B X +A X +C X +C Z +C Y +B X +C Y +A X +C X +A X +A X +A Z +A X +B X +C X +A X +A Y +A X +C X +C Z +A Z +A X +A X +C Z +A X +C X +A X +C X +A X +C Z +C Y +A X +C X +A X +C Z +A Y +B X +C Z +C Z +A X +A X +A Y +A Z +A X +C X +C Y +C Z +A X +C Z +C Z +B X +A X +A X +A X +C Y +A Z +C Z +C Z +A Z +A X +A X +B X +C X +B X +A X +C Z +A Y +C Z +A X +C X +C Z +C X +A X +C X +A X +A X +C Z +A Z +C X +C X +B Z +C Z +A Y +A X +C X +C Z +A X +C Z +C X +C Y +C X +A Y +C Z +C Z +A X +A X +A X +C Z +C Y +C Z +A X +C Z +A X +C X +A X +A Y +A X +A Z +A X +A Y +A X +A X +A X +A Z +A X +C Z +C Z +C Z +C X +A X +A Z +C X +C Z +A X +C X +C Y +A X +C X +A X +C Y +A X +A X +C Z +C X +A X +C Z +A X +A X +C Z +C X +C Z +C Y +A Y +C Z +C X +B X +A X +A X +A Z +A X +A X +C X +C Z +A X +C X +A Z +B X +A Z +C Z +C Z +A X +B X +A X +A Y +A X +A X +C Z +A X +C Y +C Z +C Y +A X +A X +A X +A X +B Z +B Z +A X +C X +C X +A X +C X +C Y +B X +C Y +B X +A X +B Z +C Z +A X +A X +C X +A Z +A X +C X +C Z +A X +C X +C X +C X +C Z +C Y +A X +A X +A X +C Z +C Z +C X +C Z +B X +A X +C Z +C Z +C Y +A X +A X +C Z +A Z +C X +C Z +C Y +C Z +C Z +A X +C Z +C Y +C X +B X +C Z +A Y +C Z +C X +C X +A X +A X +A X +C Z +B Z +A X +A Z +B X +A Z +A Z +C Z +C Z +C X +C Y +C Y +C Z +A Z +C Y +C X +C Y +A Z +B Y +A X +C Y +A X +A X +A Z +C Z +C Z +C Z +C X +C X +C Z +C Z +A X +C X +A Y +A Y +A X +B Z +A X +C X +A X +C X +A X +A X +A X +C X +C Y +C Z +C Z +A X +C Z +A X +C X +C X +C Z +A X +A X +A X +C X +C Z +A X +A X +A X +A X +C Z +B Y +A X +A X +A X +C Y +A X +A X +A Z +C X +A Z +C Z +A Z +C Z +A X +A Z +A X +A X +A X +A X +A Y +C X +C Z +A X +A Z +C X +A Y +C Z +C Y +A X +B X +A Y +C X +A X +C Z +C X +A X +C Z +C X +A X +C X +C X +C Z +A X +A Y +C Y +C Y +A X +A X +A X +A X +A X +C X +A Y +C Z +C Z +C Y +A X +C Z +C Z +A X +C X +C X +C Y +A X +A X +C X +C X +A Z +A X +C Z +A X +C Z +A X +B X +A Z +B X +C Z +C Z +C X +A X +A Z +C X +A X +A X +C X +C Y +C Z +C X +C X +A X +C Z +C Z +C X +B X +C Z +A X +B X +A Z +C X +A Z +A X +A X +C X +A X +C Z +A X +A X +C Z +C Z +C Z +A X +C X +A Y +C Y +A X +A X +A X +A X +C X +C Z +A X +A X +A X +C X +C Z +A X +C Z +A X +A Y +C Y +C X +C X +A X +A X +A X +A Z +A X +C Z +A X +C Y +B Z +B X +A X +C X +C Z +A X +A X +C Z +B X +B X +C X +C Y +C X +B X +A X +A X +C X +A Z +A X +C X +C X +C X +A X +C Z +A Y +A X +C Y +A X +A X +C Z +A Z +A Z +C X +C X +C Y +C Y +C X +C X +C Z +A X +C X +A X +A X +A X +A X +C Y +C Z +A X +C Z +C X +C X +A X +A X +A Z +C Y +C X +A X +C X +A X +A Z +A X +A Z +A X +A X +A X +C X +A Z +A X +C X +C Y +A Z +A X +B X +C X +C Y +C Z +C X +C Y +C X +C X +A X +C Y +B X +A Z +C Z +B Z +C X +A X +C Z +A X +C X +A X +A X +A X +C Z +C Y +B Z +A X +C X +A Y +C Z +A X +A X +A Z +A Z +A Y +C X +C Z +C X +A Z +C X +C Z +C X +B X +A X +C Z +A X +A X +C Z +A Z +C X +C Y +C X +C X +C Y +A X +A X +C X +A Z +C X +C Z +C X +A Z +A X +A Y +A X +A X +B Z +C Z +C Z +A Y +C X +A X +B X +A X +A Z +C Y +C Z +C X +C Z +C Z +C X +C X +A X +C X +A Z +C Z +C Z +C Z +C Y +C X +A X +C Z +A Z +C Z +C Z +A X +C X +A X +C Z +A X +B X +A X +C Z +C X +C X +A X +C Y +A X +C Z +B X +C Z +C X +A X +C X +C X +C Z +A X +A X +C Z +C Z +C X +C Z +C X +A X +A X +C Z +C X +C X +A X +C Z +A Z +C Z +B X +C X +C Y +C X +C Z +A X +B X +C Z +A X +C Z +A Z +C Z +C X +A X +C Z +C Z +A X +A X +C Z +A X +C Y +A Z +C X +C Z +A X +B Z +B X +A X +A Z +A X +A Z +A X +A X +C Y +A X +C Y +C X +C Y +C Y +C X +A X +A Z +A Z +C X +C Z +B X +A X +C Z +A Z +C X +C Z +C Y +A X +A X +C Z +C Z +C Y +A Z +C Z +C Y +A X +C X +A X +C X +C Z +A Z +B Z +A X +A X +A X +C X +C X +A Y +A Z +C X +C Z +A X +B X +A X +A X +C X +C X +B X +A X +B X +C Z +A Z +C Z +A X +C X +C Z +C Y +A Y +A Z +C Y +C Z +A X +A X +C X +A X +C Z +C Y +A X +C Z +A X +A X +B X +A X +A Z +C X +C Y +A Z +C Z +A X +A Z +C X +C Z +C X +C Z +A X +A X +A X +C X +A X +C Z +C X +C X +C X +C X +A X +C X +B Y +A Z +A Z +C Z +C X +A Y +C X +A X +C X +C Z +B Z +C Z +B X +A X +A Z +A X +C X +A X +C Z +C Z +C Z +A X +C Z +A X +C Z +C X +C X +C X +B X +A X +A X +B X +C X +A X +C Z +A Z +C Y +C Z +A Z +B Z +A Z +C Z +C Z +C X +A X +A X +C X +C X +C Y +A Y +A Z +A X +C Z +C Z +C Y +C X +A X +A X +C Y +A Z +C X +C X +C X +A X +C X +C X +A Z +C X +C Y +A Z +C Z +C Y +A Z +C Z +A X +C X +C Y +C X +C X +C Z +C X +C X +C Z +C X +A X +B Y +A X +C X +B Z +C Z +C X +C Z +C Z +A Y +A Y +A X +A Z +C Z +A X +C X +C Z +A Z +A X +A X +A X +B X +A X +B Z +C X +A X +C X +A Z +C X +A X +C Y +A X +C X +C Y +A Z +C Z +C Z +B X +A X +C X +A X +C X +C Y +A X +C Y +A X +B X +C Y +A X +A X +C X +A X +B Y +C Y +C Y +C Y +C X +A Y +C X +C Z +A X +A Z +A X +A X +C Z +A Z +A Z +C X +A X +A X +B X +C X +C Y +C X +B Z +A X +C X +C Y +C X +C Z +C Y +A X +C X +A X +A X +A Y +C Z +C Z +C Z +A X +A X +A Z +A X +A X +A Z +A X +C Y +C Y +A X +A X +A Z +C X +A X +C Z +A Z +C Z +C Y +C Z +A X +C Z +C X +C Z +A X +C Y +C Y +B X +A X +A Z +C X +A X +A X +C Z +A X +C X +C Z +A Z +A Y +A Y +A X +C X +A Y +A X +A X +B Z +A X +C X +C X +C X +A X +C X +C Z +C Z +A Z +C X +C X +C Y +A X +C X +A X +A X +C Y +C X +A X +C Y +C X +C X +A Y +C Z +C X +C X +C Y +C Z +A Y +A X +C Z +C Z +C Z +C X +C Z +A X +A X +A Z +A X +C Y +C X +C Z +A X +A X +C Z +A X +C X +A X +A Y +C X diff --git a/2022/inputs/day02-test1 b/2022/inputs/day02-test1 new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/2022/inputs/day02-test1 @@ -0,0 +1,3 @@ +A Y +B X +C Z diff --git a/2022/template.py b/2022/template.py index eaa3987..80b181c 100644 --- a/2022/template.py +++ b/2022/template.py @@ -16,15 +16,18 @@ def main(filename: str, expected_part_1: int = None, expected_part_2: int = None assert expected_part_2 == solution_part_2 -def parse_data(data: list[str]): +DataType = list[str] + + +def parse_data(data: list[str]) -> DataType: return data -def solve_part_1(data) -> int: +def solve_part_1(data: DataType) -> int: return 0 -def solve_part_2(data) -> int: +def solve_part_2(data: DataType) -> int: return 0