adventofcode/2020/Day03.cs
2020-12-03 10:46:44 -05:00

64 lines
1.4 KiB
C#

using System;
using static System.Console;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Xunit;
namespace AdventOfCode {
public class Day03 {
static int CountTreeIntersections(string[] lines, int dx, int dy) {
int count = 0;
int x = 0;
int y = 0;
while (y < lines.Length - 1) {
x += dx;
y += dy;
string line = lines[y];
char tile = line[x % line.Length];
if (tile == '#') {
count++;
}
}
return count;
}
static int Part1() {
string[] input = File.ReadAllLines(Util.RootDir + "day03.txt");
return CountTreeIntersections(input, 3, 1);
}
static long Part2() {
string[] input = File.ReadAllLines(Util.RootDir + "day03.txt");
long result = CountTreeIntersections(input, 1, 1);
result *= CountTreeIntersections(input, 3, 1);
result *= CountTreeIntersections(input, 5, 1);
result *= CountTreeIntersections(input, 7, 1);
result *= CountTreeIntersections(input, 1, 2);
return result;
}
[Fact]
public static void Test() {
string[] example =
@"..##.......
#...#...#..
.#....#..#.
..#.#...#.#
.#...##..#.
..#.##.....
.#.#.#....#
.#........#
#.##...#...
#...##....#
.#..#...#.#".Split('\n');
Assert.Equal(7, CountTreeIntersections(example, 3, 1));
Assert.Equal(218, Part1());
Assert.Equal(3847183340, Part2());
}
}
}