64 lines
1.4 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|