Arka fon
Bir permütasyon parite , wikipedia ile tanımlandığı gibi , aşağıdaki gibi:
Σ permütasyonunun işareti veya imzası sgn (σ) olarak gösterilir ve σ çiftse +1 ve σ tekse −1 olarak tanımlanır.
Bir permütasyon işareti açıkça şu şekilde ifade edilebilir:
sgn (σ) = (−1) ^ N (σ)
burada N (σ), σ cinsinden ters çevirme sayısıdır.
Alternatif olarak bir permütasyonun σ işareti, ayrışmasından transpozisyonların ürününe tanımlanabilir.
sgn (σ) = (−1) ^ m
burada m, ayrışmadaki transpozisyon sayısıdır.
Matematiklerinde Yunan alfabesi çorbasına düşmeyenler için, tanımı bir örnekle (wikipedia'dan da çalındı) basitleştirmeye çalışacağım.
Misal
Girdi dizisini {1, 2, 3, 4, 5}
ve bunun bir permütasyonunu düşünelim {3, 4, 5, 2, 1}
. Orijinal diziden permütasyonuna ulaşmak için, indeksleri değiştirmeli 0
ve 2
, 1
ve 3
, sonra 2
ve 4
. Bu benzersiz bir çözüm olmamasına rağmen, parite iyi tanımlanmıştır, bu nedenle bu tüm durumlar için geçerlidir.
3 değişim gerektirdiğinden, bu permütasyonu bir odd
parite ile etiketliyoruz . Tahmin edebileceğiniz gibi, eşit miktarda takas gerektiren bir permütasyonun even
pariteye sahip olduğu söylenir .
Meydan okuma
Zorluğunuz, bir permütasyonun paritesini belirlemek için mümkün olduğunca az bayt içinde bir program yazmaktır. Programınız veya işleviniz:
- Bağımsız değişken olarak kabul et, bir permütasyondan önce ve sonra bir kümeyi temsil eden iki girdi dizisi (veya dizeleri).
- Permütasyon verildiğinde, karakteri
e
çift veyao
tek için döndürün veya yazdırın . - Dizilerdeki veya dizelerdeki tüm indekslerin benzersiz değerleri olduğunu varsayalım.
Test Durumları
Şu adla bir işlev bildirdiğinizi varsayarsak f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Bu kod golf , bayt en kısa program kazanır!
[10], [10] -> e
(sıfır aktarım). [10 30 20], [30 20 10] -> e
(iki aktarım). [10 30 20 40], [30 20 40 10] -> o
(üç aktarım)