互いに素なサイクル形式で2つの順列が与えられた場合、それらの製品/組成を互いに素なサイクル形式で出力します。
構成を見つけるには、分離したサイクルを2行表記の順列に変換します。サイクルのばらばらの部分の各番号は、同じ部分でそれに続く番号にマッピングされます。包み込みます。ですから1 -> 5
、5 -> 1
、2 -> 4
、4 -> 2
。番号が見つからない場合は3 -> 3
、それ自体にマップされます。最初のばらばらのサイクルも書くことができます(1 5)(2 4)(3)
。これらのマッピングは、次のように2行に変換されます(PとQの順序が逆になっていることに注意してください)。
2つの順列の積は、最初の行が最初の(最も右の)順列の2番目の行と同じになるように、2番目(左端)の順列の列を再配置することによって得られます。次に、積を、変更された2番目の順列の2番目の行に対する最初の順列の最初の行として書き込むことができます。
ルール:
- 入力はリストのリストまたは同様の形式で与えられます
- のように、すでに2行の形式(インデックスから値へのマッピング)をとることはできません。
(1 5)(2 4)
[5, 4, 3, 2, 1]
- すべての数値が各グループで発生する必要はないので
(1 5)·(1 2)
、発生する可能性があり、結果としてになり(2 5 1)
ます。 - 出力は入力として使用できるはずです。
- 空のサイクルでの入力をサポートする必要はありません
(1 5)·()
。代わりに、(1 5)·(1)
または同等のものとして与えられます。 - サイクルは循環するため、結果が正しければ、順序は関係ありません。
- ゼロまたは1から開始できます。結果は同じなので、問題ではありません。
- 数値はより大きい場合があり
9
ます。 - 同じ番号を出力に複数回含めることはできません。だから、
[[1],[1]]
許可されていません。 - この操作は可換ではないことに注意してください!私はPの前にQを置きました。任意の順序を選択できますが、順序が異なる場合は指定してください。
- 最短コードの勝利
- 組み込みは許可されますが、組み込みを使用する場合は、それを使用せずにソリューションを表示します。
例:
同等の出力の可能性がすべて示されているわけではありません
Input
Output
[[1, 5], [2, 4]], [[1, 2, 4, 3]]
[[1, 4, 3, 5]] (or [[4, 3, 5, 1]] or ...)
[[1, 5]], [[1, 2]]
[[2, 5, 1]]
[[10, 2, 3]], [[2]]
[[3, 10, 2]]
[[1]], [[3]]
[[]] (or [[1]] or something equivalent)
[[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]], [[5,6,7,9,14],[2,8,3,10],[1,11]]
[[12, 14, 6, 1], [8, 15, 10, 3, 2], [13, 11, 7, 9, 4]]
(arguments in reverse order from above gives a different answer)
[[5,6,7,9,14],[2,8,3,10],[1,11]], [[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]]
[[9, 14, 4, 13, 1], [10, 8, 3, 15, 2], [7, 11, 12, 5]]