Command = tuple[str, int] def part1(commands: list[Command]) -> int: pos: int = 0 depth: int = 0 for command in commands: match command: case ('up', X): depth -= X case ('down', X): depth += X case ('forward', X): pos += X return pos * depth def part2(commands: list[Command]) -> int: pos: int = 0 aim: int = 0 depth: int = 0 for command in commands: match command: case ('up', X): aim -= X case ('down', X): aim += X case ('forward', X): pos += X depth += aim * X return pos * depth commands: list[Command] = [(c, int(q)) for c, q in (l.split() for l in open('2.in'))] print(part1(commands)) print(part2(commands))