Permutacja rozmiaru n to zmiana kolejności pierwszych n dodatnich liczb całkowitych. (co oznacza, że każda liczba całkowita pojawia się raz i dokładnie raz). Permutacje można traktować jak funkcje, które zmieniają kolejność listy elementów o rozmiarze n . Na przykład
(4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"]
W ten sposób permutacje można składać jak funkcje.
(4 1 2 3)(2 1 3 4) = (4 2 1 3)
Daje to wiele interesujących właściwości. Dziś koncentrujemy się na odrodzeniu . Permutacje y i x (oba o rozmiarze n ) są koniugatami iff istnieją permutacje g i g -1 (również o rozmiarze n ), takie że
x = gyg-1
a gg -1 jest równe permutacji tożsamości (pierwsze n liczb we właściwej kolejności).
Twoim zadaniem jest wziąć dwie permutacje tego samego rozmiaru za pomocą standardowych metod wprowadzania i zdecydować, czy są one sprzężone. Powinieneś wypisać jedną z dwóch spójnych wartości, jedną, jeśli są one sprzężone, a drugą, jeśli nie są.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Istnieje wiele twierdzeń na temat permutacji sprzężonych, które są do Państwa dyspozycji, więc powodzenia i szczęśliwego grania w golfa.
Możesz wziąć dane wejściowe jako uporządkowany kontener wartości (1-n lub 0-n) reprezentujący permutację jak powyżej lub jako funkcję, która bierze uporządkowany kontener i wykonuje permutację. Jeśli wybierzesz funkcję, powinieneś wziąć ją jako argument, a nie mieć jej z góry określoną nazwę.
Przypadki testowe
(1) (1) -> True
(1 2) (2 1) -> False
(2 1) (2 1) -> True
(4 1 3 2) (4 2 1 3) -> True
(3 2 1 4) (4 3 2 1) -> False
(2 1 3 4 5 7 6) (1 3 2 5 4 6 7) -> True
źródło
Odpowiedzi:
Python 2 , 87 bajtów
Wypróbuj online!
Pobiera dane wejściowe
P
jako parę obu permutacji ik
ich długości. Wyjścia1
dla koniugatów i0
nie.Wykorzystuje to wynik:
Dwie permutacje sprzężone spełniają to, ponieważ ich k- te moce również są sprzężone, a sprzężenie zachowuje liczbę stałych punktów.
Mniej oczywiste jest, że dowolne dwie niesprzężone kombinacje zawsze się różnią. W szczególności koniugacja jest określona przez posortowaną listę długości cykli, które można odzyskać z liczby punktów stałych. Jednym ze sposobów na wykazanie tego jest algebra liniowa, choć może to być przesada.
Niech X będzie macierzą permutacji dla x . Następnie liczba stałych punktów x k wynosi Tr (X k ) . Te ślady to suma mocy symetryczne wielomiany o wartości własnych X k z wielości. Te wielomiany dla k od 0 do n pozwalają odzyskać odpowiednie elementarne symetryczne wielomiany tych wartości własnych, a zatem charakterystyczny wielomian, a więc same wartości własne.
Ponieważ te wartości własne są pierwiastkami jedności odpowiadającymi cyklom x , z nich możemy odzyskać rozmiary cykli i ich wielokrotności. Zatem nasz „podpis” identyfikuje permutację aż do koniugacji.
źródło
J ,
25 bajtów23 bajty16 bajtówmilczące rozwiązanie mil :
Wyraźne rozwiązanie PO:
To sprawdza, czy permutacje xiy mają ten sam typ cyklu, przy użyciu wbudowanej
C.
funkcji do tworzenia reprezentacji cyklu.źródło
-:&([:/:~#&>)&C.
za pomocą milczącego formularza. Oto link TIO, aby go wypróbować.c=:
MATL ,
20191716 bajtówDane wejściowe: dwa wektory kolumnowe (wykorzystujące
;
jako separator). Wyjście:1
jeśli koniugat,0
jeśli nie.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Żadnych twierdzeń o permutacjach (z czystej ignorancji); po prostu brutalna siła i te dwa fakty:
Dla dwóch permutacji p i q skład pq jest równoważny z użyciem p do zindeksowania elementów q .
Warunek x = gyg- 1 jest równoważny xg = gy .
Skomentowany kod:
źródło
Wolfram Language (Mathematica) , 44 bajty
Wypróbuj online!
Wolfram Language (Mathematica) , 44 bajty
Korzystanie z kodowania CP-1252, gdzie
±
jest jeden bajt.Wypróbuj online!
źródło
Galaretka , 11 bajtów
Wypróbuj online!
Jak to działa
źródło
y
indeksuje się do każdegog⁻¹
, a nie na odwrót. Zobacz przykład(4 1 2 3)(2 1 3 4) = (4 2 1 3)
. Z twoim podejściem wynikałoby to(1 4 2 3)
zamiast tego, ponieważ druga indeksuje się do pierwszej. Biorąc to pod uwagę, mam 12-bajtowe rozwiązanie, którego jeszcze nie zepsuje. :-)Œ!©Ụ€⁹ịЀ®ị"⁸e
(w zasadzie wszystkie indeksowanie z odwrotnymi argumentami), z wyjątkiem krótszych po dokonaniu poważnych modyfikacji. Nie sądzę, żeg⁻¹yg
jest taki sam jakgyg⁻¹
. Myślę też, że twoja odpowiedź może skorzystać z tych modyfikacji, ale, jak powiedziałem wcześniej, nie chcę jeszcze zepsuć zabawy.x = g⁻¹yg
, po czymgxg⁻¹ = y
, takx
iy
są koniugaty.eŒ!ị"Ụị@¥€¥¥
Łuska , 9 bajtów
Zwraca
1
dla koniugatu i0
dla niesprzężonego. Wypróbuj online!Wyjaśnienie
Klasa sprzężoności permutacji P o L = [1,2, .., n] jest ustalana przez MultiSet zawierającej najmniej okres każdy numer L pod P . Gdy P jest wykonane w formie listy, mogę wymienić L z P i uzyskać ten sam MultiSet. Program oblicza odpowiedni multiset dla każdego wejścia i sprawdza, czy jeden jest sub-multiset drugiego. Ponieważ mają tę samą liczbę elementów, jest to równoważne z byciem tym samym multiset.
źródło
Perl,
615857 bajtówObejmuje
+2
dlaap
Daj permutacje oparte na 0 jako 2 linie na STDIN
Algorytm jest niewielką odmianą tej w rozwiązaniu xnor
Ta starsza wersja kodu uderza błąd perla i zrzuca rdzeń dla kilku danych wejściowych mojego najnowszego perla
5.26.1
, ale działa na starszym perlu5.16.3
.Jest to prawdopodobnie kolejny przykład mojego starego wroga perlgolfa, fakt, że perl nie przelicza prawidłowo swojego stacka.
źródło
JavaScript (ES6),
6664 bajtówJeśli poprawnie odczytałem inne odpowiedzi, problem jest równoważny zliczaniu okresów wszystkich elementów i sprawdzaniu, czy dwie listy mają tę samą liczbę każdego okresu. Edycja: Zapisano 1 bajt dzięki @Arnauld, obliczając jeden mniej niż okres. Oszczędność kolejnego bajtu dzięki @Arnauld poprzez nadużywanie dziwnych reguł przymusu JavaScript do porównywania tablic. Kolejny bajt można uratować dzięki curry, ale nie lubię curry, chyba że jest to kurczak tikka masala.
źródło