Class: NQueens::Solver

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

Instance Method Summary collapse

Constructor Details

#initialize(n) ⇒ Solver

Returns a new instance of Solver.

Raises:

  • (ArgumentError)


3
4
5
6
# File 'lib/n_queens/solver.rb', line 3

def initialize(n)
  @n = Integer(n)
  raise ArgumentError, "n must be >= 1" if @n < 1
end

Instance Method Details

#solveObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/n_queens/solver.rb', line 8

def solve
  started_at = Time.now

  method, raw_solutions, count =
    if @n <= 10
      solutions = NQueens::Backtracking.new(@n).solve
      [ :backtracking, solutions, solutions.size ]
    elsif @n <= 17
      solutions = NQueens::ParallelBitmask.new(@n).solve
      [ :parallel_bitmask, solutions, solutions.size ]
    else
      parallel = NQueens::ParallelBitmask.new(@n)
      parallel.solve
      [ :parallel_bitmask, nil, parallel.count_from_files ]
    end

  NQueens::Result.new(
    @n,
    count,
    raw_solutions,
    method,
    Time.now - started_at
  )
end