Skip to content

Instantly share code, notes, and snippets.

@rskelley9
Last active December 22, 2015 02:09
Show Gist options
  • Save rskelley9/6401177 to your computer and use it in GitHub Desktop.
Save rskelley9/6401177 to your computer and use it in GitHub Desktop.
class Sudoku
#so effing close it's not even funny.
def initialize(board_string)
board_string_array = board_string.split('')
@board = Array.new(9){Array.new(9)}
@board.each_index do |row|
@board[row].each_index do |column|
@board[row][column] = board_string_array.shift.to_i
if @board[row][column] == 0
@board[row][column] = (1..9).to_a
end
end
end
end
def solve! #must run the in order,just giving me column solve unless I return boxes
return @new_board if @solved_board == true
for i in 0..21 do
row_solve
clean
col_solve
clean
box_solve
#RKelley is brilliant.
clean
end
@new_board
end
def clean
@new_board.each do |row|
row.map! do |element|
if element.class == Array && element.length == 1
element = element[0]
else
element
end
end
end
end
def solved?
@solved_board = @new_board.each do |row|
row.each do |element|
if element.class == Array then
false
else
true
end
end
end
end
# def row_solve_col_solve
# row_solve
# col_solve
# end
def row_solve
#each row or 9 times walk through elements
@new_board = @board.map! do |row|
row.map do |element|
if element.class == Array
element - row
else
element
end
end
end
@new_board
end
def col_solve
@new_board = @new_board.transpose
@new_board.map! do |column|
column.map do |e|
if e.class == Array
e - column
else
e
end
end
end
@new_board
end
def box_solve
@new_board = [@new_board[0][0..2] + @new_board[1][0..2] + @new_board[2][0..2], @new_board[0][3..5] + @new_board[1][3..5] + @new_board[2][3..5], @new_board[0][6..8] + @new_board[1][6..8] + @new_board[2][6..8], @new_board[3][0..2] + @new_board[4][0..2] + @new_board[5][0..2], @new_board[3][3..5] + @new_board[4][3..5] + @new_board[5][3..5], @new_board[3][6..8] + @new_board[4][6..8] + @new_board[5][6..8], @new_board[6][0..2] + @new_board[7][0..2] + @new_board[8][0..2], @new_board[6][3..5] + @new_board[7][3..5] + @new_board[8][3..5], @new_board[6][6..8] + @new_board[7][6..8] + @new_board[8][6..8]]
#[box_1, box_2, box_3, box_4, box_5, box_6, box_7, box_8, box_9]
@new_board.map do |box|
box.map! do |box_element|
if box_element.class == Array
box_element - box
else
box_element
end
end
end
@new_board = @new_board[0][0..2] + @new_board[1][0..2] + @new_board[2][0..2], @new_board[0][3..5] + @new_board[1][3..5] + @new_board[2][3..5], @new_board[0][6..8] + @new_board[1][6..8] + @new_board[2][6..8], @new_board[3][0..2] + @new_board[4][0..2] + @new_board[5][0..2], @new_board[3][3..5] + @new_board[4][3..5] + @new_board[5][3..5], @new_board[3][6..8] + @new_board[4][6..8] + @new_board[5][6..8], @new_board[6][0..2] + @new_board[7][0..2] + @new_board[8][0..2], @new_board[6][3..5] + @new_board[7][3..5] + @new_board[8][3..5], @new_board[6][6..8] + @new_board[7][6..8] + @new_board[8][6..8]
@new_board
end
end
# board_string = File.readlines('sample.unsolved.txt').first.chomp
game = Sudoku.new("619030040270061008000047621486302079000014580031009060005720806320106057160400030")
# Remember: this will just fill out what it can and not "guess"
p game.solve!
# p game.board
# p game.row_solve_col_solve
# p game.row_solve
# p game.col_solve
# p game.solve!
# game.board
#p game.box_solve
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment