class SudokuSolver::BruteForceCorpus
Public Class Methods
new()
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 6 def initialize @variables = [] @available_in_row = Array.new(9) { Set.new 1..9 } @available_in_col = Array.new(9) { Set.new 1..9 } @available_in_sq = Array.new(3) do Array.new(3) { Set.new 1..9 } end end
Public Instance Methods
acquire(variable, value)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 27 def acquire(variable, value) @available_in_row[variable.row].delete(value) @available_in_col[variable.col].delete(value) @available_in_sq[variable.row/3][variable.col/3].delete(value) end
add_variable(row, col)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 19 def add_variable(row, col) @variables << Variable.new(row, col, self) end
available_values(variable)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 39 def available_values(variable) @available_in_row[variable.row] & @available_in_col[variable.col] & @available_in_sq[variable.row/3][variable.col/3] end
no_variables()
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 15 def no_variables @variables.size end
release(variable, value)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 33 def release(variable, value) @available_in_row[variable.row].add(value) @available_in_col[variable.col].add(value) @available_in_sq[variable.row/3][variable.col/3].add(value) end
sort_variables(&comp_func)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 45 def sort_variables(&comp_func) if comp_func @variables.sort! do |a, b| comp_func.call(a, b) end else @variables.sort! end end
variable_at(index)
click to toggle source
# File lib/sudoku_solver/brute_force_corpus.rb, line 23 def variable_at(index) @variables[index] end