Example #1
0
        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);
        }
Example #2
0
        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);
        }