A TAREFA
DEFINIÇÕES
Considere os pontos {1,2,3,4,5} e todas as suas permutações. Podemos encontrar o número total de permutações possíveis desses 5 pontos com um truque simples: Criação de imagens preenchendo 5 slots com esses pontos, o primeiro slot terá 5 números possíveis, o segundo 4 (como um foi usado para preencher o primeiro slot) o terceiro 3 e assim por diante. Assim, o número total de permutações é 5 * 4 * 3 * 2 * 1; isso seria 5! permutações ou 120 permutações. Podemos pensar nisso como o grupo simétrico S5, e então o grupo simétrico Sn teria n! or (n*n-1*n-2...*1)
permutações.
Uma permutação "par" é aquela em que existe um número par de ciclos de comprimento par. É mais fácil de compreender quando escrito em notação cíclico, por exemplo, (1 2 3)(4 5)
permuta-se 1->2->3->1
e 4->5->4
e tem um ciclo de 3 comprimento (1 2 3)
e um ciclo de 2 comprimento (4 5)
. Ao classificar uma permutação como ímpar ou par, ignoramos os ciclos de comprimento ímpares e dizemos que essa permutação [ (1 2 3)(4 5)
] é ímpar, pois possui um número ímpar {1} de ciclos de comprimento par. Mesmo exemplos:
(1)(2 3)(4 5)
= dois ciclos de 2 comprimentos | MESMO |(1 2 3 4 5)
= sem ciclos de comprimento uniforme | MESMO | * observe que, se não houver ciclos de comprimento iguais, a permutação será uniforme.
Exemplos ímpares:
(1 2)(3 4 5)
= um ciclo de 2 comprimentos | ODD(1)(2 3 4 5)
= um ciclo de 4 comprimentos | ODD
Como exatamente metade das permutações em qualquer grupo simétrico são iguais, podemos chamar o grupo par de Grupo Alternativo N, assim como S5 = 120 A5 = 60 permutações.
NOTAÇÃO
As permutações devem, pelo menos para isso, ser escritas em notação cíclica, onde cada ciclo está entre parênteses diferentes e cada ciclo segue em ordem crescente. Por exemplo, (1 2 3 4 5)
não (3 4 5 1 2)
. E para ciclos com um único número, como: (1)(2 3 4)(5)
os pontos únicos / fixos podem ser excluídos (1)(2 3 4)(5) = (2 3 4)
. Mas a identidade {o ponto em que todos os pontos são fixos (1)(2)(3)(4)(5)
} deve ser escrita como ()
apenas para representá-la.
O DESAFIO
Gostaria que você, no menor código possível, pegue qualquer número inteiro positivo como entrada {1,2,3,4 ...} e exiba todas as permutações do Grupo Alternativo An onde n é a entrada / todos os pares permutações de Sn. Por exemplo:
Input = 3
()
(1 2 3)
(1 3 2)
e
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)
E, como nos exemplos, eu gostaria que todos os ciclos de um comprimento fossem eliminados, e quanto à identidade: saídas de nada,
()
{não apenas entre parênteses, mas com o que você estiver usando para mostrar permutações diferentes} ou id
seja aceitável.
LEITURA EXTRA
Você pode encontrar mais informações aqui:
BOA SORTE
E como esse é o codegolf, quem pode imprimir as permutações do Alternating Group An nos bytes mais curtos ganha.
(2 3 1 4)
em ordem crescente? Você quer dizer que devemos colocar o menor elemento na frente?
(2 3 1 4)
que 2->3->1->4->2
ele pode ser escrito (1 4 2 3)
com o seu elemento mais pequeno primeiro
[[1, 2], [3, 4]]
vez de(1 2)(3 4)
?