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