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 0dan 2, 1dan 3, lalu 2dan 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 oddparitas. Seperti yang mungkin Anda harapkan, permutasi yang membutuhkan swap bahkan genap dikatakan memiliki evenparitas.
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
euntuk genap atauoganjil, 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)