Skip to content

Instantly share code, notes, and snippets.

@joejag
Created July 2, 2013 12:52
Show Gist options
  • Save joejag/5909030 to your computer and use it in GitHub Desktop.
Save joejag/5909030 to your computer and use it in GitHub Desktop.
Sudoku starting point in ruby
grid = [
[nil,3,8, nil,nil,nil, 7,9,1 ],
[2,nil,nil, nil,nil,nil, 4,nil,6 ],
[nil,nil,nil, nil,6 ,9 , nil,8,nil ],
[nil,nil,nil, 9,1,nil, nil,5,nil ],
[9,nil,nil, nil,nil,nil, nil,nil,7 ],
[nil,5,nil, nil,8,4, nil,nil,nil],
[nil,6,nil, 8,9,nil, nil,nil,nil],
[7,nil,9, nil,nil,nil, nil,nil,8 ],
[3,8,1, nil,nil,nil, 5,2,nil ]
]
def rows_are_valid? grid
(0..8).each do |row_index|
row = grid[row_index]
return false if row.reject(&:nil?).uniq != row.reject(&:nil?)
end
true
end
def cols_are_valid? grid
(0..8).each do |col_index|
col = grid.map { |row| row[col_index] }
return false if col.reject(&:nil?).uniq != col.reject(&:nil?)
end
true
end
def squares_are_valid? grid
(0..2).each do |x_index|
(0..2).each do |y_index|
x_start = x_index * 3
y_start = y_index * 3
square = grid[y_start][x_start..x_start+2] + grid[y_start + 1][x_start..x_start+2] + grid[y_start + 2][x_start..x_start+2]
return false if square.reject(&:nil?).uniq != square.reject(&:nil?)
end
end
true
end
def is_valid? grid
rows_are_valid? grid and cols_are_valid? grid and squares_are_valid? grid
end
puts is_valid? grid
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment