rubyで行列を扱いたい場合には標準クラスでMatrixクラスが用意されていますが、そこまで複雑な操作をしないのであれば、二次元配列で簡単に行列を表現することが可能です。
require 'pp' mat = [[1,2,3],[4,5,6],[7,8,9]] pp mat
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
これで下図のような行列が出来ました。
・回転も欲しくなるよね
行列の回転を行うにはtransposeメソッドとreverseメソッドを使用します。
require 'pp' mat = [[1,2,3],[4,5,6],[7,8,9]] pp mat.transpose.map(&:reverse) #=> 右回転 pp mat.reverse.map(&:reverse) #=> 180度回転 pp mat.transpose.reverse #=> 左回転
[[7, 4, 1], [8, 5, 2], [9, 6, 3]] [[9, 8, 7], [6, 5, 4], [3, 2, 1]] [[3, 6, 9], [2, 5, 8], [1, 4, 7]]
これで行列の回転ができるようになりました。下の図でそれぞれの操作と行列の変化を表示します。
たまに必要になるときがあるので、覚えて損はないはず?