mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-08-24 11:03:21 +03:00
47 lines
824 B
Go
47 lines
824 B
Go
package sudoku
|
|
|
|
// Grid represents a 4x4 sudoku grid
|
|
type Grid [16]uint8
|
|
|
|
// GenerateAllGrids generates all valid 4x4 Sudoku grids
|
|
func GenerateAllGrids() []Grid {
|
|
var grids []Grid
|
|
var g Grid
|
|
var backtrack func(int)
|
|
|
|
backtrack = func(idx int) {
|
|
if idx == 16 {
|
|
grids = append(grids, g)
|
|
return
|
|
}
|
|
row, col := idx/4, idx%4
|
|
br, bc := (row/2)*2, (col/2)*2
|
|
for num := uint8(1); num <= 4; num++ {
|
|
valid := true
|
|
for i := 0; i < 4; i++ {
|
|
if g[row*4+i] == num || g[i*4+col] == num {
|
|
valid = false
|
|
break
|
|
}
|
|
}
|
|
if valid {
|
|
for r := 0; r < 2; r++ {
|
|
for c := 0; c < 2; c++ {
|
|
if g[(br+r)*4+(bc+c)] == num {
|
|
valid = false
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if valid {
|
|
g[idx] = num
|
|
backtrack(idx + 1)
|
|
g[idx] = 0
|
|
}
|
|
}
|
|
}
|
|
backtrack(0)
|
|
return grids
|
|
}
|