コード例 #1
0
            public IPocketDimension CalculateNextCycle()
            {
                var dimension = new PocketDimension3(SizeX + 2, SizeY + 2, SizeZ + 2);

                for (var z = 0; z < dimension.SizeZ; z++)
                {
                    for (var y = 0; y < dimension.SizeY; y++)
                    {
                        for (var x = 0; x < dimension.SizeX; x++)
                        {
                            var numActive = GetNumActiveNeightbours(x - 1, y - 1, z - 1);
                            var cube      = GetSafeValue(x - 1, y - 1, z - 1);

                            if (cube == CubeType.Active)
                            {
                                cube = numActive == 2 || numActive == 3 ? CubeType.Active : CubeType.Inactive;
                            }
                            else
                            {
                                cube = numActive == 3 ? CubeType.Active : CubeType.Inactive;
                            }
                            dimension.Cubes[x, y, z] = cube;
                        }
                    }
                }

                return(dimension);
            }
コード例 #2
0
            public static IPocketDimension FromLines(List <string> lines)
            {
                var dimension = new PocketDimension3(lines.First().Length, lines.Count, 1);

                for (var y = 0; y < lines.Count; y++)
                {
                    var line = lines[y];
                    for (var x = 0; x < line.Length; x++)
                    {
                        var cube = line[x] == '#' ? CubeType.Active : CubeType.Inactive;
                        dimension.Cubes[x, y, 0] = cube;
                    }
                }

                return(dimension);
            }
コード例 #3
0
        static void Main()
        {
            var lines = File.ReadAllLines("input.txt").ToList();

            var pockedDimension = PocketDimension3.FromLines(lines);

            for (var i = 0; i < 6; i++)
            {
                pockedDimension = pockedDimension.CalculateNextCycle();
            }
            Console.WriteLine($"Part 1 - {pockedDimension.NumActive}");

            pockedDimension = PocketDimension4.FromLines(lines);
            for (var i = 0; i < 6; i++)
            {
                pockedDimension = pockedDimension.CalculateNextCycle();
            }
            Console.WriteLine($"Part 2 - {pockedDimension.NumActive}");
        }