Scalaで数珠順列
数珠順列
ex:円形のテーブルにA,B,C,Dさんが座る順番は何通り?
円順列であれば
A,B,C,D←(イ) A,B,D,C A,C,B,D A,C,D,B A,D,B,C A,D,C,B←(ロ)
だが、数珠順列はこれから並ぶ方向を考慮する。
例えば(イ),(ロ)について考えれば、(ロ)を逆向きにたどって読めば(イ)と同一となる
よってこれらを除外すれば
A,B,C,D A,B,D,C A,C,B,D
これをscalaで作る
ひとまず円順列を実装していたのだがそもそもpermutations,combinationsが実装されているのでこっからfilterかける
逆順は最初の要素を固定したとみなして、2番目と最後の要素でドロップしただけ。楽勝ですね