示例#1
0
        public static void Problem1()
        {
            var grid = new List <FuelCell>();

            for (int x = 1; x <= 300; x++)
            {
                for (int y = 1; y <= 300; y++)
                {
                    var fuelCell = new FuelCell()
                    {
                        x = x,
                        y = y,
                        GridSerialNumber = input
                    };
                    fuelCell.SetPowerLevel();
                    grid.Add(fuelCell);
                    grid.Where(g => g.x <= x && g.x >= x - 2 && g.y <= y && g.y >= y - 2)
                    .ToList()
                    .ForEach(fc => fc.Square += fuelCell.PowerLevel);
                }
            }
            var maxSquareValue = grid.Max(g => g.Square);
            var maxSquare      = grid.FirstOrDefault(g => g.Square == maxSquareValue);

            Console.WriteLine($"<{maxSquare.x},{maxSquare.y}>");
        }
示例#2
0
        public static void Problem2()
        {
            var grid = new List <FuelCell>();

            for (int x = 1; x <= 300; x++)
            {
                for (int y = 1; y <= 300; y++)
                {
                    var fuelCell = new FuelCell()
                    {
                        x = x,
                        y = y,
                        GridSerialNumber = input
                    };
                    fuelCell.SetPowerLevel();
                    grid.Add(fuelCell);
                    Console.Write('.');
                }
                Console.WriteLine();
            }
            Console.WriteLine("Grid Complete");

            Square maxSquare = new Square();

            for (int x = 1; x <= 298; x++)
            {
                for (int y = 1; y <= 298; y++)
                {
                    var maxSize = (x > y) ? 301 - x : 301 - y;

                    for (int size = 3; size <= maxSize; size++)
                    {
                        var powerLevel = grid.Where(g => (g.x >= x && g.x < x + size) && (g.y >= y && g.y < y + size)).Select(fc => fc.PowerLevel).Sum();
                        if (powerLevel > maxSquare.PowerLevel)
                        {
                            maxSquare.x          = x;
                            maxSquare.y          = y;
                            maxSquare.Size       = size;
                            maxSquare.PowerLevel = powerLevel;
                        }
                    }
                    Console.Write('.');
                }
                Console.WriteLine();
            }
            Console.WriteLine($"<{maxSquare.x},{maxSquare.y},{maxSquare.Size}");
        }