LA TÂCHE
DÉFINITIONS
Considérez les points {1,2,3,4,5} et toutes leurs permutations. On peut trouver le nombre total de permutations possibles de ces 5 points par une simple astuce: Imaging remplissant 5 slots avec ces points, le premier slot aura 5 nombres possibles, le second 4 (comme on a été utilisé pour remplir le premier slot) le troisième 3 et ainsi de suite. Ainsi, le nombre total de permutations est de 5 * 4 * 3 * 2 * 1; ce serait 5! permutations ou 120 permutations. Nous pouvons penser à cela comme le groupe symétrique S5, puis le groupe symétrique Sn aurait des n! or (n*n-1*n-2...*1)
permutations.
Une permutation "paire" est celle où il y a un nombre pair de cycles de longueur paire. Il est plus facile à comprendre lorsqu'il est écrit en notation cyclique, par exemple (1 2 3)(4 5)
permute 1->2->3->1
et 4->5->4
et a un cycle de 3 longueur (1 2 3)
et un cycle 2 de longueur (4 5)
. Lorsque nous classons une permutation comme impaire ou paire, nous ignorons les cycles de longueur impaires et disons que cette permutation [ (1 2 3)(4 5)
] est impaire car elle a un nombre impair {1} de cycles de longueur paire. Même exemples:
(1)(2 3)(4 5)
= deux cycles de 2 longueurs | MÊME |(1 2 3 4 5)
= pas de cycles de longueur pairs | MÊME | * notez que si aucun cycle de longueur paire n'est présent, alors la permutation est paire.
Exemples étranges:
(1 2)(3 4 5)
= un cycle de 2 longueurs | ODD |(1)(2 3 4 5)
= un cycle de 4 longueurs | ODD |
Comme exactement la moitié des permutations dans un groupe symétrique sont paires, nous pouvons appeler le groupe pair le groupe alternatif N, de sorte que S5 = 120 A5 = 60 permutations.
NOTATION
Les permutations doivent, au moins pour cela, être écrites en notation cyclique où chaque cycle est entre parenthèses différentes et chaque cycle va dans l'ordre croissant. Par exemple (1 2 3 4 5)
non (3 4 5 1 2)
. Et pour les cycles avec un seul numéro, tels que: (1)(2 3 4)(5)
les points uniques / fixes peuvent être exclus, ce qui signifie (1)(2 3 4)(5) = (2 3 4)
. Mais l'identité {le point où tous les points sont fixes (1)(2)(3)(4)(5)
} doit être écrite comme ()
juste pour la représenter.
LE DÉFI
J'aimerais que vous, dans le moins de code possible, preniez n'importe quel entier positif comme entrée {1,2,3,4 ...} et affichez toutes les permutations du groupe alternatif An où n est l'entrée / tout le pair permutations de Sn. Par exemple:
Input = 3
()
(1 2 3)
(1 3 2)
et
Input = 4
()
(1 2)(3 4)
(1 3)(2 4)
(1 4)(2 3)
(1 2 3)
(1 3 2)
(1 2 4)
(1 4 2)
(1 3 4)
(1 4 3)
(2 3 4)
(2 4 3)
Et comme dans les exemples, je voudrais que tous les cycles d'une longueur soient élidés et que pour l'identité: sorties de rien,
()
{non seulement des crochets mais avec tout ce que vous utilisez pour afficher différentes permutations} ou id
sont acceptables.
LECTURE SUPPLÉMENTAIRE
Vous pouvez trouver plus d'informations ici:
BONNE CHANCE
Et comme il s'agit de codegolf, quiconque peut imprimer les permutations du groupe alternatif An dans les octets les plus courts gagne.
la source
[[1, 2], [3, 4]]
au lieu de(1 2)(3 4)
?(2 3 1 4)
en ordre croissant? Voulez-vous dire que nous devrions simplement mettre le plus petit élément à l'avant?(2 3 1 4)
même2->3->1->4->2
qu'il peut être écrit(1 4 2 3)
avec son plus petit élément en premierRéponses:
Pyth, 26 octets
Essayez-le en ligne
Cette solution est basée sur une bijection nette entre les permutations en notation d'une ligne et les permutations en notation de cycle. Bien sûr, il y a la bijection évidente où les deux notations représentent la même permutation:
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] = (1 8 9 2 4 3 6) (5 10 7)
mais cela prendrait trop de code. Au lieu de cela, coupez simplement la notation d'une ligne en morceaux avant tous les nombres plus petits que tous leurs prédécesseurs, appelez ces cycles de morceaux et construisez une nouvelle permutation à partir d'eux.
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] ↦ (8) (4 6) (3 10) (1 5 9 2 7)
Pour inverser cette bijection, nous pouvons prendre n'importe quelle permutation sous forme de cycle, faire pivoter chaque cycle de sorte que son plus petit nombre soit le premier, trier les cycles afin que leurs plus petits nombres apparaissent dans l'ordre décroissant et effacer toutes les parenthèses.
la source
id
. Peut-être qu'il pourrait sonner?Mathematica,
844931 octetsComposition de deux fonctions. Sorties sous la forme
{Cycles[{}], Cycles[{{a, b}}], Cycles[{{c, d}, {e, f}}], ...}
représentant(), (a b), (c d)(e f), ...
.la source
J , 53 octets
Les cycles de chaque permutation sont représentés sous forme de tableaux en boîte, car J mettra à zéro les tableaux en lambeaux.
Si la sortie est détendue, en utilisant 41 octets
où chaque permutation peut contenir un cycle et un cycle zéro.
Usage
Pour la mise en œuvre alternative,
la source
Gelée ,
3428 octetsEssayez-le ici .
Explication
Chaque ligne d'un programme Jelly définit une fonction; celui du bas est «
main
».La première ligne définit une fonction qui teste si un produit de cycle est impair.
La deuxième ligne normalise une partition d'une permutation de
[1…n]
en un produit de cycle comme suit:Cela se transformera par exemple
(4 3)(2 5 1)
en(1 2 5)(3 4)
.Voici le programme principal. Il prend un argument
n
de la ligne de commande et:la source
JavaScript (Firefox 30-57),
220218212 212211 octetsMalheureusement, 88 octets ne suffisent que pour générer le groupe alternatif sous forme de liste de permutations
a
, il me coûte donc132130124123 octets supplémentaires pour convertir la sortie au format souhaité:J'ai réussi à réduire ma version ES6 à
222216215 octets:la source
(1,2,3)(4,5)
- c'est une étrange permutation! Actuellement, je montrerais par exemple(1,2,3)(4)(5)
- non seulement la suppression des cycles de la première longueur me coûte 6 octets, mais je me retrouve avec un résultat vide pour le cycle d'identité qui me coûterait encore 4 octets à corriger.as for the identity outputs of nothing ... are accepatble
. Et aussi ce qui serait affiché si vous sortez vos "données brutes", cela vient-il sous la forme (1,2,3) (4) (5) ou autre chose?[1, 2, 0, 3, 4]
pour cet exemple particulier, donc loin de ce que vous voulez.GAP , 32 octets
Merci à @ChristianSievers d'avoir réduit de moitié le nombre.
Utilisation à l'invite:
la source
f:=n->List(AlternatingGroup(n));