From 8e62c933de7d1a0f8589f6b9cbc06d2639dc8af8 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Fri, 4 Dec 2020 02:05:03 +0100 Subject: [PATCH] Day03 --- AdventOfCode2020.Tests/Day03_Tests.cs | 53 +++++ AdventOfCode2020/Day03.cs | 117 ++++++++++ AdventOfCode2020/Program.cs | 3 +- AdventOfCode2020/inputs/Day03.txt | 323 ++++++++++++++++++++++++++ 4 files changed, 495 insertions(+), 1 deletion(-) create mode 100644 AdventOfCode2020.Tests/Day03_Tests.cs create mode 100644 AdventOfCode2020/Day03.cs create mode 100644 AdventOfCode2020/inputs/Day03.txt diff --git a/AdventOfCode2020.Tests/Day03_Tests.cs b/AdventOfCode2020.Tests/Day03_Tests.cs new file mode 100644 index 0000000..3d35e38 --- /dev/null +++ b/AdventOfCode2020.Tests/Day03_Tests.cs @@ -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); + } + } +} \ No newline at end of file diff --git a/AdventOfCode2020/Day03.cs b/AdventOfCode2020/Day03.cs new file mode 100644 index 0000000..9a46e0e --- /dev/null +++ b/AdventOfCode2020/Day03.cs @@ -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; + } + + } +} diff --git a/AdventOfCode2020/Program.cs b/AdventOfCode2020/Program.cs index 859f101..a4c99b4 100644 --- a/AdventOfCode2020/Program.cs +++ b/AdventOfCode2020/Program.cs @@ -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)); diff --git a/AdventOfCode2020/inputs/Day03.txt b/AdventOfCode2020/inputs/Day03.txt new file mode 100644 index 0000000..4e2bf22 --- /dev/null +++ b/AdventOfCode2020/inputs/Day03.txt @@ -0,0 +1,323 @@ +....#..#.................#..#.. +#..#.#.#..#.###.#..#...#..#.... +.#....#......#.#.#..##...#...#. +.............#.#..#........#.#. +............##.#..#...##.###... +.....#..#......#......##....... +........##........#...........# +..................#..#......... +......#..#...#..#......###..#.. +.#....#...........#.....#.##... +..#..#.#........###..#....#...# +..#..##..#..#....#..#......#... +......#....................#... +.........#..#.................. +..#.#.....#......#.#....#...#.. +..#..........##.......##.##.... +#.......#.##.....#...#....#.... +####..............###.#....#... +....#........#.#..###..#...#..# +#.#......#...#.##....#.....#... +.......#......#.....#........#. +.##.........#...#.........#.... +............#....#.#........#.. +#..##..#....#...#.#....#....#.. +.....#....##..#................ +.#...........#....#..#.....#... +......#.#...#..###............. +#...#...........#..###.#..#..#. +...................#..#....#..# +....#...#...#.#.....#....#.##.. +.......#.......#.#.........#... +#..#.......#...#..#.#......#... +..##...........#....#..#....... +.#...............#...##........ +.....#..........#............#. +..#.......#.#.#...........#..#. +........#..#.#.#........#.#.##. +.###..............#.#.......... +.#....###.....#......#....#.... +............#.#......#..#....#. +.#.#.............#........##... +.....#..###....##.....#....#..# +.##....#...#.#.........#......# +....##.......#...............## +..........##.##.......#........ +......#....##.........##.#.#.#. +..............#....#..#......#. +......##.........#.........#... +.#...##...##....##..#..#.....#. +.#......#.###.#....#...#......# +.##.......................#..#. +....#......#.##..........#.###. +.#.....##..........#.#......... +....#.#.........#...#.......... +.#..##.#....##.......#.......#. +.........#.......#............# +###..........#.....##.#....#... +.......###.#....#........#...## +..#..#....#.......#.#.......... +.#..#..........#......#...#.... +.....###.#..#.....#...#..#..... +........#.#.#..........#.#..#.. +........#...##................. +...#.............#.#..#......## +......#......##......#...#.#..# +.#..#...##..........#...##..... +..#.#....####..#...#....##....# +.#..##.........#..##......#.... +#....#.#.........#............. +....###..............#....#.... +....#..#..#...###..#.#..#.#.... +....#.....#...........###..#... +....#.#.....#...#.....#.......# +..#.......#..................#. +#...................##......... +....#.#.#.#.#.....#.....#...... +...............##..#..##.#...## +..#.....#.....##.........#..#.. +...#...#.....#..##..##....#..## +..#.................#....#...#. +#....##...............##..#.... +..#.....#.....##.........##...# +..#.###..............#...#..... +.......................#....... +#...#..#.....##...#...#........ +..........#......#.###....#...# +..#.....#.##.#..#.#.......#.... +#.##...#............#.......... +#........#.#.#..#...#..#.....## +#............#.#............... +.#..#.......#.#.....#.#......## +.#.#....#........#..##......... +..#....#......#.#...##...#..... +##.....#......................# +...#.......#..##.....#........# +......##..#...............##... +.....#...#......##....#.#...... +.#...#....#.#.#........#...#.#. +.......#...#...##...#.......... +.##..#..##........##....###.#.. +..##........#........##........ +............#....#......#...... +.......#...........#.......#... +#.#......##.#...#....#.#.....#. +..#.#.#......##........#....#.. +#.#.####.#..#..........#....... +......................#.#...... +...#.......#.....#......#..#.#. +...#....#....##..........#..##. +......#......#....#.........#.. +.........#....#...#.#.........# +.....#...##.#.#.#......#.....#. +........#...#......#.#....#.... +.....#.........#.............#. +.#...........#.#....##.......#. +.#..#......#....#....#....#.... +#.......#.#.#.#..#.......#..... +..#...#...#......#............. +.....#.......#..#.........##..# +#..##...........#.#.........#.. +#..#..........#....#......#...# +#...#............#....##..#.##. +....#.#..#....#.........##..##. +.........#..........#.......##. +#...#........................#. +....#....#..#...........##...#. +.....###.###.#....#.....#.....# +.#..###..#...##..........#..... +#..#.....#...#........#........ +.#..##..#......#.....#......##. +#.....##........#.#..#....#.#.. +.#....#...#..#...............#. +..........#.#........#.....#... +..#.#.....#....#........#.###.. +...#..#...#.##.....#..........# +..#......##.................... +.....#...#....#..#....#.......# +......#............#....#...#.. +.#..#....#.....#........##..... +...#..#.......#...............# +##.#..#...............#.#..##.. +..#.........#.####.####........ +.........#...#.#........#..###. +..###.....#.........##........# +#..##.....##.#..........#....## +.#..#....###..#.....##..#...... +#...#..#........#.............# +#.#....#........#.........#.### +.....#....#.###.......#........ +...........#............#..#... +..........#.#..##......###....# +..##....#...........#....#....# +..#...##.#.......#.##.......#.. +.......#......#..........#....# +.........#..#..............#### +#.#...#...#......#...#..#...#.# +.#.#...#.....#.......#.#..##.#. +......##..##...#............... +....#....#...##.......#.#...... +.............................#. +..##...#.......#......#.......# +.#.##.##....#......##.......#.. +.......##..#....#.##.#.#....... +....#.............#......#..#.. +...#.........#....#..#.....#.#. +......#......#......#.........# +........#..#.#.....#.....#...#. +.#.......#.........#...#....... +#.#.##.....#...#............... +..#.......##.....#............# +.................##.#..#.....## +........#.###....#.......##.#.. +....#.#..#..#.......#.#....#..# +.#..#..#..#...##....#..#.....#. +...#..#...#..........#........# +...........##....#...##.#...### +.##..#.......##.....##....#.... +...#.#..#..#..##..#.....##..... +.#.....#..........#...#........ +.....#..#.#..#................. +..#.......#..#.....##.......#.. +............##.##.....#...#.... +#......#......................# +...#..........#...#...#..#..... +......##..............##.##.... +................##......#.###.. +.###...#..........#...........# +#....#...#.........##......#... +.............#...............#. +.###.....#......#...#.......#.. +......##..#.#.#.....#........#. +..#.#..........#.#......##..... +.#.#...#.#.....#.#..#.....#.... +.......#....#.#....##.......... +#.........#........####.#...... +...#..#.....#..............#.#. +...#..........................# +..##....#..#..........#....#... +..##.##.#.#.#......#..#........ +...#..#.#.#..#........#.......# +.....#.....#..#...#........##.. +..#..#...........#...##..##..#. +#.....#.....#..#..##........#.. +...#..............#......#..#.. +...#.#...........###...#.#..... +..........................#.#.. +....#........#..#..........#.#. +.#..#..........#.#..........#.. +....#.........#......#.#....#.. +..#........#.................#. +...#......#............#....... +...#.#...#..##....#........#... +......##.#....#.#......#....... +........#..........#........#.. +###..#.....#...#......#...###.. +..##...#..###............#...#. +#.......#..#..#............##.. +#........####......#........... +#..#..#...........#.......####. +......#..##................#... +.....#..##......#.#...#..#..... +......#.....##.....#.###....... +.#.....#.........#.......#.#..# +.##...........###...#....#...#. +.#....#..#....#.##...#......... +.................##............ +......#......#.............#... +.........##.#........#....#...# +..##....#.......#....##.#...... +.......#.#.#.....##..#.#....... +......#.#.#.#......#...#....... +....##...#.....#..#......#..... +..............#......#.##...... +#.##..###........#.##........## +#..#.........#.#......#.#...... +.#..###.......#................ +..............#...#..##.#.#.... +.....#..#........#...##.#...#.. +.#...##.....#........#..###.#.. +....#.....#...#........#....... +....#.##.....#....#............ +#.#..#....#....#............#.. +....#....#...#.#...#...######.. +.##.........#..#.....#.....#... +..##...............#........... +........##...#........#..#..... +...#................###.##..##. +.#..#..#..#...#.............#.. +#.....#..##.#....#.#......#..#. +...#...#...#.....#...#...#..... +..##.###..#..#...##...........# +.#.......##........#.#..#..#... +..#.......#.###................ +..#...#........##...#..#......# +...#...#............#.#......#. +..#...#.....#.#.#.#........#... +.#........#......##....##...#.. +...#..##....#.........#....#.#. +....#........##...............# +.###.....#...#..#.#.....#.....# +..#...#..................#...## +#..#....###.................... +...........#...#...........#... +........#.....#................ +#........#...........#........# +........#..#....#...#....#..#.. +#.#....#......#.......##....... +.#.....##..#...#......#.#.#.... +..#..##.#.....#...#.#......#.#. +.##....#...#....#......##...... +.#..#..#...##.##..#.#..#....... +.....#.#...........#.#........# +.#...#....#..................#. +...........#...#.........#..... +.#..###........##......#..#...# +.............###..##.....#.#..# +.#..#..........#......#........ +..#........#.#...#.......##.#.. +....#...........##......#...#.. +...........#....#.....#...#.#.. +...#...........#.....#.#..#..#. +......#.......#................ +##.......#.....#............#.# +.##.....#.#.#.................. +..........#.....##..#.#.#...... +.###.#.....##...#..#.#........# +#....#........##..#..#......... +.............#.........##..#... +......##.#...#.#.#....##....... +.#.......###.#.###..##........# +..##.....#..#.............#..#. +.#...#......#.#.............#.. +..##.#...#.........##....#...#. +...........#......#.#.......... +.....#..#...##.....#....#..#... +#...................##...#..... +..#.................#.....#.... +..............#..#.#...###..... +.......#........#...#.....#.... +.............#.......#...##..#. +.#...#..#...#..#.....#......#.# +....#..#..#...#...........#.... +.....#..#......##.##....#..#... +...#......#..#.#...#.....#..... +.......##..#.#.......#..#....## +#.#..#....##.##.#.#..........#. +..........#..........#....##.#. +....#.................#...#..#. +...#.....#..#...#.#...#..#..... +....#.#..###....#.............# +#....#..#.#..........#..#..#... +...#..#......#...#...#...#...#. +##....#.......#..........#..... +#......#.........#...#......... +##...##.#....#....#..#..#.#.... +....#..#.....#.##.#.......#.#.. +..##....##....#...#..####...#.# +..##..........#.............#.. +..#......#..............#...... +...#......#..#.#...#.......#... +.#............#....#...##.##..# +..##..........#...........#..#. +..#..##..#....#..#.#..#..#..#.. \ No newline at end of file