Враховуючи дві перестановки у формі неперервного циклу, виведіть їх продукт / композицію у форму неперервного циклу
Щоб знайти композицію, перетворіть роз'єднані цикли в перестановки в дворядкові позначення. Кожне число в неперервній частині циклу відображається на число, що слідує за ним в тій же частині. Він обертається навколо. Так 1 -> 5
, 5 -> 1
, 2 -> 4
, 4 -> 2
. Якщо число не знайдено 3 -> 3
, воно відображається до себе. Перший неперервний цикл також міг бути записаний (1 5)(2 4)(3)
. Ці відображення перетворюються на два рядки, як-от так (зауважте, що порядок P і Q зворотні):
Твір продукту двох перестановок отримують шляхом перестановки стовпців другої (крайньої лівої) перестановки так, щоб її перший ряд був ідентичним другому ряду першої (правої) перестановки. Потім продукт може бути записаний як перший рядок першого перестановки над другим рядом модифікованої другої перестановки.
Правила:
- Введення буде надано у вигляді списку списків або подібного формату
- Ви не можете приймати щось подібне,
(1 5)(2 4)
як[5, 4, 3, 2, 1]
вже у дворядковій формі (відображення індексу до значення) - Не всі числа мають бути в кожній групі, так що ви могли б мати
(1 5)·(1 2)
результат(2 5 1)
. - Ваш вихід повинен бути використаний як ваш вхід.
- Вам не потрібно підтримувати введення з порожнім циклом
(1 5)·()
. Це було б замість цього як(1 5)·(1)
щось рівнозначне. - Оскільки цикли завершуються, порядок не має значення, якщо результат правильний.
- Можна починати з нуля або одиниці. Не має значення, адже результати однакові.
- Цифри можуть бути більшими, ніж
9
. - Ви можете не включати одне і те ж число більше одного разу у висновок. Так
[[1],[1]]
не дозволено. - Зауважте, що ця операція не є комутативною ! Я ставлю Q перед P, тому що це зробила Вікіпедія. Ви можете вибрати будь-яке замовлення, але вкажіть, яке, якщо воно інше.
- Найкоротший код виграє
- Вбудовані дозволені, але якщо ви їх використовуєте, покажіть рішення, не використовуючи його.
Приклади:
Не всі еквівалентні можливості виводу показані
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]]