n次対称群

クラス 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"  逆元の例