2020 Day 03, unified headers for 2020
This commit is contained in:
parent
10c048ab41
commit
592513f6b7
@ -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:
|
||||
|
@ -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()
|
||||
|
81
2020/03/README.md
Normal file
81
2020/03/README.md
Normal file
@ -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?**
|
41
2020/03/code.py
Normal file
41
2020/03/code.py
Normal file
@ -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)}")
|
323
2020/03/input.txt
Normal file
323
2020/03/input.txt
Normal file
@ -0,0 +1,323 @@
|
||||
......#..........##......#.####
|
||||
.##...###....#.....#...#.#.....
|
||||
#..##..#.....#............#.#.#
|
||||
##.#....#####..#....#..#.#.....
|
||||
..#.#...##.##.......#.#..#..##.
|
||||
##.#.......#.#.#..#...#.#...#..
|
||||
...#...#..#.##....##..#.#......
|
||||
.......##.#.#.#.##...#.........
|
||||
..#...##.##...##..##.##...#....
|
||||
.#.#...#.....####..#.#...#.##..
|
||||
.#...#......##......##....#....
|
||||
..#.....#.........##.#...#.#...
|
||||
...#.#...#..##...#....#.....##.
|
||||
..#.....#..#..#......###.......
|
||||
...##.#....##..##...........#..
|
||||
....#......#..#....###...#.....
|
||||
.....#...#.#.....#..##........#
|
||||
....#...#....##.#.##.#...#..#.#
|
||||
.......##.#......##....#....#..
|
||||
...#.#...##..#...#..#..#..##.#.
|
||||
##.#...#..#..................##
|
||||
##........#....##...#..#..#....
|
||||
.#.#..............#######.##...
|
||||
##..#..#.#.##..#...............
|
||||
..#........#..#...##.......#...
|
||||
............##.##.#..........##
|
||||
.....##..#.....##..#.....#.....
|
||||
..#.##.###.#..##.............#.
|
||||
.........##...........#.....#..
|
||||
..#....#.#.###.#.#.......##....
|
||||
..###..##..#.#.##......#.#.##..
|
||||
##......#.#....##.#..#.#..#.#.#
|
||||
..##.#.###.#...#...............
|
||||
..####.......#...#.##....#.....
|
||||
..#....##...#.#.#.#....#.##..##
|
||||
.#...####..###....#.###...##...
|
||||
..#.#..........#.#..#..#.....##
|
||||
.#....#.........###...#.....##.
|
||||
..#.#.#.##........#.##.#.....#.
|
||||
#....#....###...#..#.........#.
|
||||
#..#.###....#..............#...
|
||||
............#....##.#......#.#.
|
||||
...#..#.####...............##..
|
||||
....##......#.#.........####..#
|
||||
.#....###..#.#..##........##...
|
||||
#..##.....###..#...............
|
||||
..#...........#........#...#..#
|
||||
......................#.#..#...
|
||||
.#.##.#..#.#....#...#...#.#....
|
||||
..#..#.........#..#.#..........
|
||||
.#......#####...#......#..#....
|
||||
..........#.....#..#.##.####.##
|
||||
##.##..#............#####...#.#
|
||||
..##..#..###......#...#...#....
|
||||
....#####........#.##...###....
|
||||
......#...##..#..#............#
|
||||
...#....##.##...#..#...#.......
|
||||
....#####.#...............###..
|
||||
.#....#..##....#.#.#..##.##...#
|
||||
...#..#..#........#.#####.....#
|
||||
......##.#...#..#..#.....#..###
|
||||
###.......#.#........#......#.#
|
||||
..#.#..#..#........#..#......#.
|
||||
...##.........#..........#.....
|
||||
...#..###.#.......#.#.........#
|
||||
....#..#.##...##.....#.....##..
|
||||
#.#.#.#.....##.##.###..#.#....#
|
||||
..#....#.....##.####..#........
|
||||
...#..#.##.....##.#..#....###..
|
||||
.#..#.....#....#...#.#.......##
|
||||
..#..#.......#.#.###......#.##.
|
||||
.###.####....##............##.#
|
||||
#....###.#......##.#......##.#.
|
||||
.##...........#.#....#.........
|
||||
#.##..##...#...........###....#
|
||||
#.#..#...#.#..#..###.#.##...#..
|
||||
..#...#.#..##....#..#..#.......
|
||||
#..##..#.####...#...#..####.##.
|
||||
###..#.##....#...#.###..##...##
|
||||
##..#..#.#....#.....##.......#.
|
||||
..#..##.##.#.......###.#.....#.
|
||||
..........#.####....#.......#..
|
||||
#...#.#..#.......##......##..##
|
||||
##...##.##..###...............#
|
||||
....##.#...#.......##...##..#..
|
||||
.#.........#...#.#...##.#.....#
|
||||
.#...#.#..#...#..##....#..#...#
|
||||
.#.#...#..#..###...##....#.....
|
||||
.........#.#...####..#...#.#...
|
||||
...#.............#.#..........#
|
||||
...#...#..##.#........#.#......
|
||||
...#...#.....#....#..###.##.###
|
||||
.#.#........#....#...#.###.#.#.
|
||||
##.....#.......#..##.#....#..##
|
||||
...###...#.#.#.#....#.#....#...
|
||||
#...#.#.......##.#..#....#.#...
|
||||
#...#......###.....###........#
|
||||
..#.##...##....#...#....#.#....
|
||||
#....#..###....##.#......##...#
|
||||
##.#...#..........#.##....#..#.
|
||||
.##....#............###.#...#..
|
||||
###.##.#####.##.....##..#####..
|
||||
..###.###.......#.#...#....#...
|
||||
.#...#....####.........#.......
|
||||
..##.#.#......#....#.#....#.#.#
|
||||
#.####.....#....#..#.....#.##..
|
||||
###.###.##...##.#.#.#.....#.#..
|
||||
.......#.....#.......##.#.....#
|
||||
#..#.##...#........#.#.......##
|
||||
#.#........#...#....#..........
|
||||
..#....##.#......#..#..........
|
||||
#....##.....#.....#.##.#...#...
|
||||
....#.#.....#....####...#.#.##.
|
||||
......#.......##...##.#......#.
|
||||
.#.........##...#..#..##..#....
|
||||
.#...##.....##.#....#..........
|
||||
....#.###..##..#...#..........#
|
||||
......#...#.#.#........##......
|
||||
.#..........#.#.....#..##..#.#.
|
||||
.......###.#......#....#.#..#..
|
||||
..##.......#....#....#.#...##.#
|
||||
#.##.#.......#..###..##...#.#..
|
||||
......####....#.#.....#...#..#.
|
||||
#.##.###..#..#.#.....###..#.#.#
|
||||
#.#.#..#.#..##...#...#..##.###.
|
||||
....##..##.#...............#.#.
|
||||
..###.#.#.##..#....##.......#..
|
||||
#.#....#..........##......#####
|
||||
.#.#.......##.#.#......##..#.#.
|
||||
......#.###.##.#..#....#.##....
|
||||
..###........#.......##.#.#....
|
||||
.#..##.............#.##.###...#
|
||||
.#####...#......#.......##.....
|
||||
##..###.#...#....#..#....#.#..#
|
||||
.#.........###.##.....##.....##
|
||||
.##.#....#..#.#..##..#....##...
|
||||
.#..#..#......###...#.......#..
|
||||
#.#...#.....#..#.#.#..#..###...
|
||||
....#....#..#..#....#..#.#.#...
|
||||
......#.......#.#.#.#.....#....
|
||||
###...#...#......#..#.#.#..#.#.
|
||||
#...##.##.##........##....#....
|
||||
.....#.......#...#...#.#.#....#
|
||||
...##.....##.#...#.#.#.#..#..#.
|
||||
.#.......##...........#...#.##.
|
||||
.##..........#......#.#...###..
|
||||
.....##...#.....#...#......#...
|
||||
...........#.....#..#...#..#.#.
|
||||
#.....##..#...........##....#..
|
||||
#.##...###.###....##..#..#....#
|
||||
#.#.##...##....###....##.##....
|
||||
.#..###.....#......#...#...#..#
|
||||
..#...#....#.#.###.#..#......#.
|
||||
......#.........#..#.##...#...#
|
||||
..#.#....##.#..##..##...#....#.
|
||||
#.....#....##.........##.#.....
|
||||
...#...#..###.###......##...###
|
||||
.##.###...##..#.##....##.#..#..
|
||||
..#..#.......#................#
|
||||
.....#..#.#.#..........##..#...
|
||||
......###.#.#............#..#.#
|
||||
..#.##.....##....#...#...#.#...
|
||||
..#......##...#...##........#..
|
||||
#.....#.....#..#......#.###...#
|
||||
....#..#.#.....#...#....#.#...#
|
||||
#.......#..#...##..#.#..#.##...
|
||||
..#......###...#.........##...#
|
||||
...#.......##.....#..##........
|
||||
.#....#.#.....##.#.#...........
|
||||
##..#..#...#.##.#.#.#.#.#..##.#
|
||||
##...####.#.#.##...#..#......#.
|
||||
#.##..####.##.#.........#...###
|
||||
#...#.......#.#..####.#.#.#....
|
||||
#....#........#........#.......
|
||||
..#..####.....#....##...###.##.
|
||||
...#.#..####.........#....#.##.
|
||||
##.#...#...#..#.#..##.....##...
|
||||
....#.........#.##........##.#.
|
||||
##...#......#....#..#....#....#
|
||||
###.....#......##...#...##...#.
|
||||
#.##...............#.......#...
|
||||
.##.#...#..#....#.#.....###..#.
|
||||
.....##...#.##.....##...#....#.
|
||||
#.#..#..........#####..##......
|
||||
..#.........##...#.........#.##
|
||||
...#..##.#.#..#......#..###.###
|
||||
#..#...#.#...##..........#.....
|
||||
.###..#....###.....#....#..###.
|
||||
#..#....#...#........##.....#..
|
||||
.#..###........#....#..####..##
|
||||
.#..#.#.#.......##.#..##.#..##.
|
||||
..#..###......##....#..#..#..#.
|
||||
.......###..##....#......#...##
|
||||
#........#.##.............##.#.
|
||||
...#.#.#....##....##.###...#...
|
||||
..#.....#..##..#.#.......#.####
|
||||
.#......##.........##...#.....#
|
||||
.#.###........##....###.#.#...#
|
||||
##...#.#....#.....##.......#..#
|
||||
#...........#...........####...
|
||||
#..#.#..##..#...#....#.##....#.
|
||||
................##.............
|
||||
..##...#.#....##....#...#......
|
||||
.#.....#....#....#..#..#.#..##.
|
||||
.....######.#.#.##.###.#.......
|
||||
..#####....#..#...........#.#..
|
||||
.......#..#..##.#...###.#.#.###
|
||||
###...#...#..##.#.##..#...#..#.
|
||||
.#..#..............#...........
|
||||
.#.....#.....##....#....##..#..
|
||||
....#####.#....#......#.......#
|
||||
.#.#.....##.####..#...#.......#
|
||||
.#...##.#.......#.....##.#..##.
|
||||
..........#...#....###....#...#
|
||||
..#......#...#...#..#.#........
|
||||
.......#.......#..####..##.....
|
||||
.#..#.....###...#...#...#...#..
|
||||
##..#.......#.#...#..#..#.##..#
|
||||
#..#...#.#.....#.##.#........#.
|
||||
......#......#.#..###.##..###..
|
||||
.#..#..#.##.#...........#...##.
|
||||
.#....#...#.#..#.#.#...##.#..#.
|
||||
##.#....#..#..#.#...#......#.#.
|
||||
..#.#............##...#........
|
||||
...####...#...#.....##..#...###
|
||||
....###.......###.##..#.###....
|
||||
#......#.#....#.#.##.#.##..###.
|
||||
.....##.....#..##.....##....#..
|
||||
..#...#..##.#.##.#.#.#.......##
|
||||
#....#..##.......#......#..#.##
|
||||
#.....##...#..##......##.#.#..#
|
||||
....#..##..#.##...#.#.##..#..##
|
||||
#..#...##....##..#...#....#...#
|
||||
.##.#.#....#.....#........##.#.
|
||||
..##..#....#........#.....#....
|
||||
.##.#..##...#.....#...###.....#
|
||||
#..#..#........#..#.....#.#.#.#
|
||||
..##..###.#..#...#.#......#..#.
|
||||
#.....#.....#.###......##..#.#.
|
||||
.........#...##.........#...#..
|
||||
.##.#.##......#.#...###..#....#
|
||||
...##.#..###........##......#..
|
||||
...#.#...#......#.#.#....#..#..
|
||||
..####.........#..#....#.......
|
||||
#..#.........##.#.##....#.....#
|
||||
..#..#..#.#........#.###.......
|
||||
##.#..#..#....#...##.......#..#
|
||||
..#.#.....#.............#...##.
|
||||
..........#...##.....#..#.#..#.
|
||||
....#..#...#..##..#...##.#.....
|
||||
##....#......#..#.....#..#.....
|
||||
...#.#.#.#...........##...#.#..
|
||||
....#.###...#............#.....
|
||||
.#.#.#.......#.#......#....#.#.
|
||||
#.#.#.#..##.#..#..##...##.#..#.
|
||||
.#.##....##..#........#....#...
|
||||
####...#....#.#...#..#..###...#
|
||||
.....#.#.##.......##..#.######.
|
||||
.......#.#.#.....#.#..##....#..
|
||||
..#....#.#..#.#.#..#..#........
|
||||
.....##......#.........#.#...##
|
||||
#....##.#.....#..........#.#...
|
||||
#...#.#..#.#..#.#....#..#.#....
|
||||
....##........#................
|
||||
###.#.#...#..##...#...#.##...#.
|
||||
...#....###..#..##..#..#.......
|
||||
.....#..........#.#........##.#
|
||||
.#........#.##.#..##..#...#...#
|
||||
..##....#...#.#.........##.#...
|
||||
......#...#......#.....#.......
|
||||
....##.##..#.##...#.#.#.##.#.#.
|
||||
..#...#.....#.#....##.#........
|
||||
.#.#.......#.......###..#..#...
|
||||
#...#..#..#..##....#...#.....#.
|
||||
.#..####.##.....##.........#.#.
|
||||
#...###.......#...####..##.....
|
||||
#.##.#....#.#.##.......#...#...
|
||||
..#.......#.#.##.##..#...##....
|
||||
.#.......#.#..#.....#.....#.#..
|
||||
..#..#.......##.....#.#.....#.#
|
||||
#...###..#..#..##...#.....#..##
|
||||
......#................#.......
|
||||
..#.....##..#.......#...#...##.
|
||||
...##...####.#..#...#.......##.
|
||||
..#...#..#...#...#..#..#####...
|
||||
#..#...#....#....#...........#.
|
||||
..#.......#..#.##...##..###...#
|
||||
.#..#..#......##...#....#......
|
||||
...#..##....#..........#.....#.
|
||||
###...#.#......#.#.....#.....##
|
||||
#.#..#.....#........#.##.#.##..
|
||||
....#...#.....#..#.......#.#...
|
||||
#.#...##....#..#.....#...#.#.#.
|
||||
.#......#...##..#.......#......
|
||||
...#...#.#.#.###.#..#.#..#.....
|
||||
###...#..###.#...#..##...####..
|
||||
.#.#.#..#........#..#......#..#
|
||||
.#..#....#......#....#.#...#...
|
||||
.##..........###...##.....#.#..
|
||||
.#...#.#.##.##..###.#...#..###.
|
||||
......#......#......#.##......#
|
||||
..#.##..#.#..#....##..##...#...
|
||||
.#......#..#...##....#...#.....
|
||||
.#.....#.##..........#..#......
|
||||
###.#..#.##..#..##...#..#...#..
|
||||
#.....###........#.#..##.#.....
|
||||
.....#.......##.....##.....#.##
|
||||
...##.#......####....##........
|
||||
..#..#..#....#.##.....##.####..
|
||||
...#..#....#.#..#.#..#.#.#..#..
|
||||
#..........#....#.#.#.#...#..#.
|
||||
...####.##...#..#.......#.#..##
|
||||
#........#..#..................
|
||||
.#..#....#.#.#..#..........#...
|
||||
###...#....####....#......#..#.
|
||||
#.........####..#..#...........
|
||||
.....##..#..##.##.##.#..#.....#
|
||||
.#..#.#.##..#..#.#.#.##.###....
|
||||
......##......#...#.##....#..#.
|
||||
.#.#....#..#......#..#...###...
|
||||
.##...#......##...###...#.#...#
|
||||
.......#.#....#............#..#
|
||||
.#..##.#.######...#...#......#.
|
2
2020/03/solution.txt
Normal file
2
2020/03/solution.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Part 1: 214
|
||||
Part 2: 8336352024
|
Loading…
x
Reference in New Issue
Block a user