Étant donné deux permutations sous forme de cycle disjoint, sortez leur produit / composition sous forme de cycle disjoint.
Pour trouver la composition, convertissez les cycles disjoints en permutations en notation à deux lignes. Chaque numéro d'une partie disjointe d'un cycle est mappé sur le numéro qui le suit dans la même partie. Il s'enroule. Alors 1 -> 5
, 5 -> 1
, 2 -> 4
, 4 -> 2
. Si un nombre n'est pas trouvé 3 -> 3
, il est mappé sur lui-même. Le premier cycle disjoint pourrait également être écrit (1 5)(2 4)(3)
. Ces mappages sont convertis en deux lignes, comme ceci (notez que l'ordre de P et Q sont inversés):
[Le] produit de deux permutations est obtenu en réorganisant les colonnes de la deuxième permutation (la plus à gauche) de sorte que sa première ligne soit identique à la deuxième ligne de la première permutation (la plus à droite). Le produit peut alors être écrit comme la première ligne de la première permutation sur la deuxième ligne de la deuxième permutation modifiée.
Règles:
- L'entrée sera donnée sous la forme d'une liste de listes ou d'un format similaire
- Vous ne pouvez pas prendre quelque chose comme
(1 5)(2 4)
as[5, 4, 3, 2, 1]
, déjà sous forme de deux lignes (mappage de l'index à la valeur) - Tous les nombres ne doivent pas nécessairement se produire dans chaque groupe, vous pourriez donc avoir
(1 5)·(1 2)
, ce qui entraînerait(2 5 1)
. - Votre sortie doit pouvoir être utilisée comme entrée.
- Vous n'avez pas besoin de prendre en charge la saisie avec un cycle vide
(1 5)·()
. Ce serait plutôt donné comme(1 5)·(1)
ou quelque chose d'équivalent. - Étant donné que les cycles se déroulent, l'ordre n'a pas d'importance tant que le résultat est correct.
- Vous pouvez commencer à zéro ou à un. Ce n'est pas grave, car les résultats sont les mêmes.
- Les nombres peuvent être supérieurs à
9
. - Vous ne pouvez pas inclure le même nombre plus d'une fois dans la sortie. Ce
[[1],[1]]
n'est donc pas permis. - Notez que cette opération n'est pas commutative ! J'ai mis Q avant P, parce que c'est ce que Wikipedia a fait. Vous pouvez choisir n'importe quelle commande, mais spécifiez laquelle si elle est différente.
- Victoires de code les plus courtes
- Les fonctions intégrées sont autorisées, mais si vous en utilisez une, montrez une solution sans l'utiliser également.
Exemples:
Toutes les possibilités de sortie équivalentes ne sont pas affichées
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]]