Day 3
This commit is contained in:
parent
0de88fa2ef
commit
dece0a85a1
3 changed files with 458 additions and 0 deletions
101
03-tobogganTrajectory/README.md
Normal file
101
03-tobogganTrajectory/README.md
Normal file
|
@ -0,0 +1,101 @@
|
|||
# Day 3: Toboggan Trajectory
|
||||
|
||||
<details><summary>Challenge description</summary>
|
||||
|
||||
## Part One
|
||||
|
||||
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?
|
||||
|
||||
Your puzzle answer was `292`.
|
||||
|
||||
## Part Two
|
||||
|
||||
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?
|
||||
|
||||
Your puzzle answer was `9354744432`.
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>Script output</summary>
|
||||
|
||||
```
|
||||
❯ python .\main.py
|
||||
Pair (3, 1): 292 trees (part one solution)
|
||||
Pair (1, 1): 81 trees
|
||||
Pair (5, 1): 89 trees
|
||||
Pair (7, 1): 101 trees
|
||||
Pair (1, 2): 44 trees
|
||||
Product of all: 9354744432 (part two solution)
|
||||
```
|
||||
|
||||
</details>
|
323
03-tobogganTrajectory/input.txt
Normal file
323
03-tobogganTrajectory/input.txt
Normal file
|
@ -0,0 +1,323 @@
|
|||
..#..#......###.#...#......#..#
|
||||
...#.....#...#...#..........#..
|
||||
....#.#...............#.#.#....
|
||||
.........#.......##............
|
||||
#.#....#.#####.##.#........#..#
|
||||
.....#...##.#..#.##...#.#..#...
|
||||
#.#..###.#........#....##...#.#
|
||||
..###.....#..###.....##........
|
||||
#.#.#...........#.....#.#....##
|
||||
...#.#.##.##.#.#......#...##.#.
|
||||
.....##.#..#....#..#...##...###
|
||||
...#.....#..#..#...#.#....##...
|
||||
.#...##.#.........#...#.#......
|
||||
....#...#.....#......#...#.....
|
||||
.#...#.....#....#......#...#...
|
||||
#...#......####..##...###......
|
||||
....#..#......##.##.....#..#...
|
||||
....#....#.......#..#...#....#.
|
||||
...##..#.##..#.#...#..##.......
|
||||
##.#..#.....#.##.#....#..##....
|
||||
#....#....#.....#..#.#.#.....#.
|
||||
##...#.###.....#....#..#.#.#...
|
||||
#..#.......#...#.#...#.#.....#.
|
||||
....#.#.......#.....###..#..#.#
|
||||
......####...#.#..#..#.#.#.#...
|
||||
#...##.....#...#.#.........#.#.
|
||||
......#...##.#..#.#........#...
|
||||
..#.#...........#..##...###.##.
|
||||
#......#.#......#.....#.....#.#
|
||||
.#...............###.#.###.....
|
||||
...#...........##..#...##..##.#
|
||||
#......#.##.#............#.##.#
|
||||
.#.#....#....###........#..#...
|
||||
...##.#.#..#.##.#..##..#.##..##
|
||||
.....#...#.#.#...#....#......#.
|
||||
..............#...##...........
|
||||
..............##........#..###.
|
||||
.#.##.......#.....##.#......#..
|
||||
..#......#..#.#####..#.#.......
|
||||
#.#..#...#.#..#....#..#.##..#..
|
||||
...##.......#.#............#...
|
||||
...#....#..#.##.###.......#.###
|
||||
..###..#....#..#.....##...#..#.
|
||||
..#.###.##......###....#....##.
|
||||
...#...##...###....##.....###.#
|
||||
.....#.....#.#.#.........#..###
|
||||
#.#......#.#..#.####..#........
|
||||
#....#.##.......##.............
|
||||
..##...........#....#.....##..#
|
||||
..#...#...........#....#...#...
|
||||
...#...#...#.....#..#....#....#
|
||||
#......##.........#.#...##...#.
|
||||
.##..#...#.....#....#.##.####.#
|
||||
#..##.##.#......#.............#
|
||||
.#.....#..##.###.#.#.#.........
|
||||
.###....###..#....#..#.#.#..##.
|
||||
....#........#..#....##..#.#.#.
|
||||
.....#..........#..........#...
|
||||
.#.##..#..#...#..#.##.#.##.....
|
||||
.#....#...#......#.#..##.##..#.
|
||||
.###.#...#.#.##....#.....#..##.
|
||||
......##.......#..#.......#.#.#
|
||||
.##.#.#.#......#.......#.......
|
||||
#..#...##......#.......#......#
|
||||
...#..#...##.#...#..##.........
|
||||
.....#..###...##...#..#.#...#.#
|
||||
..#.#.#....##..#.#.#.#...#.....
|
||||
.....#.#.#..#..#.#.#...#.......
|
||||
#.#.#...#.#.....#.#.#.##.###...
|
||||
.....#.#.....####..#...........
|
||||
..#.#.#...........##..#.#....#.
|
||||
.#..#......#..#...........###..
|
||||
..#...###.##......#..###...#..#
|
||||
#.#..#.....#..#.##.#..#.#.....#
|
||||
.....................#.#..#....
|
||||
...##..##...#.#..#..##.#....#..
|
||||
.#..#.#....#...#.#.##..........
|
||||
....##.....#..#..##.........##.
|
||||
..##...##........#.#....#...###
|
||||
.#...#............#.#.#.#......
|
||||
#...#........#..#..#...#.#.....
|
||||
..#..........#.......###.##....
|
||||
#...........###..#....##..#.##.
|
||||
##...#..#.##.....#...........#.
|
||||
.#..##.....#..#.#.....##.#..#.#
|
||||
..#..#.##....#.........#.#.#...
|
||||
#..#...#...#..#...........##...
|
||||
.....#.......#.#......#.#.#...#
|
||||
..#.#..#..#.#.#.......#.#...#..
|
||||
......#.....##.....#.....##.##.
|
||||
#.#..#......#......#.####.##...
|
||||
.####...#####.#....#.#..##.....
|
||||
............#....#....#....##..
|
||||
###.........#............#.#...
|
||||
...#...#....#.##..#...#......##
|
||||
...##.#.#.##.##.#.....#...#.#..
|
||||
...#.....#...#..##......#.#.##.
|
||||
.##.#......##................##
|
||||
......#.....#..##.............#
|
||||
#.#...##..#..#..#.##.....#..#..
|
||||
#......###.....#....##...##...#
|
||||
....#..#.....#.......####...##.
|
||||
#.#...#.#...#..........#..##..#
|
||||
....#..#....#................##
|
||||
.####..#........#..#.#...#.....
|
||||
##.###...#.##........#..##.....
|
||||
..###..##...#...#..#...##.....#
|
||||
......#..##....................
|
||||
.#...#......#.#.##..#........#.
|
||||
..#...#####.....##.....#...#...
|
||||
.#..#....#..#....##.#....#..##.
|
||||
.#.....##..###.#.....#.#.#.##..
|
||||
#..##.....##...#.....#..#.#....
|
||||
#.##......#.#......#..........#
|
||||
#####........#.............#...
|
||||
.#..#..##..#....#.....#..####..
|
||||
...#..##.##...####....#.##...##
|
||||
..........#....#...........##.#
|
||||
#...##...#...##....#.....#.....
|
||||
.......#..#.....#.#.#.#.#.....#
|
||||
...#..##..####..#..##.#.##....#
|
||||
#...#...#...........#.#.....#.#
|
||||
..#.....##...###.........#..##.
|
||||
.......##..#.......#.......##..
|
||||
#.#....#....#.###............#.
|
||||
...#......#.#.............#.#..
|
||||
......#..#....#....#....#..#...
|
||||
.....##..#...........##...#.##.
|
||||
..#....#.##.#......#...........
|
||||
#...#....#.#.#.#.#..#..........
|
||||
.#..#..........#..#.#.....#....
|
||||
.....##......##....#.#.....#.#.
|
||||
.....#..#..........#....#.....#
|
||||
....#..#..#.#...#.#..#..#..##.#
|
||||
.#..##.#..##...###.#..........#
|
||||
..###..#......#...##...#.#.....
|
||||
..#...#...#.....#.......#....#.
|
||||
#...##..#.##.#....##.....#.....
|
||||
..#.#.....#...#...#............
|
||||
.......#.#.#..#.....###.#...##.
|
||||
....##.......#####...##..##..#.
|
||||
#...#.##.....#.#...##.........#
|
||||
..#.##..........#..###.#....#..
|
||||
#......#.##...#...#.....###....
|
||||
................#.##...........
|
||||
##.###.#.#.#.##......##..#....#
|
||||
..#.#........##..#..##.........
|
||||
###....#..#....#..##....#.....#
|
||||
#......#..#...........#.#...##.
|
||||
...###.......#...#......##..#.#
|
||||
.......#...##.#.#...#.##......#
|
||||
......##..#...##.#.#...##....#.
|
||||
..#...#...#...#.#.....#..##..#.
|
||||
..##...#.....#.....#..##.......
|
||||
....#........#.#.##.......#.#..
|
||||
#...#..##..#..##..#...#......#.
|
||||
...#..#.#.#..#..#..####...#....
|
||||
#..#..#......#......#..#.######
|
||||
#..#..#..#........#..#.#....###
|
||||
#..##..#.#.##.....#..#......#.#
|
||||
##.......##.#..#.............#.
|
||||
..........#.#..#..#............
|
||||
....#.#.#.#...#......#......#..
|
||||
###.#.#.........#.......#...##.
|
||||
#.............####..#...#.##...
|
||||
....##.......#................#
|
||||
###...#..#......##....#.####.#.
|
||||
..##.##.#.#.#.#...#.......#...#
|
||||
.....#.##......#.......##..#.#.
|
||||
.#...#.##..#.......#.#....#.#.#
|
||||
##...##..#....#..#...#....#....
|
||||
..........#...##.#..##.......##
|
||||
#.#...#....#......#.#.......###
|
||||
......#...#.##....#....##.#.##.
|
||||
..#..#.......#.......#....##...
|
||||
##..##.......##............#.#.
|
||||
.#.#...#..#.#.###......#.......
|
||||
#...#..##....#...###..#.#.....#
|
||||
.#.....#........#..##.#.#.#....
|
||||
..#.##....#..#...........#...#.
|
||||
.....#.#...#.##..###...#...#...
|
||||
#....####.......#..#.#...#.....
|
||||
....#.....#....##..#.##.....###
|
||||
........#.#.....###....#.#.....
|
||||
...#.....#.##.....#......#.....
|
||||
.....#...####......###..#...##.
|
||||
#.#......#..........#..##.#..#.
|
||||
..##......###...#...#.......#..
|
||||
#...#.#...#.#.........#........
|
||||
....#..#.##.#.##.###..#.....#..
|
||||
.#.#.#......#.#........#.....#.
|
||||
.....#.#..#....#...#.....#.#.##
|
||||
##.............#..#.....#.#....
|
||||
#............#..#....##......##
|
||||
#....#......#......#....##..#..
|
||||
.#....#............#......##..#
|
||||
..#.#.#..#.#....##.#.......#.##
|
||||
#.##.....#...#......#...#......
|
||||
.......#...........#..#.##..#.#
|
||||
##.....##.#.....####..........#
|
||||
...#.......#.#.............#..#
|
||||
...##........##..#..#.#........
|
||||
.#.##...#.....##.#......#....#.
|
||||
.#................#.#...#..#...
|
||||
#....#.#.#......#.#.#.##....#..
|
||||
..#......#............#...#....
|
||||
###..#.##........#....##.#...#.
|
||||
.#..#..#......##...............
|
||||
....##.............#....##...##
|
||||
..#.#..#.#####....##.......###.
|
||||
......#...#..#.#....#.#..#...#.
|
||||
.........#..##.##...#....##..##
|
||||
.............#.##....###.#.....
|
||||
..#................#..#.#..#...
|
||||
...#........#......#..###......
|
||||
.#.#.#....#.........#...###.###
|
||||
.........#..#.#......##.....#..
|
||||
#...##..#.#.###..###...........
|
||||
...#.#.#..#......#..##.#.##....
|
||||
.....##.......#................
|
||||
.##....#.#.#.##.....#.##......#
|
||||
...#........#...##.#.##..##...#
|
||||
..#..........#.#......####..##.
|
||||
............#.#.#.#.....#......
|
||||
..##.####.#..#....#..#..##.....
|
||||
......#........#...#..#.#..###.
|
||||
#.#..............#..#...#..#...
|
||||
....#............#...#..#...##.
|
||||
..##....#...##.##.#..........##
|
||||
..#..#.........#..#.....#.#....
|
||||
#.....#.###...##...##...##.....
|
||||
#.#...#..#####.#...#..#.....#..
|
||||
..#.....###...#.........#.#...#
|
||||
....#.##.........#.#.....#.#.#.
|
||||
..........##...#....#.#.#.....#
|
||||
...#...........#.....###.......
|
||||
#....#..#...#.....#.......#....
|
||||
.#.#.....#..##..##..#........#.
|
||||
.#.#.....#....#...#.#.##.......
|
||||
....###...#...###.##....#......
|
||||
...#.#.##....#...##......#...#.
|
||||
#....#...##.....#.##.#.....#.##
|
||||
.#.#.....##.##.##..###...#.....
|
||||
.#.#......#..#..#........#.#..#
|
||||
........#...##........##...#...
|
||||
.#..#.#.#..#.....#....#...#.#..
|
||||
#......#...#.#...#..#.#..#.....
|
||||
.#......#.....#.........###.#..
|
||||
#..#..........##..###.......#..
|
||||
#..#..#....#......#......#.....
|
||||
......#.....##.........##....#.
|
||||
#..#.#...#...#.##.#..#..##.....
|
||||
....#.#....###..#.....#...##.#.
|
||||
..##.....##.#..#..##..#.#......
|
||||
.........#..#....###...#.#....#
|
||||
.........#...#...#...#......##.
|
||||
.......#..#.....#.#.#...#...#..
|
||||
............#.....###......#..#
|
||||
#....##..###.......#...##....##
|
||||
..#.##..#####..##.#...#......#.
|
||||
#.#..#...###.............#.#...
|
||||
##...#..#..#.#....#.#.......#..
|
||||
.....#....##.....###.##..#.....
|
||||
......##..##..#.#..####.#......
|
||||
..#...#.#....#...#.#.........#.
|
||||
##.....#.#....#..#..##........#
|
||||
...........#..#........##..#...
|
||||
..##.#...#.#.#..##..#..#..#..##
|
||||
..........#.###.....#..#.....#.
|
||||
......#............###..##.##..
|
||||
.#.......#..#...........#.###.#
|
||||
#...#..##............##.......#
|
||||
.###..#...#.#....#....#......#.
|
||||
..##.........##............#.#.
|
||||
.##.......##....#.#.#....#..#.#
|
||||
#.##........#.....#.##...#.#...
|
||||
#......#....#.#......##....#..#
|
||||
#.##..##..#...#.###......#.....
|
||||
..........#.#....###.#.....##..
|
||||
#..##...#.###..#.............#.
|
||||
.#.#......#.##.#...#....#.....#
|
||||
.##...#..##...#...........#.##.
|
||||
.##..#.#.#..#.....#.....###....
|
||||
.#...#.#.#..#..#....##...#..#..
|
||||
#.#.#....#.....#..#..##..#.#...
|
||||
......#..#...####..#.........#.
|
||||
.#.#..#......#...#..####.....#.
|
||||
...#.#...#...#....##..#.#.#.##.
|
||||
...#........##.............#.#.
|
||||
...#...#...#.......#..#.#.#..##
|
||||
.####.#...##......#.##.##.#.#..
|
||||
#..###...........#..#.#...#.#.#
|
||||
###...#.#..#...#.#...#.#..#.#.#
|
||||
#....#.....##...#.#...#..#.#...
|
||||
.#........##.##....##..#..#....
|
||||
.#.#.#..#........#...#..#.#.#.#
|
||||
#.##.....#.#...#....##...#..#.#
|
||||
..#.......##.#.###............#
|
||||
##....###..##.........##..#.#..
|
||||
...##...#...#..###.#.....##..#.
|
||||
###.................#.#..#.....
|
||||
....#......#.....#..###......##
|
||||
.......#...##..#...............
|
||||
.#.....#..#.....#...##...#...##
|
||||
.....##....#.#..#.##.....#...#.
|
||||
#..####.#....#..#.....#....#..#
|
||||
..#..##.#.##......#..#.#....#..
|
||||
..#.#.#.#.....#...#...#..#.....
|
||||
.#........#.#...#.#..#...##....
|
||||
.#...#.#...#..#.#...###...#.#..
|
||||
#.....#...##..#.....#...#.#..#.
|
||||
...#....#................#.#...
|
||||
......##.#.#..........#...#....
|
||||
.##..#.#.#...#..#...####.#.....
|
||||
#......#....#..#.......#.......
|
||||
.#........#.#.#....###.#..##...
|
||||
....##......#.....##...#...#...
|
||||
..#..#.#.#...#..#.####.##......
|
||||
...#........#.#.##.#..#.##.#...
|
||||
.#..##...#...#...##.......##.#.
|
||||
#...#.#......#.................
|
||||
..#..#.....#....##...#..###....
|
||||
.#...#.........#.#.##.#........
|
34
03-tobogganTrajectory/main.py
Normal file
34
03-tobogganTrajectory/main.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
input_list = open("input.txt").read().strip().split("\n")
|
||||
|
||||
forest = [[char for char in line] for line in input_list]
|
||||
|
||||
tree_char = "#"
|
||||
|
||||
def find_collisions(forest:list, x_offset:int, y_offset:int) -> int:
|
||||
encountered_trees = 0
|
||||
x_pointer = 0
|
||||
|
||||
for row in forest[::y_offset]:
|
||||
target_index = x_pointer % len(row)
|
||||
if row[target_index] == tree_char:
|
||||
encountered_trees += 1
|
||||
x_pointer += x_offset
|
||||
|
||||
return encountered_trees
|
||||
|
||||
offset_pairs = [
|
||||
(3, 1),
|
||||
(1, 1),
|
||||
(5, 1),
|
||||
(7, 1),
|
||||
(1, 2)
|
||||
]
|
||||
|
||||
tree_product = 1
|
||||
|
||||
for i, pair in enumerate(offset_pairs):
|
||||
encountered_trees = find_collisions(forest, *pair)
|
||||
tree_product *= encountered_trees
|
||||
print(f"Pair {pair}: {encountered_trees} trees", ("(part one solution)" if i == 0 else ""))
|
||||
|
||||
print(f"Product of all: {tree_product} (part two solution)")
|
Loading…
Add table
Add a link
Reference in a new issue