Latar Belakang
The paritas permutasi , seperti yang didefinisikan oleh wikipedia , adalah sebagai berikut:
Tanda atau tanda tangan permutasi σ dilambangkan dengan sgn (σ) dan didefinisikan sebagai +1 jika σ genap dan −1 jika σ ganjil.
Tanda permutasi dapat secara eksplisit dinyatakan sebagai
sgn (σ) = (−1) ^ N (σ)
di mana N (σ) adalah jumlah inversi dalam σ.
Atau, tanda permutasi σ dapat didefinisikan dari dekomposisi menjadi produk transposisi sebagai
sgn (σ) = (−1) ^ m
di mana m adalah jumlah transposisi dalam dekomposisi.
Bagi Anda yang tidak suka sup alfabet Yunani dalam matematika mereka, saya akan mencoba dan menyederhanakan definisi sedikit dengan contoh (juga dicuri dari wikipedia).
Contoh
Pertimbangkan array input {1, 2, 3, 4, 5}
, dan permutasi, katakanlah {3, 4, 5, 2, 1}
,. Untuk mendapatkan dari array asli ke permutasi, Anda harus bertukar indeks 0
dan 2
, 1
dan 3
, lalu 2
dan 4
. Meskipun ini bukan solusi yang unik, paritasnya didefinisikan dengan baik sehingga ini bekerja untuk semua kasus.
Karena membutuhkan 3 swap, kami memberi label permutasi ini dengan odd
paritas. Seperti yang mungkin Anda harapkan, permutasi yang membutuhkan swap bahkan genap dikatakan memiliki even
paritas.
Tantangan
Tantangan Anda adalah menulis sebuah program sesedikit mungkin byte untuk menentukan paritas permutasi. Program atau fungsi Anda harus:
- Terima sebagai argumen, dua larik input (atau string) mewakili satu set sebelum dan sesudah permutasi.
- Kembalikan atau cetak karakter
e
untuk genap atauo
ganjil, diberi permutasi. - Harus mengasumsikan bahwa semua indeks dalam array atau string memiliki nilai unik.
Uji Kasus
Dengan asumsi Anda mendeklarasikan fungsi bernama f
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
Ini adalah kode-golf , program terpendek dalam byte yang menang!
[10], [10] -> e
(nol transposisi). [10 30 20], [30 20 10] -> e
(dua transposisi). [10 30 20 40], [30 20 40 10] -> o
(tiga transposisi)