2021-12-02 - Dive!
(original .ipynb)
Day 2 puzzle input is a sequence of commands (forward n
, up n
or down n
) which manipulate a submarine's position (mine is here). Part 1 involves interpreting these as directly adjusting the submarine's horizontal
and depth
- the answer being the product of these. Part 2 is the same but with up n
/down n
interpreted as adjusting a parameter aim
and each forward
movement both adjusting the current horizontal position (by n
) and the current depth
(by n * aim
). The answer was still the product of horizontal
and depth
.
puzzle_input_str = open("puzzle_input/day2.txt").read() test_input_str = """forward 5 down 5 forward 8 up 3 down 8 forward 2""" def parse_line(line): if line.startswith("forward"): return (int(line.removeprefix("forward ")), 0) if line.startswith("up"): return (0, -int(line.removeprefix("up "))) if line.startswith("down"): return (0, int(line.removeprefix("down "))) return line def parse_input_lines(input_str): return [parse_line(line) for line in input_str.split("\n")] def part_one(input_str): commands = parse_input_lines(input_str) horizontal, depth = (0, 0) for dh, dd in commands: horizontal += dh depth += dd return horizontal * depth assert 150 == part_one(test_input_str) print("part one:", part_one(puzzle_input_str))
part one: 1580000
def part_two(input_str): commands = parse_input_lines(input_str) horizontal, aim, depth = (0, 0, 0) for dh, da in commands: horizontal += dh aim += da depth += dh * aim return horizontal * depth assert 900 == part_two(test_input_str) print("part two:", part_two(puzzle_input_str))
part two: 1251263225