行列
The Ruby Programming Launguageの一章の数独のCode解読のために
行列の勉強.
describe "grid 3x3" do before(:each) do @grid = SquareMatrix.new([11,12,13, 21,22,23, 31,32,33]) end it "should get column array by column num" do @grid.column(1).should == [11,21,31] @grid.column(2).should == [12,22,32] @grid.column(3).should == [13,23,33] end it "should get row array by row num" do @grid.row(1).should == [11,12,13] @grid.row(2).should == [21,22,23] @grid.row(3).should == [31,32,33] end end describe "grid 4x4" do before(:each) do @grid = SquareMatrix.new([11,12,13,14, 21,22,23,24, 31,32,33,34, 41,42,43,44]) end it "should get column array by column num" do @grid.column(1).should == [11,21,31,41] @grid.column(2).should == [12,22,32,42] @grid.column(3).should == [13,23,33,43] @grid.column(4).should == [14,24,34,44] end it "should get row array by row num" do @grid.row(1).should == [11,12,13,14] @grid.row(2).should == [21,22,23,24] @grid.row(3).should == [31,32,33,34] @grid.row(4).should == [41,42,43,44] end end class SquareMatrix < Array def column(num) results = [] num.step(self.size, Math.sqrt(self.size)) { |i| results << self[i-1] } results end def row(num) self[(num - 1) * Math.sqrt(self.size), Math.sqrt(self.size)] end end