Method: Rudoku#initialize

Defined in:
lib/rudoku.rb

#initialize(sudoku) ⇒ Rudoku



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rudoku.rb', line 2

def initialize(sudoku)
  @n = sudoku.size
  @sqrt_n = Math.sqrt(@n).to_i
  raise "wrong sudoku size" unless @sqrt_n * @sqrt_n == @n

  @arr = sudoku.collect { |row|
    (0...@n).collect { |i|
      ((1..@n) === row[i]) ? [row[i]] : (1..@n).to_a
    }
  }

  @rfix = Array.new(@n) { [] }
  @cfix = Array.new(@n) { [] }
  @bfix = Array.new(@n) { [] }
  @n.times { |r| @n.times { |c| update_fix(r, c) } }

  [@rfix, @cfix, @bfix].each { |fix| fix.each { |x|
    unless x.size == x.uniq.size
      raise "non-unique numbers in row, col or box"
    end
  } }
end