public long CountNumberOfD3Cubes() { for (var iteration = 0; iteration < 6; iteration++) { IterateCubes(); } return(D3Cubes.Count(x => x.IsActive)); }
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)); } } }
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("-------"); }
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; }