class Kudosu::Board
Attributes
cells[RW]
Public Class Methods
new(ary)
click to toggle source
# File lib/kudosu/board.rb, line 5 def initialize(ary) self.cells = ary.flatten.map { |val| Cell.new(val) } end
Public Instance Methods
boxes()
click to toggle source
# File lib/kudosu/board.rb, line 31 def boxes sliced_cols = rows.map { |row| row.each_slice(3).to_a }.transpose sliced_cols.flatten.each_slice(9).to_a end
columns()
click to toggle source
# File lib/kudosu/board.rb, line 27 def columns rows.transpose end
print()
click to toggle source
# File lib/kudosu/board.rb, line 19 def print Printer.new(self).print end
rows()
click to toggle source
# File lib/kudosu/board.rb, line 23 def rows cells.each_slice(9).to_a end
shuffle()
click to toggle source
# File lib/kudosu/board.rb, line 36 def shuffle boxes.each { |box| box.shuffle.take(rand(5..7)).each(&:reset) } self end
solve()
click to toggle source
# File lib/kudosu/board.rb, line 9 def solve board = attempt_solution || fork_board(values) until board self.cells = board.cells self end
solved?()
click to toggle source
# File lib/kudosu/board.rb, line 41 def solved? cells.all?(&:solved?) end
valid?()
click to toggle source
# File lib/kudosu/board.rb, line 45 def valid? MarkupRangeUtils.ranges_valid?(markup_ranges) end
values()
click to toggle source
# File lib/kudosu/board.rb, line 15 def values cells.map(&:value) end
Protected Instance Methods
attempt_solution()
click to toggle source
# File lib/kudosu/board.rb, line 55 def attempt_solution cells.each(&:reset_markup) until solved? MarkupRangeUtils.update_ranges_markup(markup_ranges) return if cells.none?(&:solve) end self end
unsolved_cells()
click to toggle source
# File lib/kudosu/board.rb, line 51 def unsolved_cells cells.reject(&:solved?) end
Private Instance Methods
fork_board(values)
click to toggle source
# File lib/kudosu/board.rb, line 72 def fork_board(values) board = Board.new(values) board.unsolved_cells.each do |cell| return board if board.attempt_solution cell.pick_random break unless board.valid? end fork_board(values) end
markup_ranges()
click to toggle source
# File lib/kudosu/board.rb, line 68 def markup_ranges @ranges ||= rows + columns + boxes end