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.
źródło
[[1, 2], [3, 4]]
zamiast(1 2)(3 4)
?(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)
nie2->3->1->4->2
może być napisany(1 4 2 3)
pierwszy z jego najmniejszy elementOdpowiedzi:
Pyth, 26 bajtów
Wypróbuj online
To rozwiązanie opiera się na zgrabnym bijectmie między permutacjami w notacji jednowierszowej a permutacjami w notacji cyklicznej. Oczywiście istnieje oczywisty bijection, w którym dwa zapisy reprezentują tę samą permutację:
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] = (1 8 9 2 4 3 6) (5 10 7)
ale to wymagałoby zbyt dużo kodu. Zamiast tego po prostu posiekaj notację jednowierszową na kawałki, zanim wszystkie liczby będą mniejsze niż wszystkie ich poprzedniki, nazwij te cykle i zbuduj z nich nową permutację.
[8, 4, 6, 3, 10, 1, 5, 9, 2, 7] ↦ (8) (4 6) (3 10) (1 5 9 2 7)
Aby odwrócić ten bijection, możemy przyjąć dowolną permutację w formie cyklu, obrócić każdy cykl, aby jego najmniejsza liczba była pierwsza, posortować cykle, aby ich najmniejsze liczby pojawiały się w malejącej kolejności, i usunąć wszystkie nawiasy.
źródło
id
. Może mógłby wejść?Mathematica,
844931 bajtówKompozycja dwóch funkcji. Dane wyjściowe w postaci
{Cycles[{}], Cycles[{{a, b}}], Cycles[{{c, d}, {e, f}}], ...}
reprezentującej(), (a b), (c d)(e f), ...
.źródło
J , 53 bajty
Cykle w każdej permutacji są reprezentowane jako tablice w ramkach, ponieważ J spowoduje zerowanie tablic obdartych.
Jeśli wyjście jest rozluźnione, używając 41 bajtów
gdzie każda permutacja może zawierać jeden cykl i zero cykli.
Stosowanie
Dla alternatywnej realizacji
źródło
Galaretka ,
3428 bajtówWypróbuj tutaj .
Wyjaśnienie
Każda linia w programie Jelly definiuje funkcję; dolny to „
main
”.Pierwszy wiersz definiuje funkcję, która sprawdza, czy iloczyn cyklu jest nieparzysty.
Drugi wiersz normalizuje podział permutacji
[1…n]
na produkt cyklu w następujący sposób:To zmieni np .
(4 3)(2 5 1)
W.(1 2 5)(3 4)
Oto główny program. Pobiera argument
n
z wiersza poleceń i:źródło
JavaScript (Firefox 30-57),
220218212211 bajtówNiestety 88 bajtów wystarczy, aby wygenerować przemienną grupę jako listę permutacji
a
, więc kosztuje mnie dodatkowe132130124123 bajty na konwersję danych wyjściowych do pożądanego formatu:Udało mi się przyciąć moją wersję ES6 do
222216215 bajtów:źródło
(1,2,3)(4,5)
- to dziwna permutacja! Obecnie pokazywałbym np.(1,2,3)(4)(5)
- nie tylko usunięcie cykli o długości jeden kosztowało mnie 6 bajtów, a następnie otrzymałem pusty wynik dla cyklu tożsamości, który kosztowałbym kolejne 4 bajty do naprawienia.as for the identity outputs of nothing ... are accepatble
. A także, co pokazano, jeśli wyprowadzasz swoje „surowe dane”, czy ma ono postać (1,2,3) (4) (5), czy może jest czymś innym?[1, 2, 0, 3, 4]
dla tego konkretnego przykładu, więc nigdzie w pobliżu, co chcesz.GAP , 32 bajty
Dzięki @ChristianSievers za zmniejszenie liczenia o połowę.
Zastosowanie w monicie:
źródło
f:=n->List(AlternatingGroup(n));