Day03
This commit is contained in:
117
AdventOfCode2020/Day03.cs
Normal file
117
AdventOfCode2020/Day03.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
|
||||
--- Day 3: Toboggan Trajectory ---
|
||||
|
||||
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 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?
|
||||
|
||||
*/
|
||||
|
||||
namespace AdventOfCode2020
|
||||
{
|
||||
public class Day03 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
int treeCnt = FollowSlope(inputs, 3, 1);
|
||||
return treeCnt.ToString();
|
||||
}
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
int treeCnt1 = FollowSlope(inputs, 1, 1);
|
||||
int treeCnt2 = FollowSlope(inputs, 3, 1);
|
||||
int treeCnt3 = FollowSlope(inputs, 5, 1);
|
||||
int treeCnt4 = FollowSlope(inputs, 7, 1);
|
||||
int treeCnt5 = FollowSlope(inputs, 1, 2);
|
||||
long treeMult = treeCnt1 * treeCnt2 * treeCnt3 * treeCnt4 * treeCnt5;
|
||||
return treeMult.ToString();
|
||||
}
|
||||
|
||||
private static int FollowSlope(string[] inputs, int dx, int dy)
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int treeCnt = 0;
|
||||
x += dx;
|
||||
y += dy;
|
||||
while (y < inputs.Length)
|
||||
{
|
||||
string input = inputs[y];
|
||||
char c = input[x % input.Length];
|
||||
if (c == '#') { treeCnt++; }
|
||||
x += dx;
|
||||
y += dy;
|
||||
}
|
||||
return treeCnt;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user