Hintergrund
Die Parität einer Permutation , wie in Wikipedia definiert , ist wie folgt:
Das Vorzeichen oder die Signatur einer Permutation σ wird als sgn (σ) bezeichnet und als +1 definiert, wenn σ gerade ist, und -1, wenn σ ungerade ist.
Das Vorzeichen einer Permutation kann explizit ausgedrückt werden als
sgn (σ) = (−1) ^ N (σ)
wobei N (σ) die Anzahl der Inversionen in σ ist.
Alternativ kann das Vorzeichen einer Permutation σ aus ihrer Zerlegung in das Produkt der Transpositionen als definiert werden
sgn (σ) = (−1) ^ m
wobei m die Anzahl der Transpositionen bei der Zerlegung ist.
Für diejenigen von euch, die griechische Buchstabensuppe in ihrer Mathematik nicht mögen, werde ich versuchen, die Definition ein wenig mit einem Beispiel zu vereinfachen (auch aus Wikipedia gestohlen).
Beispiel
Betrachten wir das Eingabearray {1, 2, 3, 4, 5}
und eine Permutation davon {3, 4, 5, 2, 1}
. Um vom ursprünglichen Array zur Permutation zu gelangen, müssen Sie die Indizes 0
und 2
, 1
und 3
, dann 2
und vertauschen 4
. Obwohl dies keine eindeutige Lösung ist, ist die Parität genau definiert, sodass dies in allen Fällen funktioniert.
Da es 3 Swaps erfordert, kennzeichnen wir diese Permutation mit einer odd
Parität. Wie zu erwarten ist, hat eine Permutation, die eine gerade Anzahl von Swaps erfordert, eine even
Parität.
Herausforderung
Ihre Herausforderung besteht darin, ein Programm in möglichst wenigen Bytes zu schreiben, um die Parität einer Permutation zu bestimmen. Ihr Programm oder Ihre Funktion muss:
- Akzeptieren Sie als Argumente zwei Eingabearrays (oder Zeichenfolgen), die eine Menge vor und nach einer Permutation darstellen.
- Gibt das Zeichen
e
für gerade odero
ungerade zurück oder druckt es aus, wenn die Permutation gegeben ist. - Sollte davon ausgehen, dass alle Indizes in den Arrays oder Strings eindeutige Werte haben.
Testfälle
Angenommen, Sie haben eine Funktion mit dem Namen f
: deklariert.
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Das ist Code-Golf , das kürzeste Programm in Bytes gewinnt!
[10], [10] -> e
(keine Transpositionen). [10 30 20], [30 20 10] -> e
(zwei Transpositionen). [10 30 20 40], [30 20 40 10] -> o
(drei Transpositionen)