public void Part1() { string[] input = File.ReadAllLines("Day09Input.txt"); Point2 bounds = new Point2(input[0].Length, input.Length); Grid2 <int> grid = new Grid2 <int>(bounds); foreach (Point2 point in Point2.Quadrant(bounds)) { grid[point] = input[point.Y][point.X] - '0'; } long result = Point2.Quadrant(bounds) .Where(point => grid.Adjacent(point).All(value => value > grid[point])) .Sum(point => grid[point] + 1); Assert.Equal(462, result); }
public void Part2() { string[] input = File.ReadAllLines("Day09Input.txt"); Point2 bounds = new Point2(input[0].Length, input.Length); Grid2 <int> grid = new Grid2 <int>(bounds); foreach (Point2 point in Point2.Quadrant(bounds)) { grid[point] = input[point.Y][point.X] - '0'; } long result = Point2.Quadrant(bounds) .Where(point => grid.Adjacent(point).All(value => value > grid[point])) .Select(point => SizeOfBasin(point, grid, new bool[bounds.X, bounds.Y])) .OrderByDescending(i => i) .Take(3) .Aggregate((x, y) => x * y); Assert.Equal(1397760, result); }