Class: SudokuSolver

Inherits:
Object
  • Object
show all
Defined in:
lib/sudoku_solver.rb

Instance Method Summary collapse

Constructor Details

#initialize(sudoku) ⇒ SudokuSolver

Returns a new instance of SudokuSolver.



8
9
10
11
12
13
# File 'lib/sudoku_solver.rb', line 8

def initialize sudoku
  @sudoku = sudoku.clone
  @depth = 0

  initialize_capabilities
end

Instance Method Details

#cloneObject



15
16
17
18
19
20
21
22
23
# File 'lib/sudoku_solver.rb', line 15

def clone
  solver = super

  solver.sudoku = @sudoku.clone
  solver.capabilities = Marshal.load(Marshal.dump(@capabilities))
  @depth += 1

  solver
end

#solveObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sudoku_solver.rb', line 25

def solve
  result = SudokuResult.new @depth

  while (solve_method1 || solve_method2) do
    return result unless correct?
  end

  if @sudoku.solved?
    result << @sudoku
  else
    element = find_best_element_to_random_solve

    @capabilities[element.y][element.x].each do |random|
      solver = self.clone
      solver.set(element.x, element.y, random)
      result.merge solver.solve
    end
  end

  result
end