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->1i 4->5->4i 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 idsą 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->2może być napisany (1 4 2 3)pierwszy z jego najmniejszy element
[[1, 2], [3, 4]]zamiast(1 2)(3 4)?