[A,I] を新たな行列(A|I)とし、 行基本変形の規則にそって、(I|A-1) に変形する。 Gauss-Jordan の方法で、先頭の n × n 行列を単位行列にすると、 逆行列が後半の行列に出来上がる。 答えを出す部分で、n × n+1 行列ではない場合に、行列そのものを返すことにする。
if mat[0].length - mat.length == 1
ans = Array.new
for i in 0 .. mat.length - 1
ans << mat[i].pop
end
p ans
else
p mat
end