Une permutation de taille n est une réorganisation des n premiers entiers positifs. (ce qui signifie que chaque entier apparaît une fois et exactement une fois). Les permutations peuvent être traitées comme des fonctions qui modifient l'ordre d'une liste d'éléments de taille n . Par exemple
(4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"]
Ainsi les permutations peuvent être composées comme des fonctions.
(4 1 2 3)(2 1 3 4) = (4 2 1 3)
Cela apporte beaucoup de propriétés intéressantes. Aujourd'hui, nous nous concentrons sur la conjugaison . Les permutations y et x (toutes deux de taille n ) sont conjuguées ssi il y a des permutations g et g -1 (également de taille n ) telles que
x = gyg-1
et gg -1 est égal à la permutation d'identité (les n premiers nombres dans le bon ordre).
Votre tâche consiste à prendre deux permutations de la même taille via des méthodes d'entrée standard et de décider si elles sont conjuguées. Vous devez sortir l'une des deux valeurs cohérentes, une si elles sont conjuguées et l'autre si elles ne le sont pas.
Il s'agit de code-golf, donc les réponses seront notées en octets, moins d'octets seront meilleurs.
Il y a beaucoup de théorèmes sur les permutations conjuguées qui sont à votre disposition, alors bonne chance et bon golf.
Vous pouvez prendre l'entrée comme un conteneur ordonné de valeurs (soit 1-n ou 0-n) représentant la permutation comme ci-dessus, ou comme une fonction qui prend un conteneur ordonné et effectue la permutation. Si vous choisissez de prendre la fonction, vous devez la prendre comme argument plutôt que de l'avoir sous un nom prédéfini.
Cas de test
(1) (1) -> True
(1 2) (2 1) -> False
(2 1) (2 1) -> True
(4 1 3 2) (4 2 1 3) -> True
(3 2 1 4) (4 3 2 1) -> False
(2 1 3 4 5 7 6) (1 3 2 5 4 6 7) -> True
la source
Réponses:
Python 2 , 87 octets
Essayez-le en ligne!
Prend l'entrée avec
P
une paire des deux permutations etk
leur longueur. Sorties1
pour conjugués et0
non.Cela utilise le résultat:
Deux permutations conjuguées satisfont à cela car leurs k -èmes pouvoirs sont également conjugués, et la conjugaison préserve le nombre de points fixes.
Il est moins évident que deux permutations non conjuguées diffèrent toujours. En particulier, la conjugaison est déterminée par la liste triée des longueurs de cycle, et celles-ci peuvent être récupérées à partir des comptes de points fixes. Une façon de le montrer est l'algèbre linéaire, même si cela peut être exagéré.
Soit X la matrice de permutation de x . Alors, le nombre de points fixes de x k est Tr (X k ) . Ces traces sont les polynômes symétriques somme des puissances des valeurs propres de X k avec multiplicité. Ces polynômes pour k de 0 à n permettent de récupérer les polynômes élémentaires symétriques correspondants de ces valeurs propres, et donc le polynôme caractéristique et donc les valeurs propres elles-mêmes.
Puisque ces valeurs propres sont des racines d'unité correspondant aux cycles de x , nous pouvons récupérer les tailles de cycle et leurs multiplicités. Ainsi, notre "signature" identifie la permutation jusqu'à la conjugaison.
la source
J ,
25 octets23 octets16 octetssolution tacite de miles :
Solution explicite d'OP:
Cela vérifie si les permutations x et y ont le même type de cycle, en utilisant la
C.
fonction intégrée pour produire des représentations de cycle.la source
-:&([:/:~#&>)&C.
en utilisant un formulaire tacite. Voici un lien TIO pour l'essayer.c=:
MATL ,
20191716 octetsEntrée: deux vecteurs de colonne (en utilisant
;
comme séparateur). Sortie:1
si conjugué,0
sinon.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Aucun théorème sur les permutations utilisé (par pure ignorance); juste la force brute et ces deux faits:
Pour deux permutations p et q , la composition pq équivaut à utiliser p pour indexer les éléments de q .
La condition x = gyg −1 est équivalente à xg = gy .
Code commenté:
la source
Wolfram Language (Mathematica) , 44 octets
Essayez-le en ligne!
Wolfram Language (Mathematica) , 44 octets
Utilisation du codage CP-1252, où
±
est un octet.Essayez-le en ligne!
la source
Gelée , 11 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
y
qui indexe dans chacung⁻¹
, et non l'inverse. Voir l'exemple(4 1 2 3)(2 1 3 4) = (4 2 1 3)
,. Avec votre approche, il en résulterait(1 4 2 3)
plutôt, puisque le second indexe dans le premier. En tenant compte de cela, j'ai une solution de 12 octets que je ne gâcherai pas encore. :-)Œ!©Ụ€⁹ịЀ®ị"⁸e
(essentiellement toute l'indexation avec des arguments inversés), sauf plus courte après avoir fait des modifications majeures. Je ne pense pas que ceg⁻¹yg
soit la même chose quegyg⁻¹
. De plus, je pense que votre réponse peut également bénéficier de ces modifications, mais, comme je l'ai déjà dit, je ne veux pas encore gâcher le plaisir.x = g⁻¹yg
, alorsgxg⁻¹ = y
, alorsx
ety
sont conjugués.eŒ!ị"Ụị@¥€¥¥
Coque , 9 octets
Renvoie
1
pour conjugué et0
pour non-conjugué. Essayez-le en ligne!Explication
La classe de conjugaison d'une permutation P de L = [1,2, .., n] est déterminé par le multiset contenant le moins de chaque période en nombre L sous P . Lorsque P est pris sous forme de liste, je peux remplacer L par P et obtenir le même multiset. Le programme calcule le multiset correspondant pour chaque entrée et vérifie si l'un est un sous-multiset de l'autre. Puisqu'ils ont le même nombre d'éléments, cela équivaut à être le même multiset.
la source
Perl,
615857 octetsComprend
+2
pourap
Donner des permutations basées sur 0 sous forme de 2 lignes sur STDIN
L'algorithme est une variation mineure de celui de la solution de xnor
Cette ancienne version du code frappe un bogue Perl et vide le noyau pour plusieurs entrées sur mon dernier Perl
5.26.1
, mais cela fonctionne sur un Perl plus ancien5.16.3
.C'est peut-être encore une autre instance de mon ancien ennemi de Perlgolf, le fait que Perl ne recompte pas correctement sa pile.
la source
JavaScript (ES6),
6664 octetsSi j'ai bien lu les autres réponses, le problème revient à compter les périodes de tous les éléments et à vérifier que les deux listes ont le même nombre de chaque période. Edit: sauvé 1 octet grâce à @Arnauld en calculant un de moins que la période. Enregistrement d'un autre octet grâce à @Arnauld en abusant des règles de coercition étranges de JavaScript pour comparer les tableaux. Un autre octet pourrait être sauvé par le curry mais je n'aime pas le curry à moins que ce soit du poulet tikka masala.
la source