ZADANIE
DEFINICJE
Rozważ punkty {1,2,3,4,5} i wszystkie ich permutacje. Możemy znaleźć całkowitą liczbę możliwych permutacji tych 5 punktów za pomocą prostej sztuczki: Obrazowanie wypełnia 5 miejsc tymi punktami, pierwsze miejsce będzie miało 5 możliwych liczb, drugie 4 (ponieważ jeden został użyty do wypełnienia pierwszego miejsca) trzecia 3 i tak dalej. Zatem całkowita liczba permutacji wynosi 5 * 4 * 3 * 2 * 1; to byłoby 5! permutacje lub 120 permutacji. Możemy myśleć o tym jako o symetrycznej grupie S5, a wtedy Symmetric Group Sn miałaby n! or (n*n-1*n-2...*1)
permutacje.
Permutacja „parzysta” to taka, w której występuje parzysta liczba cykli długości parzystej. Najłatwiej jest zrozumieć, kiedy napisany w notacji cyklicznej, na przykład (1 2 3)(4 5)
permutacji 1->2->3->1
i 4->5->4
i ma jeden cykl 3 długości (1 2 3)
i jeden cykl 2 długości (4 5)
. Podczas klasyfikowania permutacji jako nieparzystej lub nawet ignorujemy cykle nieparzystej długości i mówimy, że ta permutacja [ (1 2 3)(4 5)
] jest nieparzysta, ponieważ ma nieparzystą liczbę {1} cykli o parzystej długości. Nawet przykłady:
(1)(2 3)(4 5)
= dwa 2 długości cyklu | NAWET |(1 2 3 4 5)
= brak równych cykli długości | NAWET | * zauważ, że jeśli nie występują parzyste cykle długości, to permutacja jest parzysta.
Dziwne przykłady:
(1 2)(3 4 5)
= jeden 2 cykl długości | ODD |(1)(2 3 4 5)
= jeden 4 cykl długości | ODD |
Jako że dokładnie połowa permutacji w dowolnej grupie symetrycznej jest parzysta, możemy nazwać grupę parzystą przemienną grupą N, więc jako S5 = 120 A5 = 60 permutacji.
NOTACJA
Permutacje powinny, przynajmniej w tym celu, być zapisywane w notacji cyklicznej, gdzie każdy cykl jest w innym nawiasie, a każdy cykl idzie w porządku rosnącym. Na przykład (1 2 3 4 5)
nie (3 4 5 1 2)
. A w przypadku cykli z jedną liczbą, takich jak: (1)(2 3 4)(5)
pojedyncze / stałe punkty można wykluczyć (1)(2 3 4)(5) = (2 3 4)
. Ale tożsamość {punkt, w którym wszystkie punkty są ustalone (1)(2)(3)(4)(5)
} powinna być zapisana ()
tylko jako reprezentacja.
WYZWANIE
Chciałbym, abyś w jak najmniejszym kodzie mógł przyjąć dowolną liczbę całkowitą dodatnią jako dane wejściowe {1,2,3,4 ...} i wyświetlić wszystkie permutacje na przemian z grupą An, gdzie n jest wartością wejściową / wszystkie parzyste permutacje Sn. Na przykład:
Input = 3
()
(1 2 3)
(1 3 2)
i
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)
I tak jak w przykładach, chciałbym, aby wszystkie cykle jednej długości były pomijane, a co do tożsamości: wyjścia nic,
()
{nie tylko nawiasów, ale z tym, czego używasz do pokazania różnych permutacji} lub id
są dopuszczalne.
DODATKOWE CZYTANIE
Więcej informacji znajdziesz tutaj:
POWODZENIA
A ponieważ jest to codegolf, wygrywa ten, kto może wydrukować permutacje Alternating Group An w najkrótszych bajtach.
(2 3 1 4)
w porządku rosnącym? Masz na myśli, że powinniśmy po prostu umieścić najmniejszy element z przodu?
(2 3 1 4)
nie 2->3->1->4->2
może być napisany (1 4 2 3)
pierwszy z jego najmniejszy element
[[1, 2], [3, 4]]
zamiast(1 2)(3 4)
?