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 0oraz 2, 1a 3następnie 2i 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ę oddparzystością. Jak można się spodziewać, mówi się, że permutacja wymagająca parzystej liczby zamian ma evenparzystość.
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
eparzysty lubonieparzysty, 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)