示例#1
0
        public static Grid4D Simulate4D(Grid4D inGrid)
        {
            var outGrid = new Grid4D();

            var((xMin, xMax), (yMin, yMax), (zMin, zMax), (wMin, wMax)) = inGrid.GetDimensions();
            for (var x = xMin - 1; x <= xMax + 1; x++)
            {
                for (var y = yMin - 1; y <= yMax + 1; y++)
                {
                    for (var z = zMin - 1; z <= zMax + 1; z++)
                    {
                        for (var w = wMin - 1; w <= wMax + 1; w++)
                        {
                            var neighborsCount = GetNeighborsCount4D(inGrid, x, y, z, w);
                            if (inGrid.IsCubeActive(x, y, z, w))
                            {
                                if (neighborsCount == 2 || neighborsCount == 3)
                                {
                                    outGrid.SetCubeActive(x, y, z, w);
                                }
                            }
                            else
                            {
                                if (neighborsCount == 3)
                                {
                                    outGrid.SetCubeActive(x, y, z, w);
                                }
                            }
                        }
                    }
                }
            }
            return(outGrid);
        }
示例#2
0
        public static int GetNeighborsCount4D(Grid4D grid, int px, int py, int pz, int pw)
        {
            var count = 0;

            for (var x = px - 1; x <= px + 1; x++)
            {
                for (var y = py - 1; y <= py + 1; y++)
                {
                    for (var z = pz - 1; z <= pz + 1; z++)
                    {
                        for (var w = pw - 1; w <= pw + 1; w++)
                        {
                            if (x == px && y == py && z == pz && w == pw)
                            {
                                continue;
                            }
                            if (grid.IsCubeActive(x, y, z, w))
                            {
                                count += 1;
                            }
                        }
                    }
                }
            }
            return(count);
        }
示例#3
0
 public static int Part2(Grid4D grid, int cyclesCount)
 {
     for (var i = 0; i < cyclesCount; i++)
     {
         grid = Simulate4D(grid);
     }
     return(grid.ActiveCubesCount);
 }
示例#4
0
 public CubeGrid4D(Grid4D <CubeState> other, Location4D dimensions, Location4D offset)
     : base(other, dimensions, offset)
 {
 }
示例#5
0
 public CubeGrid4D(Grid4D <CubeState> other)
     : base(other, other.Dimensions, Location4D.Zero)
 {
 }