public Cube MakeTurn(Cube inputState) { var result = new Cube(inputState.Dim); var keys = CubeAnalyzer.GetPossibilities(inputState); foreach (var key in keys) { var value = checker.Check(inputState, key); CellState newState = placeSpecifier.GetState(inputState.GetValue(key).Value, value); result.SetCell(newState, key); } return(result); }