sfondo
La parità di una permutazione , come definita da Wikipedia , è la seguente:
Il segno o la firma di una permutazione σ è indicato con sgn (σ) e definito come +1 se σ è pari e −1 se σ è dispari.
Il segno di una permutazione può essere esplicitamente espresso come
sgn (σ) = (−1) ^ N (σ)
dove N (σ) è il numero di inversioni in σ.
In alternativa, il segno di una permutazione σ può essere definito dalla sua decomposizione nel prodotto di trasposizioni come
sgn (σ) = (−1) ^ m
dove m è il numero di trasposizioni nella decomposizione.
Per quelli di voi che non amano la zuppa di alfabeto greco in matematica, cercherò di semplificare un po 'la definizione con un esempio (anche rubato da Wikipedia).
Esempio
Si consideri la matrice di ingresso {1, 2, 3, 4, 5}
, e una permutazione di esso, diciamo, {3, 4, 5, 2, 1}
. Per passare dall'array originale alla sua permutazione, è necessario scambiare gli indici 0
e 2
, 1
e 3
, quindi 2
e 4
. Sebbene questa non sia una soluzione unica, la parità è ben definita, quindi funziona per tutti i casi.
Poiché richiede 3 swap, etichettiamo questa permutazione con una odd
parità. Come ci si potrebbe aspettare, si dice che una permutazione che richiede una quantità pari di swap abbia una even
parità.
Sfida
La tua sfida è scrivere un programma nel minor numero di byte possibile per determinare la parità di una permutazione. Il tuo programma o funzione deve:
- Accetta come argomenti due array di input (o stringhe) che rappresentano un set prima e dopo una permutazione.
- Restituisce o stampa il carattere
e
per pari oo
dispari, data la permutazione. - Dovrebbe presumere che tutti gli indici nelle matrici o nelle stringhe abbiano valori univoci.
Casi test
Supponendo di aver dichiarato una funzione denominata f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Questo è code-golf , vince il programma più breve in byte!
[10], [10] -> e
(zero trasposizioni). [10 30 20], [30 20 10] -> e
(due trasposizioni). [10 30 20 40], [30 20 40 10] -> o
(tre trasposizioni)