Antecedentes
La paridad de una permutación , según lo define wikipedia , es la siguiente:
El signo o firma de una permutación σ se denota sgn (σ) y se define como +1 si σ es par y −1 si σ es impar.
El signo de una permutación puede expresarse explícitamente como
sgn (σ) = (−1) ^ N (σ)
donde N (σ) es el número de inversiones en σ.
Alternativamente, el signo de una permutación σ se puede definir a partir de su descomposición en el producto de transposiciones como
sgn (σ) = (−1) ^ m
donde m es el número de transposiciones en la descomposición.
Para aquellos de ustedes que no son aficionados a la sopa del alfabeto griego en sus matemáticas, intentaré simplificar un poco la definición con un ejemplo (también robado de wikipedia).
Ejemplo
Considere la matriz de entrada {1, 2, 3, 4, 5}
, y una permutación de ella, digamos, {3, 4, 5, 2, 1}
. Para pasar de la matriz original a su permutación, debe intercambiar índices 0
y 2
, 1
y 3
, luego 2
y 4
. Aunque esta no es una solución única, la paridad está bien definida, por lo que funciona para todos los casos.
Como requiere 3 intercambios, etiquetamos esta permutación con una odd
paridad. Como es de esperar, se dice que una permutación que requiere una cantidad pareja de intercambios tiene una even
paridad.
Desafío
Su desafío es escribir un programa en la menor cantidad de bytes posible para determinar la paridad de una permutación. Su programa o función debe:
- Acepte como argumentos, dos matrices de entrada (o cadenas) que representan un conjunto antes y después de una permutación.
- Devuelve o imprime el carácter
e
par oo
impar, dada la permutación. - Debe suponer que todos los índices en las matrices o cadenas tienen valores únicos.
Casos de prueba
Asumiendo que declaró una función llamada f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Este es el código de golf , ¡el programa más corto en bytes gana!
[10], [10] -> e
(cero transposiciones). [10 30 20], [30 20 10] -> e
(dos transposiciones). [10 30 20 40], [30 20 40 10] -> o
(tres transposiciones)