Учитывая две перестановки в форме непересекающегося цикла, выведите их произведение / композицию в форме непересекающегося цикла.
Чтобы найти композицию, преобразуйте непересекающиеся циклы в перестановки в двухстрочной записи. Каждое число в непересекающейся части цикла отображается на число, следующее за ним в той же части. Это оборачивается. Так 1 -> 5
, 5 -> 1
, 2 -> 4
, 4 -> 2
. Если число не найдено 3 -> 3
, оно отображается на себя. Первый непересекающийся цикл также может быть записан (1 5)(2 4)(3)
. Эти отображения преобразуются в две строки, например, так (обратите внимание, что порядок P и Q поменялся местами):
[T] произведение двух перестановок получается путем перестановки столбцов второй (самой левой) перестановки так, чтобы ее первая строка совпадала со второй строкой первой (самой правой) перестановки. Затем произведение может быть записано как первая строка первой перестановки над второй строкой модифицированной второй перестановки.
Правила:
- Ввод будет предоставлен в виде списка списков или аналогичного формата
- Вы не можете принимать что-то вроде
(1 5)(2 4)
as[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]]