class ILoveSudoku::Grid
Attributes
cell_matrix[R]
columns[R]
rows[R]
subgroups[R]
Public Class Methods
new(cell_matrix:, rows:, columns:, subgroups:)
click to toggle source
# File lib/grid.rb, line 4 def initialize(cell_matrix:, rows:, columns:, subgroups:) @cell_matrix = cell_matrix @rows = rows @columns = columns @subgroups = subgroups solve! end
new_from_matrix(matrix)
click to toggle source
# File lib/grid.rb, line 12 def self.new_from_matrix(matrix) cell_matrix = CellMatrixCreator.new(matrix).cell_matrix rows = StraightLineCreator.new(cell_matrix).lines columns = StraightLineCreator.new(cell_matrix.transpose).lines subgroups = SubgroupCreator.new(cell_matrix).subgroups Grid.new( cell_matrix: cell_matrix, rows: rows, columns: columns, subgroups: subgroups ) end
Public Instance Methods
possibilities_matrix()
click to toggle source
# File lib/grid.rb, line 30 def possibilities_matrix cell_matrix.map do |row| row.map { |cell| cell.possibilities } end end
values_matrix()
click to toggle source
# File lib/grid.rb, line 24 def values_matrix cell_matrix.map do |row| row.map { |cell| cell.value } end end
Private Instance Methods
hit_all!(sym)
click to toggle source
# File lib/grid.rb, line 56 def hit_all!(sym) send(sym).each_with_object([]) do |item, success| success << item.hit! end.any? end
solve!()
click to toggle source
# File lib/grid.rb, line 41 def solve! loop do row_progress = hit_all!(:rows) column_progress = hit_all!(:columns) subgroup_progress = hit_all!(:subgroups) making_progress = row_progress || column_progress || subgroup_progress break unless making_progress end end