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 0und 2, 1und 3, dann 2und 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 oddParität. Wie zu erwarten ist, hat eine Permutation, die eine gerade Anzahl von Swaps erfordert, eine evenParitä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
efür gerade oderoungerade 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)