package cracking_the_coding_interview.ch_16;

public class TicTacWin {

    enum Marker { X, O, NIL }

    private static boolean isWin(Marker[][] board) {
        int boardSize = board.length;

        for (int row = 0; row < boardSize; row++) {
            int pos = 0;
            var marker = board[row][pos];
            if (marker == Marker.NIL) continue;

            while (pos < boardSize)
                if (board[row][pos] != marker)   break;
                else if (pos++ == boardSize - 1) return true;
        }

        for (int col = 0; col < boardSize; col++) {
            int pos = 0;
            var marker = board[pos][col];
            if (marker == Marker.NIL) continue;

            while (pos < boardSize)
                if (board[pos][col] != marker)   break;
                else if (pos++ == boardSize - 1) return true;
        }

        var marker = board[0][0];
        if (marker != Marker.NIL)
            for (int row = 1, col = 1; row < boardSize; row++, col++)
                if (board[row][col] != marker) break;
                else if (row == boardSize - 1) return true;

        marker = board[boardSize - 1][0];
        if (marker != Marker.NIL)
            for (int row = boardSize - 2, col = 1; row >= 0; row--, col++)
                if (board[row][col] != marker) break;
                else if (row == 0)             return true;

        return false;
    }

}