Lý lịch
Tính chẵn lẻ của một hoán vị , như được định nghĩa bởi wikipedia , như sau:
Dấu hoặc chữ ký của hoán vị được ký hiệu là sgn (σ) và được định nghĩa là +1 nếu σ chẵn và −1 nếu là số lẻ.
Dấu hiệu của một hoán vị có thể được thể hiện rõ ràng như
sgn (σ) = (1) ^ N ()
Trong đó N (σ) là số lượng nghịch đảo trong.
Ngoài ra, dấu hiệu của hoán vị có thể được định nghĩa từ sự phân rã của nó thành sản phẩm của các chuyển vị như
sgn (σ) = (1) ^ m
Trong đó m là số lần chuyển vị trong phân rã.
Đối với những người không thích món súp bảng chữ cái Hy Lạp trong toán học của họ, tôi sẽ thử và đơn giản hóa định nghĩa một chút bằng một ví dụ (cũng bị đánh cắp từ wikipedia).
Thí dụ
Hãy xem xét mảng đầu vào {1, 2, 3, 4, 5}
và một hoán vị của nó, giả sử , {3, 4, 5, 2, 1}
. Để có được từ mảng ban đầu đến hoán vị của nó, bạn phải trao đổi các chỉ số 0
và 2
, 1
và 3
, sau đó 2
và 4
. Mặc dù đây không phải là một giải pháp duy nhất, tính chẵn lẻ được xác định rõ ràng nên điều này hoạt động cho tất cả các trường hợp.
Vì nó yêu cầu 3 lần hoán đổi, chúng tôi dán nhãn hoán vị này với một odd
chẵn lẻ. Như bạn có thể mong đợi, một hoán vị đòi hỏi một lượng giao dịch hoán đổi đồng đều được cho là có even
tính chẵn lẻ.
Thử thách
Thách thức của bạn là viết một chương trình càng ít byte càng tốt để xác định tính chẵn lẻ của một hoán vị. Chương trình hoặc chức năng của bạn phải:
- Chấp nhận làm đối số, hai mảng đầu vào (hoặc chuỗi) đại diện cho một tập hợp trước và sau khi hoán vị.
- Trả lại hoặc in ký tự
e
cho chẵn hoặco
lẻ, cho phép hoán vị. - Nên giả sử rằng tất cả các chỉ số trong mảng hoặc chuỗi có giá trị duy nhất.
Các trường hợp thử nghiệm
Giả sử bạn đã khai báo một hàm có tên f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Đây là code-golf , chương trình ngắn nhất trong byte thắng!
[10], [10] -> e
(không chuyển vị). [10 30 20], [30 20 10] -> e
(hai lần chuyển vị). [10 30 20 40], [30 20 40 10] -> o
(ba lần chuyển vị)