feat: valid sudoku
This commit is contained in:
46
pkg/valid_sudoku/main.go
Normal file
46
pkg/valid_sudoku/main.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package valid_sudoku
|
||||
|
||||
type Multiset map[byte]bool
|
||||
|
||||
func (m Multiset) Add(b byte) bool {
|
||||
if b == '.' {
|
||||
return true
|
||||
}
|
||||
|
||||
exists := m[b]
|
||||
m[b] = true
|
||||
return !exists
|
||||
}
|
||||
|
||||
func IsValidSudoku(board [][]byte) bool {
|
||||
for i := range 3 {
|
||||
for j := range 3 {
|
||||
box := Multiset{}
|
||||
|
||||
for x := range 3 {
|
||||
for y := range 3 {
|
||||
if !box.Add(board[3*j+y][3*i+x]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for i := range 9 {
|
||||
row := Multiset{}
|
||||
column := Multiset{}
|
||||
|
||||
for j := range 9 {
|
||||
if !row.Add(board[i][j]) {
|
||||
return false
|
||||
}
|
||||
|
||||
if !column.Add(board[j][i]) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user