forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
36-Valid-Sudoku.rb
48 lines (42 loc) · 817 Bytes
/
36-Valid-Sudoku.rb
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
def is_valid_sudoku(board)
valid_rows_and_columns?(board) && valid_boxes?(board)
end
def valid_rows_and_columns?(board)
(0...9).each do |y|
column = []
row = []
(0...9).each do |x|
row << board[y][x]
column << board[x][y]
end
return false unless valid?(row) && valid?(column)
end
true
end
def valid?(row)
hash = {}
row.each do |cell|
next if cell == "."
return false if hash.key? cell
hash[cell] = true
end
true
end
def valid_boxes?(board)
y_cap = 0
until y_cap == 9
x_cap = 0
until x_cap == 9
box = []
(y_cap...(y_cap + 3)).each do |y|
(x_cap...(x_cap + 3)).each do |x|
box << board[y][x]
end
return false unless valid?(box)
end
x_cap += 3
end
y_cap += 3
end
true
end