diff --git a/2020/01/code.py b/2020/01/code.py index 1949f2a..66c9bff 100644 --- a/2020/01/code.py +++ b/2020/01/code.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: MIT # Copyright (c) 2020 Akumatic -""" https://adventofcode.com/2020/day/1 """ +# +#https://adventofcode.com/2020/day/1 def readFile() -> list: with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f: diff --git a/2020/02/code.py b/2020/02/code.py index 6bddf57..7d38a70 100644 --- a/2020/02/code.py +++ b/2020/02/code.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: MIT # Copyright (c) 2020 Akumatic -""" https://adventofcode.com/2020/day/2 """ +# +# https://adventofcode.com/2020/day/2 def readFile() -> list: input = list() diff --git a/2020/03/README.md b/2020/03/README.md new file mode 100644 index 0000000..b56069b --- /dev/null +++ b/2020/03/README.md @@ -0,0 +1,81 @@ +# 2020 Day 3: Toboggan Trajectory +Copyright (c) Eric Wastl +#### [Direct Link](https://adventofcode.com/2020/day/3) + +## Part 1 + +With the toboggan login problems resolved, you set off toward the airport. While travel by toboggan might be easy, it's certainly not safe: there's very minimal steering and the area is covered in trees. You'll need to see which angles will take you near the fewest trees. + +Due to the local geology, trees in this area only grow on exact integer coordinates in a grid. You make a map (your puzzle input) of the open squares (`.`) and trees (`#`) you can see. For example: + +``` +..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# +``` + +These aren't the only trees, though; due to something you read about once involving arboreal genetics and biome stability, the same pattern repeats to the right many times: + +``` +..##.........##.........##.........##.........##.........##....... ---> +#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#.. +.#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#. +..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.# +.#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#. +..#.##.......#.##.......#.##.......#.##.......#.##.......#.##..... ---> +.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....# +.#........#.#........#.#........#.#........#.#........#.#........# +#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#... +#...##....##...##....##...##....##...##....##...##....##...##....# +.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.# ---> +``` + +You start on the open square (`.`) in the top-left corner and need to reach the bottom (below the bottom-most row on your map). + +The toboggan can only follow a few specific slopes (you opted for a cheaper model that prefers rational numbers); start by **counting all the trees** you would encounter for the slope **right 3, down 1**: + +From your starting position at the top-left, check the position that is right 3 and down 1. Then, check the position that is right 3 and down 1 from there, and so on until you go past the bottom of the map. + +The locations you'd check in the above example are marked here with `O` where there was an open square and `X` where there was a tree: + +``` +..##.........##.........##.........##.........##.........##....... ---> +#..O#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#.. +.#....X..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#. +..#.#...#O#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.# +.#...##..#..X...##..#..#...##..#..#...##..#..#...##..#..#...##..#. +..#.##.......#.X#.......#.##.......#.##.......#.##.......#.##..... ---> +.#.#.#....#.#.#.#.O..#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....# +.#........#.#........X.#........#.#........#.#........#.#........# +#.##...#...#.##...#...#.X#...#...#.##...#...#.##...#...#.##...#... +#...##....##...##....##...#X....##...##....##...##....##...##....# +.#..#...#.#.#..#...#.#.#..#...X.#.#..#...#.#.#..#...#.#.#..#...#.# ---> +``` + +In this example, traversing the map using this slope would cause you to encounter **`7`** trees. + +Starting at the top-left corner of your map and following a slope of right 3 and down 1, **how many trees would you encounter?** + +## Part 2 + +Time to check the rest of the slopes - you need to minimize the probability of a sudden arboreal stop, after all. + +Determine the number of trees you would encounter if, for each of the following slopes, you start at the top-left corner and traverse the map all the way to the bottom: + +- Right 1, down 1. +- Right 3, down 1. (This is the slope you already checked.) +- Right 5, down 1. +- Right 7, down 1. +- Right 1, down 2. + +In the above example, these slopes would find `2`, `7`, `3`, `4`, and `2` tree(s) respectively; multiplied together, these produce the answer **`336`**. + +**What do you get if you multiply together the number of trees encountered on each of the listed slopes?** \ No newline at end of file diff --git a/2020/03/code.py b/2020/03/code.py new file mode 100644 index 0000000..2633705 --- /dev/null +++ b/2020/03/code.py @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: MIT +# Copyright (c) 2020 Akumatic +# +# https://adventofcode.com/2020/day/3 + +def readFile() -> list: + with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f: + return [line[:-1] for line in f.readlines()] + +def count_trees(vals: list, dx: int, dy: int) -> int: + x, y, cnt, length, mod = 0, 0, 0, len(vals) - dy, len(vals[0]) + while y < length: + x = (x + dx) % mod + y += dy + if vals[y][x] == "#": + cnt += 1 + return cnt + +def part1(vals: list) -> int: + return count_trees(vals, 3, 1) + +def part2(vals: list, sol_part1: int) -> int: + deltas = ((1, 1), (5, 1), (7, 1), (1, 2)) + prod = sol_part1 + for delta in deltas: + prod *= count_trees(vals, delta[0], delta[1]) + return prod + +def test(): + test_input = ["..##.......", "#...#...#..", ".#....#..#.", + "..#.#...#.#", ".#...##..#.", "..#.##.....", ".#.#.#....#", + ".#........#", "#.##...#...", "#...##....#", ".#..#...#.#"] + assert part1(test_input) == 7 + assert part2(test_input, 7) == 336 + +if __name__ == "__main__": + test() + vals = readFile() + sol_part1 = part1(vals) + print(f"Part 1: {sol_part1}") + print(f"Part 2: {part2(vals, sol_part1)}") \ No newline at end of file diff --git a/2020/03/input.txt b/2020/03/input.txt new file mode 100644 index 0000000..e3f8307 --- /dev/null +++ b/2020/03/input.txt @@ -0,0 +1,323 @@ +......#..........##......#.#### +.##...###....#.....#...#.#..... +#..##..#.....#............#.#.# +##.#....#####..#....#..#.#..... +..#.#...##.##.......#.#..#..##. +##.#.......#.#.#..#...#.#...#.. +...#...#..#.##....##..#.#...... +.......##.#.#.#.##...#......... +..#...##.##...##..##.##...#.... +.#.#...#.....####..#.#...#.##.. +.#...#......##......##....#.... +..#.....#.........##.#...#.#... +...#.#...#..##...#....#.....##. +..#.....#..#..#......###....... +...##.#....##..##...........#.. +....#......#..#....###...#..... +.....#...#.#.....#..##........# +....#...#....##.#.##.#...#..#.# +.......##.#......##....#....#.. +...#.#...##..#...#..#..#..##.#. +##.#...#..#..................## +##........#....##...#..#..#.... +.#.#..............#######.##... +##..#..#.#.##..#............... +..#........#..#...##.......#... +............##.##.#..........## +.....##..#.....##..#.....#..... +..#.##.###.#..##.............#. +.........##...........#.....#.. +..#....#.#.###.#.#.......##.... +..###..##..#.#.##......#.#.##.. +##......#.#....##.#..#.#..#.#.# +..##.#.###.#...#............... +..####.......#...#.##....#..... +..#....##...#.#.#.#....#.##..## +.#...####..###....#.###...##... +..#.#..........#.#..#..#.....## +.#....#.........###...#.....##. +..#.#.#.##........#.##.#.....#. +#....#....###...#..#.........#. +#..#.###....#..............#... +............#....##.#......#.#. +...#..#.####...............##.. +....##......#.#.........####..# +.#....###..#.#..##........##... +#..##.....###..#............... +..#...........#........#...#..# +......................#.#..#... +.#.##.#..#.#....#...#...#.#.... +..#..#.........#..#.#.......... +.#......#####...#......#..#.... +..........#.....#..#.##.####.## +##.##..#............#####...#.# +..##..#..###......#...#...#.... +....#####........#.##...###.... +......#...##..#..#............# +...#....##.##...#..#...#....... +....#####.#...............###.. +.#....#..##....#.#.#..##.##...# +...#..#..#........#.#####.....# +......##.#...#..#..#.....#..### +###.......#.#........#......#.# +..#.#..#..#........#..#......#. +...##.........#..........#..... +...#..###.#.......#.#.........# +....#..#.##...##.....#.....##.. +#.#.#.#.....##.##.###..#.#....# +..#....#.....##.####..#........ +...#..#.##.....##.#..#....###.. +.#..#.....#....#...#.#.......## +..#..#.......#.#.###......#.##. +.###.####....##............##.# +#....###.#......##.#......##.#. +.##...........#.#....#......... +#.##..##...#...........###....# +#.#..#...#.#..#..###.#.##...#.. +..#...#.#..##....#..#..#....... +#..##..#.####...#...#..####.##. +###..#.##....#...#.###..##...## +##..#..#.#....#.....##.......#. +..#..##.##.#.......###.#.....#. +..........#.####....#.......#.. +#...#.#..#.......##......##..## +##...##.##..###...............# +....##.#...#.......##...##..#.. +.#.........#...#.#...##.#.....# +.#...#.#..#...#..##....#..#...# +.#.#...#..#..###...##....#..... +.........#.#...####..#...#.#... +...#.............#.#..........# +...#...#..##.#........#.#...... +...#...#.....#....#..###.##.### +.#.#........#....#...#.###.#.#. +##.....#.......#..##.#....#..## +...###...#.#.#.#....#.#....#... +#...#.#.......##.#..#....#.#... +#...#......###.....###........# +..#.##...##....#...#....#.#.... +#....#..###....##.#......##...# +##.#...#..........#.##....#..#. +.##....#............###.#...#.. +###.##.#####.##.....##..#####.. +..###.###.......#.#...#....#... +.#...#....####.........#....... +..##.#.#......#....#.#....#.#.# +#.####.....#....#..#.....#.##.. +###.###.##...##.#.#.#.....#.#.. +.......#.....#.......##.#.....# +#..#.##...#........#.#.......## +#.#........#...#....#.......... +..#....##.#......#..#.......... +#....##.....#.....#.##.#...#... +....#.#.....#....####...#.#.##. +......#.......##...##.#......#. +.#.........##...#..#..##..#.... +.#...##.....##.#....#.......... +....#.###..##..#...#..........# +......#...#.#.#........##...... +.#..........#.#.....#..##..#.#. +.......###.#......#....#.#..#.. +..##.......#....#....#.#...##.# +#.##.#.......#..###..##...#.#.. +......####....#.#.....#...#..#. +#.##.###..#..#.#.....###..#.#.# +#.#.#..#.#..##...#...#..##.###. +....##..##.#...............#.#. +..###.#.#.##..#....##.......#.. +#.#....#..........##......##### +.#.#.......##.#.#......##..#.#. +......#.###.##.#..#....#.##.... +..###........#.......##.#.#.... +.#..##.............#.##.###...# +.#####...#......#.......##..... +##..###.#...#....#..#....#.#..# +.#.........###.##.....##.....## +.##.#....#..#.#..##..#....##... +.#..#..#......###...#.......#.. +#.#...#.....#..#.#.#..#..###... +....#....#..#..#....#..#.#.#... +......#.......#.#.#.#.....#.... +###...#...#......#..#.#.#..#.#. +#...##.##.##........##....#.... +.....#.......#...#...#.#.#....# +...##.....##.#...#.#.#.#..#..#. +.#.......##...........#...#.##. +.##..........#......#.#...###.. +.....##...#.....#...#......#... +...........#.....#..#...#..#.#. +#.....##..#...........##....#.. +#.##...###.###....##..#..#....# +#.#.##...##....###....##.##.... +.#..###.....#......#...#...#..# +..#...#....#.#.###.#..#......#. +......#.........#..#.##...#...# +..#.#....##.#..##..##...#....#. +#.....#....##.........##.#..... +...#...#..###.###......##...### +.##.###...##..#.##....##.#..#.. +..#..#.......#................# +.....#..#.#.#..........##..#... +......###.#.#............#..#.# +..#.##.....##....#...#...#.#... +..#......##...#...##........#.. +#.....#.....#..#......#.###...# +....#..#.#.....#...#....#.#...# +#.......#..#...##..#.#..#.##... +..#......###...#.........##...# +...#.......##.....#..##........ +.#....#.#.....##.#.#........... +##..#..#...#.##.#.#.#.#.#..##.# +##...####.#.#.##...#..#......#. +#.##..####.##.#.........#...### +#...#.......#.#..####.#.#.#.... +#....#........#........#....... +..#..####.....#....##...###.##. +...#.#..####.........#....#.##. +##.#...#...#..#.#..##.....##... +....#.........#.##........##.#. +##...#......#....#..#....#....# +###.....#......##...#...##...#. +#.##...............#.......#... +.##.#...#..#....#.#.....###..#. +.....##...#.##.....##...#....#. +#.#..#..........#####..##...... +..#.........##...#.........#.## +...#..##.#.#..#......#..###.### +#..#...#.#...##..........#..... +.###..#....###.....#....#..###. +#..#....#...#........##.....#.. +.#..###........#....#..####..## +.#..#.#.#.......##.#..##.#..##. +..#..###......##....#..#..#..#. +.......###..##....#......#...## +#........#.##.............##.#. +...#.#.#....##....##.###...#... +..#.....#..##..#.#.......#.#### +.#......##.........##...#.....# +.#.###........##....###.#.#...# +##...#.#....#.....##.......#..# +#...........#...........####... +#..#.#..##..#...#....#.##....#. +................##............. +..##...#.#....##....#...#...... +.#.....#....#....#..#..#.#..##. +.....######.#.#.##.###.#....... +..#####....#..#...........#.#.. +.......#..#..##.#...###.#.#.### +###...#...#..##.#.##..#...#..#. +.#..#..............#........... +.#.....#.....##....#....##..#.. +....#####.#....#......#.......# +.#.#.....##.####..#...#.......# +.#...##.#.......#.....##.#..##. +..........#...#....###....#...# +..#......#...#...#..#.#........ +.......#.......#..####..##..... +.#..#.....###...#...#...#...#.. +##..#.......#.#...#..#..#.##..# +#..#...#.#.....#.##.#........#. +......#......#.#..###.##..###.. +.#..#..#.##.#...........#...##. +.#....#...#.#..#.#.#...##.#..#. +##.#....#..#..#.#...#......#.#. +..#.#............##...#........ +...####...#...#.....##..#...### +....###.......###.##..#.###.... +#......#.#....#.#.##.#.##..###. +.....##.....#..##.....##....#.. +..#...#..##.#.##.#.#.#.......## +#....#..##.......#......#..#.## +#.....##...#..##......##.#.#..# +....#..##..#.##...#.#.##..#..## +#..#...##....##..#...#....#...# +.##.#.#....#.....#........##.#. +..##..#....#........#.....#.... +.##.#..##...#.....#...###.....# +#..#..#........#..#.....#.#.#.# +..##..###.#..#...#.#......#..#. +#.....#.....#.###......##..#.#. +.........#...##.........#...#.. +.##.#.##......#.#...###..#....# +...##.#..###........##......#.. +...#.#...#......#.#.#....#..#.. +..####.........#..#....#....... +#..#.........##.#.##....#.....# +..#..#..#.#........#.###....... +##.#..#..#....#...##.......#..# +..#.#.....#.............#...##. +..........#...##.....#..#.#..#. +....#..#...#..##..#...##.#..... +##....#......#..#.....#..#..... +...#.#.#.#...........##...#.#.. +....#.###...#............#..... +.#.#.#.......#.#......#....#.#. +#.#.#.#..##.#..#..##...##.#..#. +.#.##....##..#........#....#... +####...#....#.#...#..#..###...# +.....#.#.##.......##..#.######. +.......#.#.#.....#.#..##....#.. +..#....#.#..#.#.#..#..#........ +.....##......#.........#.#...## +#....##.#.....#..........#.#... +#...#.#..#.#..#.#....#..#.#.... +....##........#................ +###.#.#...#..##...#...#.##...#. +...#....###..#..##..#..#....... +.....#..........#.#........##.# +.#........#.##.#..##..#...#...# +..##....#...#.#.........##.#... +......#...#......#.....#....... +....##.##..#.##...#.#.#.##.#.#. +..#...#.....#.#....##.#........ +.#.#.......#.......###..#..#... +#...#..#..#..##....#...#.....#. +.#..####.##.....##.........#.#. +#...###.......#...####..##..... +#.##.#....#.#.##.......#...#... +..#.......#.#.##.##..#...##.... +.#.......#.#..#.....#.....#.#.. +..#..#.......##.....#.#.....#.# +#...###..#..#..##...#.....#..## +......#................#....... +..#.....##..#.......#...#...##. +...##...####.#..#...#.......##. +..#...#..#...#...#..#..#####... +#..#...#....#....#...........#. +..#.......#..#.##...##..###...# +.#..#..#......##...#....#...... +...#..##....#..........#.....#. +###...#.#......#.#.....#.....## +#.#..#.....#........#.##.#.##.. +....#...#.....#..#.......#.#... +#.#...##....#..#.....#...#.#.#. +.#......#...##..#.......#...... +...#...#.#.#.###.#..#.#..#..... +###...#..###.#...#..##...####.. +.#.#.#..#........#..#......#..# +.#..#....#......#....#.#...#... +.##..........###...##.....#.#.. +.#...#.#.##.##..###.#...#..###. +......#......#......#.##......# +..#.##..#.#..#....##..##...#... +.#......#..#...##....#...#..... +.#.....#.##..........#..#...... +###.#..#.##..#..##...#..#...#.. +#.....###........#.#..##.#..... +.....#.......##.....##.....#.## +...##.#......####....##........ +..#..#..#....#.##.....##.####.. +...#..#....#.#..#.#..#.#.#..#.. +#..........#....#.#.#.#...#..#. +...####.##...#..#.......#.#..## +#........#..#.................. +.#..#....#.#.#..#..........#... +###...#....####....#......#..#. +#.........####..#..#........... +.....##..#..##.##.##.#..#.....# +.#..#.#.##..#..#.#.#.##.###.... +......##......#...#.##....#..#. +.#.#....#..#......#..#...###... +.##...#......##...###...#.#...# +.......#.#....#............#..# +.#..##.#.######...#...#......#. diff --git a/2020/03/solution.txt b/2020/03/solution.txt new file mode 100644 index 0000000..c3ca2cd --- /dev/null +++ b/2020/03/solution.txt @@ -0,0 +1,2 @@ +Part 1: 214 +Part 2: 8336352024 \ No newline at end of file