fundo
A paridade de uma permutação , conforme definida pela wikipedia , é a seguinte:
O sinal ou assinatura de uma permutação σ é denotado sgn (σ) e definido como +1 se σ for par e -1 se σ for ímpar.
O sinal de uma permutação pode ser expresso explicitamente como
sgn (σ) = (−1) ^ N (σ)
onde N (σ) é o número de inversões em σ.
Alternativamente, o sinal de uma permutação σ pode ser definido a partir de sua decomposição no produto das transposições como
sgn (σ) = (−1) ^ m
onde m é o número de transposições na decomposição.
Para aqueles que não gostam da sopa do alfabeto grego em suas contas, tentarei simplificar um pouco a definição com um exemplo (também roubado da wikipedia).
Exemplo
Considere a matriz de entrada {1, 2, 3, 4, 5}
e uma permutação dela, digamos {3, 4, 5, 2, 1}
,. Para passar da matriz original para sua permutação, você deve trocar índices 0
e 2
, 1
e 3
, then 2
e 4
. Embora essa não seja uma solução exclusiva, a paridade é bem definida e, portanto, funciona para todos os casos.
Como requer 3 swaps, rotulamos essa permutação com odd
paridade. Como você poderia esperar, uma permutação que requer uma quantidade uniforme de swaps é considerada even
paridade.
Desafio
Seu desafio é escrever um programa no menor número de bytes possível para determinar a paridade de uma permutação. Seu programa ou função deve:
- Aceite como argumentos, duas matrizes de entrada (ou cadeias) representando um conjunto antes e depois de uma permutação.
- Retorne ou imprima o caractere
e
para par ouo
ímpar, dada a permutação. - Deve assumir que todos os índices nas matrizes ou cadeias tenham valores exclusivos.
Casos de teste
Supondo que você declarou uma função denominada f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Este é o código-golfe , o programa mais curto em bytes vence!
[10], [10] -> e
(zero transposição). [10 30 20], [30 20 10] -> e
(duas transposições). [10 30 20 40], [30 20 40 10] -> o
(três transposições)