Dadas duas permutações na forma de ciclo separado, produza seu produto / composição na forma de ciclo separado.
Para encontrar a composição, converta os ciclos disjuntos em permutações em notação de duas linhas. Cada número em uma parte separada de um ciclo é mapeado para o número seguinte na mesma parte. Envolve. Assim 1 -> 5
, 5 -> 1
, 2 -> 4
, 4 -> 2
. Se um número não for encontrado 3 -> 3
, ele será mapeado para si mesmo. O primeiro ciclo separado também pode ser escrito (1 5)(2 4)(3)
. Esses mapeamentos são convertidos em duas linhas, assim (observe que a ordem de P e Q é invertida):
[O] produto de duas permutações é obtido reorganizando as colunas da segunda permutação (mais à esquerda), de modo que sua primeira linha seja idêntica à segunda linha da primeira permutação (à direita). O produto pode então ser escrito como a primeira linha da primeira permutação sobre a segunda linha da segunda permutação modificada.
Regras:
- A entrada será fornecida como uma lista de listas ou formato semelhante
- Você não pode levar algo
(1 5)(2 4)
como[5, 4, 3, 2, 1]
, já em forma de duas linhas (índice de mapeamento para valor) - Nem todos os números precisam ocorrer em cada grupo; portanto, você pode ter
(1 5)·(1 2)
, resultando em(2 5 1)
. - Sua saída deve poder ser usada como sua entrada.
- Você não precisa dar suporte à entrada com um ciclo vazio
(1 5)·()
. Em vez disso, isso seria dado como(1 5)·(1)
ou algo equivalente. - Como os ciclos são concluídos, o pedido não importa, desde que o resultado esteja correto.
- Você pode começar em zero ou um. Não importa, porque os resultados são os mesmos.
- Os números podem ser maiores que
9
. - Você não pode incluir o mesmo número mais de uma vez na saída. Então
[[1],[1]]
não é permitido. - Observe que esta operação não é comutativa ! Coloquei Q antes de P, porque foi o que a Wikipedia fez. Você pode escolher qualquer ordem, mas especifique qual é a diferença.
- O código mais curto vence
- Os internos são permitidos, mas se você usar um, mostre uma solução sem usá-la também.
Exemplos:
Nem todas as possibilidades de saída equivalentes são mostradas
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]]