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 0e 2, 1e 3, then 2e 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 oddparidade. Como você poderia esperar, uma permutação que requer uma quantidade uniforme de swaps é considerada evenparidade.
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
epara 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)