https://leetcode.com/problems/valid-sudoku/

    1. class Solution {
    2. public:
    3. bool isValidSudoku(vector<vector<char>>& board) {
    4. int sub_r, sub_c;
    5. for(int r = 0; r < 9; r++){
    6. for(int c = 0; c < 9; c++){
    7. if(isdigit(board[r][c])){
    8. for(int r_o = 0; r_o < 9; r_o++){
    9. if(board[r_o][c] == board[r][c] && r_o != r){
    10. return false;
    11. }
    12. }
    13. for(int c_o = 0; c_o < 9; c_o++){
    14. if(board[r][c_o] == board[r][c] && c_o != c){
    15. return false;
    16. }
    17. }
    18. if(r <= 2){
    19. sub_r = 0;
    20. } else if(r >= 3 && r <= 5){
    21. sub_r = 1;
    22. } else {
    23. sub_r = 2;
    24. }
    25. if(c <= 2){
    26. sub_c = 0;
    27. } else if(c >= 3 && c <= 5){
    28. sub_c = 1;
    29. } else {
    30. sub_c = 2;
    31. }
    32. for(int r_s = 3*sub_r; r_s < 3*(sub_r + 1); r_s++){
    33. for(int c_s = 3*sub_c; c_s < 3*(sub_c + 1); c_s++){
    34. if(board[r_s][c_s] == board[r][c] && !(r_s == r && c_s == c)){
    35. return false;
    36. }
    37. }
    38. }
    39. }
    40. }
    41. }
    42. return true;
    43. }
    44. };
    func isValidSudoku(board [][]byte) bool {
        for y:=0; y<9; y++ {
            for x:=0; x<9; x++ {
                if !allValid(board, y, x){
                    return false
                }
            }
        }
    
        return true
    }
    
    func verticalValid(board [][]byte, y int, x int) bool {
        val := board[y][x]
    
        for i:=0; i<9; i++ {
            if board[i][x] == val && i != y {
                return false
            }
        }
        return true
    }
    
    func horizontalValid(board [][]byte, y int, x int) bool {
        val := board[y][x]
    
        for j:=0; j<9; j++ {
            if board[y][j] == val && j != x {
                return false
            }
        }
        return true
    }
    
    func cubeValid(board [][]byte, y int, x int) bool {
        val := board[y][x]
        i_o := int(y / 3) * 3 
        j_o := int(x / 3) * 3
    
        for i:=i_o; i < i_o + 3; i++ {
            for j:=j_o; j < j_o + 3; j++ {
                if board[i][j] == val && !(j == x && i == y) {
                    return false
                }
            }
        }
        return true
    }
    
    func allValid(board [][]byte, y int, x int) bool {
        if board[y][x] == '.' {
            return true
        }
        if !verticalValid(board, y, x){
            return false
        }
        if !horizontalValid(board, y, x){
            return false
        }
        if !cubeValid(board, y, x){
            return false
        }
        return true
    }