rubyで数独 実装2
前回のやつのSudoku_conditionクラスを少しリファクタリング
pをcur_cellにしたりほかも若干変えた
class Sudoku_condition def initialize end def no_violation?(grid, cur_cell, v) row_any?(grid, cur_cell, v) && column_any?(grid, cur_cell, v) && square_any?(grid, cur_cell, v) end private def row_any?(grid, cur_cell, v) r = cur_cell / 9 (0..8).map { |k| grid[9 * r + k] }.one? { |num| num == v } # grid.each_slice(9).map(&:to_a)[r].one?{|num| num ==v} #この方が読みやすいけどcolumnとかで使えないから却下 end def column_any?(grid, cur_cell, v) c = cur_cell % 9 (0..8).map { |k| grid[9 * k + c] }.one? { |num| num == v } end def square_any?(grid, cur_cell, v) r_base = (cur_cell / 9) / 3 * 3 #左上のマスの行と列 c_base = (cur_cell % 9) / 3 * 3 (0..8).map { |k| grid[9 * (r_base + (k / 3)) + c_base + (k % 3)] }.one? { |num| num == v } end end