Day03
This commit is contained in:
53
AdventOfCode2020.Tests/Day03_Tests.cs
Normal file
53
AdventOfCode2020.Tests/Day03_Tests.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using AdventOfCode2020;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace AdventOfCode2020.Tests
|
||||
{
|
||||
[TestClass()]
|
||||
public class Day03_Tests
|
||||
{
|
||||
[TestMethod()]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
IDay day03 = new Day03();
|
||||
|
||||
string result = day03.ResolvePart1(new string[] {
|
||||
"..##.......",
|
||||
"#...#...#..",
|
||||
".#....#..#.",
|
||||
"..#.#...#.#",
|
||||
".#...##..#.",
|
||||
"..#.##.....",
|
||||
".#.#.#....#",
|
||||
".#........#",
|
||||
"#.##...#...",
|
||||
"#...##....#",
|
||||
".#..#...#.#",
|
||||
});
|
||||
|
||||
Assert.AreEqual("7", result);
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
IDay day03 = new Day03();
|
||||
|
||||
string result = day03.ResolvePart2(new string[] {
|
||||
"..##.......",
|
||||
"#...#...#..",
|
||||
".#....#..#.",
|
||||
"..#.#...#.#",
|
||||
".#...##..#.",
|
||||
"..#.##.....",
|
||||
".#.#.#....#",
|
||||
".#........#",
|
||||
"#.##...#...",
|
||||
"#...##....#",
|
||||
".#..#...#.#",
|
||||
});
|
||||
|
||||
Assert.AreEqual("336", result);
|
||||
}
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -7,13 +7,14 @@ namespace AdventOfCode2020
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
int currentDayNumber = 2;
|
||||
int currentDayNumber = 3;
|
||||
IDay currentDay = null;
|
||||
|
||||
switch (currentDayNumber)
|
||||
{
|
||||
case 1: currentDay = new Day01(); break;
|
||||
case 2: currentDay = new Day02(); break;
|
||||
case 3: currentDay = new Day03(); break;
|
||||
}
|
||||
|
||||
Console.WriteLine(string.Format("Day {0:00}", currentDayNumber));
|
||||
|
||||
323
AdventOfCode2020/inputs/Day03.txt
Normal file
323
AdventOfCode2020/inputs/Day03.txt
Normal file
@@ -0,0 +1,323 @@
|
||||
....#..#.................#..#..
|
||||
#..#.#.#..#.###.#..#...#..#....
|
||||
.#....#......#.#.#..##...#...#.
|
||||
.............#.#..#........#.#.
|
||||
............##.#..#...##.###...
|
||||
.....#..#......#......##.......
|
||||
........##........#...........#
|
||||
..................#..#.........
|
||||
......#..#...#..#......###..#..
|
||||
.#....#...........#.....#.##...
|
||||
..#..#.#........###..#....#...#
|
||||
..#..##..#..#....#..#......#...
|
||||
......#....................#...
|
||||
.........#..#..................
|
||||
..#.#.....#......#.#....#...#..
|
||||
..#..........##.......##.##....
|
||||
#.......#.##.....#...#....#....
|
||||
####..............###.#....#...
|
||||
....#........#.#..###..#...#..#
|
||||
#.#......#...#.##....#.....#...
|
||||
.......#......#.....#........#.
|
||||
.##.........#...#.........#....
|
||||
............#....#.#........#..
|
||||
#..##..#....#...#.#....#....#..
|
||||
.....#....##..#................
|
||||
.#...........#....#..#.....#...
|
||||
......#.#...#..###.............
|
||||
#...#...........#..###.#..#..#.
|
||||
...................#..#....#..#
|
||||
....#...#...#.#.....#....#.##..
|
||||
.......#.......#.#.........#...
|
||||
#..#.......#...#..#.#......#...
|
||||
..##...........#....#..#.......
|
||||
.#...............#...##........
|
||||
.....#..........#............#.
|
||||
..#.......#.#.#...........#..#.
|
||||
........#..#.#.#........#.#.##.
|
||||
.###..............#.#..........
|
||||
.#....###.....#......#....#....
|
||||
............#.#......#..#....#.
|
||||
.#.#.............#........##...
|
||||
.....#..###....##.....#....#..#
|
||||
.##....#...#.#.........#......#
|
||||
....##.......#...............##
|
||||
..........##.##.......#........
|
||||
......#....##.........##.#.#.#.
|
||||
..............#....#..#......#.
|
||||
......##.........#.........#...
|
||||
.#...##...##....##..#..#.....#.
|
||||
.#......#.###.#....#...#......#
|
||||
.##.......................#..#.
|
||||
....#......#.##..........#.###.
|
||||
.#.....##..........#.#.........
|
||||
....#.#.........#...#..........
|
||||
.#..##.#....##.......#.......#.
|
||||
.........#.......#............#
|
||||
###..........#.....##.#....#...
|
||||
.......###.#....#........#...##
|
||||
..#..#....#.......#.#..........
|
||||
.#..#..........#......#...#....
|
||||
.....###.#..#.....#...#..#.....
|
||||
........#.#.#..........#.#..#..
|
||||
........#...##.................
|
||||
...#.............#.#..#......##
|
||||
......#......##......#...#.#..#
|
||||
.#..#...##..........#...##.....
|
||||
..#.#....####..#...#....##....#
|
||||
.#..##.........#..##......#....
|
||||
#....#.#.........#.............
|
||||
....###..............#....#....
|
||||
....#..#..#...###..#.#..#.#....
|
||||
....#.....#...........###..#...
|
||||
....#.#.....#...#.....#.......#
|
||||
..#.......#..................#.
|
||||
#...................##.........
|
||||
....#.#.#.#.#.....#.....#......
|
||||
...............##..#..##.#...##
|
||||
..#.....#.....##.........#..#..
|
||||
...#...#.....#..##..##....#..##
|
||||
..#.................#....#...#.
|
||||
#....##...............##..#....
|
||||
..#.....#.....##.........##...#
|
||||
..#.###..............#...#.....
|
||||
.......................#.......
|
||||
#...#..#.....##...#...#........
|
||||
..........#......#.###....#...#
|
||||
..#.....#.##.#..#.#.......#....
|
||||
#.##...#............#..........
|
||||
#........#.#.#..#...#..#.....##
|
||||
#............#.#...............
|
||||
.#..#.......#.#.....#.#......##
|
||||
.#.#....#........#..##.........
|
||||
..#....#......#.#...##...#.....
|
||||
##.....#......................#
|
||||
...#.......#..##.....#........#
|
||||
......##..#...............##...
|
||||
.....#...#......##....#.#......
|
||||
.#...#....#.#.#........#...#.#.
|
||||
.......#...#...##...#..........
|
||||
.##..#..##........##....###.#..
|
||||
..##........#........##........
|
||||
............#....#......#......
|
||||
.......#...........#.......#...
|
||||
#.#......##.#...#....#.#.....#.
|
||||
..#.#.#......##........#....#..
|
||||
#.#.####.#..#..........#.......
|
||||
......................#.#......
|
||||
...#.......#.....#......#..#.#.
|
||||
...#....#....##..........#..##.
|
||||
......#......#....#.........#..
|
||||
.........#....#...#.#.........#
|
||||
.....#...##.#.#.#......#.....#.
|
||||
........#...#......#.#....#....
|
||||
.....#.........#.............#.
|
||||
.#...........#.#....##.......#.
|
||||
.#..#......#....#....#....#....
|
||||
#.......#.#.#.#..#.......#.....
|
||||
..#...#...#......#.............
|
||||
.....#.......#..#.........##..#
|
||||
#..##...........#.#.........#..
|
||||
#..#..........#....#......#...#
|
||||
#...#............#....##..#.##.
|
||||
....#.#..#....#.........##..##.
|
||||
.........#..........#.......##.
|
||||
#...#........................#.
|
||||
....#....#..#...........##...#.
|
||||
.....###.###.#....#.....#.....#
|
||||
.#..###..#...##..........#.....
|
||||
#..#.....#...#........#........
|
||||
.#..##..#......#.....#......##.
|
||||
#.....##........#.#..#....#.#..
|
||||
.#....#...#..#...............#.
|
||||
..........#.#........#.....#...
|
||||
..#.#.....#....#........#.###..
|
||||
...#..#...#.##.....#..........#
|
||||
..#......##....................
|
||||
.....#...#....#..#....#.......#
|
||||
......#............#....#...#..
|
||||
.#..#....#.....#........##.....
|
||||
...#..#.......#...............#
|
||||
##.#..#...............#.#..##..
|
||||
..#.........#.####.####........
|
||||
.........#...#.#........#..###.
|
||||
..###.....#.........##........#
|
||||
#..##.....##.#..........#....##
|
||||
.#..#....###..#.....##..#......
|
||||
#...#..#........#.............#
|
||||
#.#....#........#.........#.###
|
||||
.....#....#.###.......#........
|
||||
...........#............#..#...
|
||||
..........#.#..##......###....#
|
||||
..##....#...........#....#....#
|
||||
..#...##.#.......#.##.......#..
|
||||
.......#......#..........#....#
|
||||
.........#..#..............####
|
||||
#.#...#...#......#...#..#...#.#
|
||||
.#.#...#.....#.......#.#..##.#.
|
||||
......##..##...#...............
|
||||
....#....#...##.......#.#......
|
||||
.............................#.
|
||||
..##...#.......#......#.......#
|
||||
.#.##.##....#......##.......#..
|
||||
.......##..#....#.##.#.#.......
|
||||
....#.............#......#..#..
|
||||
...#.........#....#..#.....#.#.
|
||||
......#......#......#.........#
|
||||
........#..#.#.....#.....#...#.
|
||||
.#.......#.........#...#.......
|
||||
#.#.##.....#...#...............
|
||||
..#.......##.....#............#
|
||||
.................##.#..#.....##
|
||||
........#.###....#.......##.#..
|
||||
....#.#..#..#.......#.#....#..#
|
||||
.#..#..#..#...##....#..#.....#.
|
||||
...#..#...#..........#........#
|
||||
...........##....#...##.#...###
|
||||
.##..#.......##.....##....#....
|
||||
...#.#..#..#..##..#.....##.....
|
||||
.#.....#..........#...#........
|
||||
.....#..#.#..#.................
|
||||
..#.......#..#.....##.......#..
|
||||
............##.##.....#...#....
|
||||
#......#......................#
|
||||
...#..........#...#...#..#.....
|
||||
......##..............##.##....
|
||||
................##......#.###..
|
||||
.###...#..........#...........#
|
||||
#....#...#.........##......#...
|
||||
.............#...............#.
|
||||
.###.....#......#...#.......#..
|
||||
......##..#.#.#.....#........#.
|
||||
..#.#..........#.#......##.....
|
||||
.#.#...#.#.....#.#..#.....#....
|
||||
.......#....#.#....##..........
|
||||
#.........#........####.#......
|
||||
...#..#.....#..............#.#.
|
||||
...#..........................#
|
||||
..##....#..#..........#....#...
|
||||
..##.##.#.#.#......#..#........
|
||||
...#..#.#.#..#........#.......#
|
||||
.....#.....#..#...#........##..
|
||||
..#..#...........#...##..##..#.
|
||||
#.....#.....#..#..##........#..
|
||||
...#..............#......#..#..
|
||||
...#.#...........###...#.#.....
|
||||
..........................#.#..
|
||||
....#........#..#..........#.#.
|
||||
.#..#..........#.#..........#..
|
||||
....#.........#......#.#....#..
|
||||
..#........#.................#.
|
||||
...#......#............#.......
|
||||
...#.#...#..##....#........#...
|
||||
......##.#....#.#......#.......
|
||||
........#..........#........#..
|
||||
###..#.....#...#......#...###..
|
||||
..##...#..###............#...#.
|
||||
#.......#..#..#............##..
|
||||
#........####......#...........
|
||||
#..#..#...........#.......####.
|
||||
......#..##................#...
|
||||
.....#..##......#.#...#..#.....
|
||||
......#.....##.....#.###.......
|
||||
.#.....#.........#.......#.#..#
|
||||
.##...........###...#....#...#.
|
||||
.#....#..#....#.##...#.........
|
||||
.................##............
|
||||
......#......#.............#...
|
||||
.........##.#........#....#...#
|
||||
..##....#.......#....##.#......
|
||||
.......#.#.#.....##..#.#.......
|
||||
......#.#.#.#......#...#.......
|
||||
....##...#.....#..#......#.....
|
||||
..............#......#.##......
|
||||
#.##..###........#.##........##
|
||||
#..#.........#.#......#.#......
|
||||
.#..###.......#................
|
||||
..............#...#..##.#.#....
|
||||
.....#..#........#...##.#...#..
|
||||
.#...##.....#........#..###.#..
|
||||
....#.....#...#........#.......
|
||||
....#.##.....#....#............
|
||||
#.#..#....#....#............#..
|
||||
....#....#...#.#...#...######..
|
||||
.##.........#..#.....#.....#...
|
||||
..##...............#...........
|
||||
........##...#........#..#.....
|
||||
...#................###.##..##.
|
||||
.#..#..#..#...#.............#..
|
||||
#.....#..##.#....#.#......#..#.
|
||||
...#...#...#.....#...#...#.....
|
||||
..##.###..#..#...##...........#
|
||||
.#.......##........#.#..#..#...
|
||||
..#.......#.###................
|
||||
..#...#........##...#..#......#
|
||||
...#...#............#.#......#.
|
||||
..#...#.....#.#.#.#........#...
|
||||
.#........#......##....##...#..
|
||||
...#..##....#.........#....#.#.
|
||||
....#........##...............#
|
||||
.###.....#...#..#.#.....#.....#
|
||||
..#...#..................#...##
|
||||
#..#....###....................
|
||||
...........#...#...........#...
|
||||
........#.....#................
|
||||
#........#...........#........#
|
||||
........#..#....#...#....#..#..
|
||||
#.#....#......#.......##.......
|
||||
.#.....##..#...#......#.#.#....
|
||||
..#..##.#.....#...#.#......#.#.
|
||||
.##....#...#....#......##......
|
||||
.#..#..#...##.##..#.#..#.......
|
||||
.....#.#...........#.#........#
|
||||
.#...#....#..................#.
|
||||
...........#...#.........#.....
|
||||
.#..###........##......#..#...#
|
||||
.............###..##.....#.#..#
|
||||
.#..#..........#......#........
|
||||
..#........#.#...#.......##.#..
|
||||
....#...........##......#...#..
|
||||
...........#....#.....#...#.#..
|
||||
...#...........#.....#.#..#..#.
|
||||
......#.......#................
|
||||
##.......#.....#............#.#
|
||||
.##.....#.#.#..................
|
||||
..........#.....##..#.#.#......
|
||||
.###.#.....##...#..#.#........#
|
||||
#....#........##..#..#.........
|
||||
.............#.........##..#...
|
||||
......##.#...#.#.#....##.......
|
||||
.#.......###.#.###..##........#
|
||||
..##.....#..#.............#..#.
|
||||
.#...#......#.#.............#..
|
||||
..##.#...#.........##....#...#.
|
||||
...........#......#.#..........
|
||||
.....#..#...##.....#....#..#...
|
||||
#...................##...#.....
|
||||
..#.................#.....#....
|
||||
..............#..#.#...###.....
|
||||
.......#........#...#.....#....
|
||||
.............#.......#...##..#.
|
||||
.#...#..#...#..#.....#......#.#
|
||||
....#..#..#...#...........#....
|
||||
.....#..#......##.##....#..#...
|
||||
...#......#..#.#...#.....#.....
|
||||
.......##..#.#.......#..#....##
|
||||
#.#..#....##.##.#.#..........#.
|
||||
..........#..........#....##.#.
|
||||
....#.................#...#..#.
|
||||
...#.....#..#...#.#...#..#.....
|
||||
....#.#..###....#.............#
|
||||
#....#..#.#..........#..#..#...
|
||||
...#..#......#...#...#...#...#.
|
||||
##....#.......#..........#.....
|
||||
#......#.........#...#.........
|
||||
##...##.#....#....#..#..#.#....
|
||||
....#..#.....#.##.#.......#.#..
|
||||
..##....##....#...#..####...#.#
|
||||
..##..........#.............#..
|
||||
..#......#..............#......
|
||||
...#......#..#.#...#.......#...
|
||||
.#............#....#...##.##..#
|
||||
..##..........#...........#..#.
|
||||
..#..##..#....#..#.#..#..#..#..
|
||||
Reference in New Issue
Block a user