tło
Parzystości permutacji , jak określono Wikipedia , jest następujący:
Znak lub podpis permutacji σ jest oznaczony sgn (σ) i zdefiniowany jako +1, jeśli σ jest parzyste, a -1, jeśli σ jest nieparzyste.
Znak permutacji można jawnie wyrazić jako
sgn (σ) = (−1) ^ N (σ)
gdzie N (σ) to liczba inwersji w σ.
Alternatywnie znak permutacji σ można zdefiniować od jego rozkładu do iloczynu transpozycji jako
sgn (σ) = (−1) ^ m
gdzie m jest liczbą transpozycji w rozkładzie.
Dla tych z was, którzy nie lubią zupy greckiego alfabetu w swojej matematyce, postaram się nieco uprościć definicję na przykładzie (również skradzionym z wikipedii).
Przykład
Rozważmy układ wejściowy {1, 2, 3, 4, 5}
i permutacji nim, powiedzmy {3, 4, 5, 2, 1}
. Aby przejść z oryginalnej tablicy do jej permutacji, musisz zamienić indeksy 0
oraz 2
, 1
a 3
następnie 2
i 4
. Chociaż nie jest to unikalne rozwiązanie, parzystość jest dobrze zdefiniowana, więc działa to we wszystkich przypadkach.
Ponieważ wymaga 3 zamian, oznaczamy tę permutację odd
parzystością. Jak można się spodziewać, mówi się, że permutacja wymagająca parzystej liczby zamian ma even
parzystość.
Wyzwanie
Wyzwaniem jest napisanie programu w jak najmniejszej liczbie bajtów, aby określić parzystość permutacji. Twój program lub funkcja musi:
- Zaakceptuj jako argumenty dwie tablice wejściowe (lub łańcuchy) reprezentujące zestaw przed i po permutacji.
- Zwróć lub wydrukuj znak
e
parzysty lubo
nieparzysty, biorąc pod uwagę permutację. - Należy założyć, że wszystkie indeksy w tablicach lub ciągach mają unikalne wartości.
Przypadki testowe
Zakładając, że zadeklarowałeś funkcję o nazwie f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
To jest golf golfowy , wygrywa najkrótszy program w bajtach!
[10], [10] -> e
(zero transpozycji). [10 30 20], [30 20 10] -> e
(dwie transpozycje). [10 30 20 40], [30 20 40 10] -> o
(trzy transpozycje)