private static int CalculateResult1(Position[,] input, int numberWhenPeopleLeave, Func <Position[, ], int, int, int> numberOfAdjacents) { Position[,] before = input.Clone() as Position[, ]; Position[,] after = input.Clone() as Position[, ]; //Console.WriteLine("start"); //PrintPosition(before); //Console.WriteLine(); do { before = after.Clone() as Position[, ]; after = SimulateRound(before, numberWhenPeopleLeave, numberOfAdjacents); //Console.WriteLine("before"); //PrintPosition(before); //Console.WriteLine("after"); //PrintPosition(after); //Console.WriteLine(); } while (!PositionsEqual(before, after)); return(after.Cast <Position>().Count(p => p == Position.Occupied)); }
private static bool PositionsEqual(Position[,] p1, Position[,] p2) => Enumerable.SequenceEqual(p1.Cast <Position>(), p2.Cast <Position>());