Esempio n. 1
0
        public long CountNumberOfD3Cubes()
        {
            for (var iteration = 0; iteration < 6; iteration++)
            {
                IterateCubes();
            }

            return(D3Cubes.Count(x => x.IsActive));
        }
Esempio n. 2
0
        public Computer(string input)
        {
            var rows = input.Split("\n");

            for (var yAxis = 0; yAxis < rows.Length; yAxis++)
            {
                for (var xAxis = 0; xAxis < rows[yAxis].Length; xAxis++)
                {
                    D3Cubes.Add(new D3Cube(rows[yAxis][xAxis] == '#', xAxis, yAxis));
                    D4Cubes.Add(new D4Cube(rows[yAxis][xAxis] == '#', xAxis, yAxis));
                }
            }
        }
Esempio n. 3
0
        private void PrintCubeState()
        {
            foreach (var zAxis in D3Cubes.GroupBy(x => x.Location.Z))
            {
                Console.WriteLine($"z={zAxis.Key}");
                foreach (var yAxis in zAxis
                         .OrderBy(c => c.Location.Y)
                         .GroupBy(c => c.Location.Y))
                {
                    Console.WriteLine(yAxis.OrderBy(c => c.Location.X).Aggregate(string.Empty,
                                                                                 (current, xAxis) => current + (xAxis.IsActive ? '#' : '.')) + " " +
                                      yAxis.Key);
                }

                Console.WriteLine("");
            }

            Console.WriteLine("-------");
        }
Esempio n. 4
0
        private void IterateCubes()
        {
            var grid = new List <D3Cube>();

            foreach (var neighbour in D3Cubes
                     .Where(c => c.IsActive)
                     .Select(cube => cube.GetNeighbours())
                     .SelectMany(neighbours => neighbours))
            {
                if (grid.Any(x => x.Location == neighbour))
                {
                    continue;
                }

                var current = D3Cubes.Any(c => c.Location == neighbour)
                    ? D3Cubes.FirstOrDefault(c => c.Location == neighbour)
                    : new D3Cube(neighbour);

                var activeNeighbours = D3Cubes
                                       .Count(c =>
                                              current.GetNeighbours().Contains(c.Location) &&
                                              c.Location != current.Location &&
                                              c.IsActive
                                              );

                if (activeNeighbours == 3 || (current.IsActive && activeNeighbours == 2))
                {
                    current.IsActive = true;
                }
                else
                {
                    current.IsActive = false;
                }

                grid.Add(current);
            }

            D3Cubes = grid;
        }