1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| object ValidSudo { def main(args: Array[String]): Unit = { val board = Array[Array[Char]]( Array[Char]('5', '3', '.', '.', '7', '.', '.', '.', '.'), Array[Char]('6', '.', '.', '1', '9', '5', '.', '.', '.'), Array[Char]('.', '9', '8', '.', '.', '.', '.', '6', '.'), Array[Char]('8', '.', '.', '.', '6', '.', '.', '.', '3'), Array[Char]('4', '.', '.', '8', '.', '3', '.', '.', '1'), Array[Char]('7', '.', '.', '.', '2', '.', '.', '.', '6'), Array[Char]('.', '6', '.', '.', '.', '.', '2', '8', '.'), Array[Char]('.', '.', '.', '4', '1', '9', '.', '.', '5'), Array[Char]('.', '.', '.', '.', '8', '.', '.', '7', '9') )
val board2 = Array[Array[Char]]( Array[Char]('8', '3', '.', '.', '7', '.', '.', '.', '.'), Array[Char]('6', '.', '.', '1', '9', '5', '.', '.', '.'), Array[Char]('.', '9', '8', '.', '.', '.', '.', '6', '.'), Array[Char]('8', '.', '.', '.', '6', '.', '.', '.', '3'), Array[Char]('4', '.', '.', '8', '.', '3', '.', '.', '1'), Array[Char]('7', '.', '.', '.', '2', '.', '.', '.', '6'), Array[Char]('.', '6', '.', '.', '.', '.', '2', '8', '.'), Array[Char]('.', '.', '.', '4', '1', '9', '.', '.', '5'), Array[Char]('.', '.', '.', '.', '8', '.', '.', '7', '9') )
println(isValidSudoku(board)) println(isValidSudoku(board2)) }
val setRow = new mutable.HashSet[Char]() val setColumn = new mutable.HashSet[Char]() val set = new mutable.HashSet[Char]()
def isValidSudoku(board: Array[Array[Char]]): Boolean = { for (i <- 0 until board.length) { setRow.clear() setColumn.clear() for (j <- 0 until (board.length)) { if (board(i)(j) != '.') { if (!setRow.contains(board(i)(j))) { setRow.add(board(i)(j)) } else { return false } }
if (board(j)(i) != '.') { if (!setColumn.contains(board(j)(i))) { setColumn.add(board(j)(i)) } else { return false } }
if (Array(1, 4, 7).contains(i) && Array(1, 4, 7).contains(j)) { if (!centerAround(board, i, j)) { return false } } } }
true }
def centerAround(board: Array[Array[Char]], i: Int, j: Int): Boolean = { set.clear() for (m <- i - 1 until i + 2) { for (n <- j - 1 until j + 2) { if (board(m)(n) != '.') { if (!set.contains(board(m)(n))) { set.add(board(m)(n)) } else { return false } } } }
true }
}
|