public static void Main()
int[][] validBoard = new int[][]
new int[] { 0, 0, 0, 0, 0 },
new int[] { 0, 0, 0, 0, 0 },
new int[] { 0, 0, 0, 0, 0 },
new int[] { 0, 0, 0, 0, 0 }
int[][] validBoard2 = new int[][]
new int[] { 0, 0, 0, 0, 0 },
new int[] { 0, 1, 1, 1, 0 },
new int[] { 0, 0, 1, 1, 0 },
new int[] { 0, 0, 0, 0, 0 }
int[][] validBoard3 = new int[][]
new int[] { 0, 0, 0, 0, 0 },
new int[] { 1, 1, 1, 1, 0 },
new int[] { 1, 0, 0, 0, 0 },
new int[] { 0, 0, 1, 1, 1 }
int[][] validBoard4 = new int[][]
new int[] { 1, 0, 0, 0, 1 },
new int[] { 1, 0, 1, 0, 1 },
new int[] { 1, 0, 1, 0, 1 },
new int[] { 0, 0, 1, 0, 0 }
int[][] validBoard5 = new int[][]
new int[] { 1, 0, 0, 0, 1, 0, 0 },
new int[] { 1, 0, 1, 0, 1, 0, 0 },
new int[] { 1, 0, 1, 0, 1, 0, 0 },
new int[] { 0, 0, 1, 0, 0, 0, 0 }
int[][] invalidBoard = new int[][]
new int[] { 1, 1, 1, 1, 1 },
new int[] { 1, 1, 1, 1, 1 },
new int[] { 1, 1, 1, 1, 1 },
new int[] { 1, 1, 1, 1, 1 }
int[][] invalidBoard2 = new int[][]
new int[] { 0, 0, 0, 0, 0 },
new int[] { 1, 1, 1, 1, 0 },
new int[] { 0, 0, 1, 1, 0 },
new int[] { 0, 1, 0, 0, 0 }
int[][] invalidBoard3 = new int[][]
new int[] { 0, 0, 0, 0, 0 },
new int[] { 1, 1, 1, 1, 0 },
new int[] { 1, 0, 0, 1, 0 },
new int[] { 0, 0, 1, 0, 0 }
int[][] invalidBoard4 = new int[][]
new int[] { 1, 0, 0, 1, 0 },
new int[] { 1, 0, 0, 1, 1 },
new int[] { 1, 0, 0, 0, 1 },
new int[] { 0, 0, 0, 0, 0 }
Console.WriteLine("Should be True: " + IsBoardValid(validBoard));
Console.WriteLine("Should be True: " + IsBoardValid(validBoard2));
Console.WriteLine("Should be True: " + IsBoardValid(validBoard3));
Console.WriteLine("Should be True: " + IsBoardValid(validBoard4));
Console.WriteLine("Should be False: " + IsBoardValid(invalidBoard));
Console.WriteLine("Should be False: " + IsBoardValid(invalidBoard));
Console.WriteLine("Should be False: " + IsBoardValid(invalidBoard));
Console.WriteLine("Should be False: " + IsBoardValid(invalidBoard));
public static bool IsBoardValid(int[][] board) {
int numAllElements = board.Length * board[0].Length;
int numOfWhiteElementsForValidBoard = GetNumOfWhiteElementsForValidBoard(numAllElements, board);
if (x < board[y].Length - 1)
if (y < board.Length - 1)
int numOfWhiteElementsSeen = 1;
while (numOfWhiteElementsSeen < numOfWhiteElementsForValidBoard)
if (x+1 != board[y].Length && board[y][x+1] == 0)
numOfWhiteElementsSeen++;
if (y+1 != board.Length && board[y+1][x] == 0)
numOfWhiteElementsSeen++;
if (x-1 >= 0 && board[y][x-1] == 0)
numOfWhiteElementsSeen++;
if (y-1 >= 0 && board[y-1][x] == 0)
numOfWhiteElementsSeen++;
if (numOfWhiteElementsSeen == numOfWhiteElementsForValidBoard)
if (y-1 >= 0 && board[y-1][x] == 2)
if (x-1 >= 0 && board[y][x-1] == 2)
if (y+1 != board.Length && board[y+1][x] == 2)
if (x+1 != board[y].Length && board[y][x+1] == 2)
public static int GetNumOfWhiteElementsForValidBoard(int numAllElements, int[][] board) {
int numBlackElements = 0;
foreach (int[] i in board){
return (numAllElements - numBlackElements);