Sudoku
Raid

Code Preview :
                    
package piscine
import "strings"

func SudokuSolver(lines ...string) string {
    if len(lines) != 9 {
        return "Erreur"
    }
    var sudoku [9][9]rune
    for i, line := range lines {
        line = strings.ReplaceAll(line, " ", "")
        for j, value := range line {
            if value == '.' {
                sudoku[i][j] = '0'
            } else {
                sudoku[i][j] = value
            }
        }
    }
    if resSudoku(&sudoku) {
        return returnPresentation(sudoku)
    }
    return "Erreur"
}

func resSudoku(sudoku *[9][9]rune) bool {
    var rang, col int
    if !caseVide(sudoku, &rang, &col) {
        return true
    }

    for num := '1'; num <= '9'; num++ {
        if caseValide(sudoku, rang, col, num) {
            sudoku[rang][col] = num
            if resSudoku(sudoku) {
                return true
            }
            sudoku[rang][col] = '0'
        }
    }
    return false
}

func caseVide(sudoku *[9][9]rune, rang, col *int) bool {
    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            if sudoku[i][j] == '0' {
                *rang, *col = i, j
                return true
            }
        }
    }
    return false
}

func caseValide(sudoku *[9][9]rune, rang, col int, num rune) bool {
    return dansRang(sudoku, rang, num) == false &&
        dansCol(sudoku, col, num) == false &&
        dansBlock(sudoku, rang-rang%3, col-col%3, num) == false
}

func dansRang(sudoku *[9][9]rune, rang int, num rune) bool {
    for col := 0; col < 9; col++ {
        if sudoku[rang][col] == num {
            return true
        }
    }
    return false
}

func dansCol(sudoku *[9][9]rune, col int, num rune) bool {
    for rang := 0; rang < 9; rang++ {
        if sudoku[rang][col] == num {
            return true
        }
    }
    return false
}

func dansBlock(sudoku *[9][9]rune, boxStartrang, boxStartCol int, num rune) bool {
    for rang := 0; rang < 3; rang++ {
        for col := 0; col < 3; col++ {
            if sudoku[rang+boxStartrang][col+boxStartCol] == num {
                return true
            }
        }
    }
    return false
}

func returnPresentation(sudoku [9][9]rune) string {
    result := ""
    for i := 0; i < 9; i++ {
        for j := 0; j < 9; j++ {
            result += string(sudoku[i][j])
            if j < 8 {
                result += " "
            }
        }
        if i < 8 {
            result += "\n"
        }
    }
    return result
}

                    
                
25%
50%
75%
100%
Check Conditions
Main Algo Conception
Presentation Conception
Code Implementation
Erika
Lead project
Organisation
Main Algo Conception
Code Implementation
Quentin
Main Algo Conception
Type of algo Research
Code Implementation
Georges
Organisation Code
Main Algo Conception
Code Implementation
Web presentation dev
Julien