mirror of
https://github.com/TheAlgorithms/Ruby
synced 2024-12-26 21:58:56 +01:00
Add sets solution
This commit is contained in:
parent
79ca68d958
commit
f964954529
1 changed files with 118 additions and 0 deletions
|
@ -160,6 +160,124 @@ print(is_valid_sudoku(board))
|
|||
# => false
|
||||
# explanation: duplicated value in row
|
||||
|
||||
board = [["8","3",".",".","7",".",".",".","."],
|
||||
["6",".",".","1","9","5",".",".","."],
|
||||
[".","9","8",".",".",".",".","6","."],
|
||||
[".",".",".",".","6",".",".",".","3"],
|
||||
["4",".",".","8",".","3",".",".","1"],
|
||||
["7",".",".",".","2",".",".",".","6"],
|
||||
[".","6",".",".",".",".","2","8","."],
|
||||
[".",".",".","4","1","9",".",".","5"],
|
||||
[".",".",".",".","8",".",".","7","9"]]
|
||||
print(is_valid_sudoku(board))
|
||||
# => false
|
||||
# explanation: duplicated value in 3x3 grid
|
||||
|
||||
#
|
||||
# Approach 2: Sets
|
||||
#
|
||||
require 'set'
|
||||
|
||||
def is_valid_sudoku(board)
|
||||
return false unless check_rows(board)
|
||||
return false unless check_cols(board)
|
||||
row = -3
|
||||
while (row += 3) < 9
|
||||
col = - 3
|
||||
while (col += 3) < 9
|
||||
start_point = [row, col]
|
||||
return false unless check_grid(board, start_point)
|
||||
end
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_grid(board, start_point)
|
||||
row = start_point[0]
|
||||
col = start_point[1]
|
||||
ss = Set.new
|
||||
(row..(row + 2)).each do |cur_row|
|
||||
(col..(col + 2)).each do |cur_col|
|
||||
next if board[cur_row][cur_col] == "."
|
||||
return false if ss.member?(board[cur_row][cur_col])
|
||||
ss.add board[cur_row][cur_col]
|
||||
end
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_col(board, col)
|
||||
ss = Set.new
|
||||
(0..8).each do |row|
|
||||
next if board[row][col] == "."
|
||||
return false if ss.member?(board[row][col])
|
||||
ss.add board[row][col]
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_row(board, row)
|
||||
ss = Set.new
|
||||
(0..8).each do |col|
|
||||
next if board[row][col] == "."
|
||||
return false if ss.member?(board[row][col])
|
||||
ss.add board[row][col]
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_rows(board)
|
||||
(0..8).each do |row|
|
||||
return false unless check_row(board, row)
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_cols(board)
|
||||
(0..8).each do |col|
|
||||
return false unless check_col(board, col)
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
board = [["5","3",".",".","7",".",".",".","."],
|
||||
["6",".",".","1","9","5",".",".","."],
|
||||
[".","9","8",".",".",".",".","6","."],
|
||||
["8",".",".",".","6",".",".",".","3"],
|
||||
["4",".",".","8",".","3",".",".","1"],
|
||||
["7",".",".",".","2",".",".",".","6"],
|
||||
[".","6",".",".",".",".","2","8","."],
|
||||
[".",".",".","4","1","9",".",".","5"],
|
||||
[".",".",".",".","8",".",".","7","9"]]
|
||||
print(is_valid_sudoku(board))
|
||||
# => true
|
||||
|
||||
board = [["8","3",".",".","7",".",".",".","."],
|
||||
["6",".",".","1","9","5",".",".","."],
|
||||
[".","9","8",".",".",".",".","6","."],
|
||||
["8",".",".",".","6",".",".",".","3"],
|
||||
["4",".",".","8",".","3",".",".","1"],
|
||||
["7",".",".",".","2",".",".",".","6"],
|
||||
[".","6",".",".",".",".","2","8","."],
|
||||
[".",".",".","4","1","9",".",".","5"],
|
||||
[".",".",".",".","8",".",".","7","9"]]
|
||||
print(is_valid_sudoku(board))
|
||||
# => false
|
||||
# explanation: duplicated value in column
|
||||
|
||||
board = [["8","3",".",".","7",".","3",".","."],
|
||||
["6",".",".","1","9","5",".",".","."],
|
||||
[".","9","8",".",".",".",".","6","."],
|
||||
["8",".",".",".","6",".",".",".","3"],
|
||||
["4",".",".","8",".","3",".",".","1"],
|
||||
["7",".",".",".","2",".",".",".","6"],
|
||||
[".","6",".",".",".",".","2","8","."],
|
||||
[".",".",".","4","1","9",".",".","5"],
|
||||
[".",".",".",".","8",".",".","7","9"]]
|
||||
print(is_valid_sudoku(board))
|
||||
# => false
|
||||
# explanation: duplicated value in row
|
||||
|
||||
board = [["8","3",".",".","7",".",".",".","."],
|
||||
["6",".",".","1","9","5",".",".","."],
|
||||
[".","9","8",".",".",".",".","6","."],
|
||||
|
|
Loading…
Reference in a new issue