LA TAREA
Definiciones
Considere los puntos {1,2,3,4,5} y todas sus permutaciones. Podemos encontrar el número total de permutaciones posibles de estos 5 puntos con un simple truco: imágenes que llenan 5 espacios con estos puntos, el primer espacio tendrá 5 números posibles, el segundo 4 (como se ha usado uno para llenar el primer espacio) los terceros 3 y así sucesivamente. Por lo tanto, el número total de permutaciones es 5 * 4 * 3 * 2 * 1; esto sería 5! permutaciones o 120 permutaciones. Podemos pensar en esto como el grupo simétrico S5, y luego el grupo simétrico Sn tendría n! or (n*n-1*n-2...*1)
permutaciones.
Una permutación "par" es aquella en la que hay un número par de ciclos de longitud par. Es más fácil de entender cuando se escribe en notación cíclico, por ejemplo (1 2 3)(4 5)
permuta 1->2->3->1
y 4->5->4
y tiene un ciclo de 3 longitud (1 2 3)
y un ciclo de 2 longitud (4 5)
. Al clasificar una permutación como impar o par, ignoramos los ciclos de longitud impar y decimos que esta permutación [ (1 2 3)(4 5)
] es impar ya que tiene un número impar {1} de ciclos de longitud par. Incluso ejemplos:
(1)(2 3)(4 5)
= dos ciclos de 2 longitudes | INCLUSO |(1 2 3 4 5)
= sin ciclos de longitud par | INCLUSO | * tenga en cuenta que si no hay ciclos de longitud par, entonces la permutación es par.
Extraños ejemplos:
(1 2)(3 4 5)
= un ciclo de 2 longitudes | ODD |(1)(2 3 4 5)
= un ciclo de 4 longitudes | ODD |
Como exactamente la mitad de las permutaciones en cualquier grupo simétrico son pares, podemos llamar al grupo par el grupo alterno N, de modo que S5 = 120 A5 = 60 permutaciones.
NOTACIÓN
Las permutaciones deben, al menos para esto, escribirse en notación cíclica donde cada ciclo está en paréntesis diferente y cada ciclo va en orden ascendente. Por ejemplo (1 2 3 4 5)
no (3 4 5 1 2)
. Y para los ciclos con un solo número, como: (1)(2 3 4)(5)
los puntos únicos / fijos pueden excluirse del significado (1)(2 3 4)(5) = (2 3 4)
. Pero la identidad {el punto donde se fijan todos los puntos (1)(2)(3)(4)(5)
} debe escribirse ()
solo para representarla.
EL RETO
Me gustaría que, en el menor código posible, tome cualquier número entero positivo como entrada {1,2,3,4 ...} y muestre todas las permutaciones del Grupo Alternador An donde n es la entrada / todo el par permutaciones de Sn. Por ejemplo:
Input = 3
()
(1 2 3)
(1 3 2)
y
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)
Y al igual que en los ejemplos, me gustaría que se elidieran todos los ciclos de una longitud, y en cuanto a la identidad: salidas de nada,
()
{no solo corchetes sino con lo que sea que esté usando para mostrar diferentes permutaciones} o id
sean aceptables.
LECTURA EXTRA
Puedes encontrar más información aquí:
BUENA SUERTE
Y como se trata de codegolf, cualquiera que pueda imprimir las permutaciones del Grupo An alternado en los bytes más cortos gana.
(2 3 1 4)
en orden ascendente? ¿Quiere decir que deberíamos poner el elemento más pequeño al frente?
(2 3 1 4)
que 2->3->1->4->2
también se puede escribir (1 4 2 3)
con su elemento más pequeño primero
[[1, 2], [3, 4]]
lugar de(1 2)(3 4)
?