クラス Group についてはひとつ前のエントリを見てください。
変数 od に次数を入れます。かなり時間がかかる。自分の環境だと、5次で 40秒くらい、6次で 2.8時間くらい。次数が大きくなったら、結合法則の確認をスキップした方がいいかも知れない。
od = 5 perm = lambda do |num1, num2| n1 = num1.chars.map(&:to_i) n2 = num2.chars.map(&:to_i) n1.map {|i| n2[i]}.join end ar = (0...od).to_a.permutation(od).map(&:join) g = Group.new(ar, perm, false) p g.ie #=>"01234" 単位元 p g.order #=>120 位数 p g.inverse("32401") #=>"34102" 逆元の例