47 lines
620 B
Go
47 lines
620 B
Go
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
|
|
}
|