배경
순열의 패리티 , 위키에 의해 정의 된 다음이다 :
순열 σ의 부호 또는 부호는 sgn (σ)로 표시되며 σ가 짝수이면 +1로, σ가 홀수이면 -1로 정의됩니다.
순열의 부호는 다음과 같이 명시 적으로 표현할 수 있습니다.
sgn (σ) = (−1) ^ N (σ)
여기서 N (σ)는 σ의 반전 수입니다.
대안 적으로, 순열 σ의 부호는 그것의 분해로부터 전이의 곱으로 정의 될 수있다.
sgn (σ) = (−1) ^ m
여기서 m은 분해에서 전치의 수입니다.
수학에서 그리스 알파벳 수프를 좋아하지 않는 사람들을 위해, 나는 예제 (wikipedia에서 도난당한)로 정의를 약간 단순화하고 시도 할 것입니다.
예
입력 배열 {1, 2, 3, 4, 5}
과 그것의 순열을 생각해 봅시다 {3, 4, 5, 2, 1}
. 그 순열 원래 배열에서 취득하기 위하여는, 당신은 인덱스를 교환해야 0
하고 2
, 1
그리고 3
, 다음 2
과 4
. 이것이 고유 한 솔루션은 아니지만 패리티가 잘 정의되어 있으므로 모든 경우에 적용됩니다.
3 개의 스왑이 필요하므로이 순열에 odd
패리티 레이블을 붙입니다 . 예상 한대로 짝수의 스왑이 필요한 순열에는 even
패리티 가 있다고합니다 .
도전
당신의 도전은 순열의 패리티를 결정하기 위해 가능한 한 적은 바이트로 프로그램을 작성하는 것입니다. 프로그램 또는 기능은 다음과 같아야합니다.
- 순열 전후의 집합을 나타내는 두 개의 입력 배열 (또는 문자열)을 인수로 받아들입니다.
- 순열이 주어지면 짝수
e
또는o
홀수로 문자 를 반환하거나 인쇄하십시오 . - 배열 또는 문자열의 모든 인덱스에 고유 한 값이 있다고 가정해야합니다.
테스트 사례
다음과 같은 함수를 선언했다고 가정합니다 f
.
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
이것은 바이트 단위의 가장 짧은 프로그램 인 code-golf입니다 !
[10], [10] -> e
(조옮김 없음). [10 30 20], [30 20 10] -> e
(2 개의 전치). [10 30 20 40], [30 20 40 10] -> o
(3 개의 조옮김)