Permutasi ukuran n adalah penataan ulang bilangan bulat n positif pertama . (artinya setiap integer muncul sekali dan tepat sekali). Permutasi dapat diperlakukan seperti fungsi yang mengubah urutan daftar item berukuran n . Sebagai contoh
(4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"]
Dengan demikian permutasi dapat disusun seperti fungsi.
(4 1 2 3)(2 1 3 4) = (4 2 1 3)
Ini menghasilkan banyak properti menarik. Hari ini kami fokus pada konjugasi . Permutasi y dan x (keduanya ukuran n ) adalah konjugat jika jika ada permutasi g dan g -1 (juga ukuran n ) sedemikian rupa sehingga
x = gyg-1
dan gg -1 sama dengan permutasi identitas ( angka n pertama dalam urutan yang benar).
Tugas Anda adalah mengambil dua permutasi dengan ukuran yang sama melalui metode input standar dan memutuskan apakah keduanya merupakan konjugat. Anda harus menampilkan salah satu dari dua nilai yang konsisten, satu jika mereka konjugat dan yang lainnya jika tidak.
Ini adalah kode-golf sehingga jawaban akan dicetak dalam byte dengan lebih sedikit byte yang lebih baik.
Ada banyak teorema tentang permutasi konjugasi yang Anda inginkan, jadi semoga sukses dan senang bermain golf.
Anda dapat mengambil input sebagai wadah nilai yang terurut (baik 1-n atau 0-n) yang mewakili permutasi seperti di atas, atau sebagai fungsi yang mengambil wadah yang dipesan dan melakukan permutasi. Jika Anda memilih untuk mengambil fungsi, Anda harus menganggapnya sebagai argumen daripada menggunakannya dengan nama yang telah ditentukan.
Uji Kasus
(1) (1) -> True
(1 2) (2 1) -> False
(2 1) (2 1) -> True
(4 1 3 2) (4 2 1 3) -> True
(3 2 1 4) (4 3 2 1) -> False
(2 1 3 4 5 7 6) (1 3 2 5 4 6 7) -> True
sumber
Jawaban:
Python 2 , 87 byte
Cobalah online!
Mengambil input dengan
P
sebagai pasangan permutasi dank
panjangnya. Output1
untuk konjugat dan0
tidak.Ini menggunakan hasil:
Dua permutasi konjugasi memuaskan ini karena kekuatan k- th mereka juga konjugat, dan konjugasi mempertahankan jumlah titik tetap.
Tidak terlalu jelas bahwa dua permutasi non-konjugasi selalu berbeda. Secara khusus, konjugasi ditentukan oleh daftar panjang siklus yang diurutkan, dan ini dapat dipulihkan dari jumlah titik tetap. Salah satu cara untuk menunjukkan ini adalah dengan aljabar linier, meskipun mungkin berlebihan.
Biarkan X menjadi matriks permutasi untuk x . Kemudian, jumlah titik tetap x k adalah Tr (X k ) . Jejak ini adalah kekuatan jumlah polinomial simetris dari nilai eigen dari X k dengan keanekaragaman. Polinomial-polinomial ini untuk k dari 0 hingga n mari kita pulihkan polinomial simetris elementer yang sesuai dari nilai-nilai eigen ini, dan karenanya polinom karakteristik dan dengan demikian nilai eigen itu sendiri.
Karena nilai eigen ini adalah akar dari persatuan yang sesuai dengan siklus x , dari sini kita dapat memulihkan ukuran siklus dan multiplisitasnya. Jadi, "tanda tangan" kami mengidentifikasi permutasi hingga konjugasi.
sumber
J ,
25 byte23 byte16 bytesolusi mil diam - diam:
Solusi eksplisit OP:
Ini memeriksa apakah permutasi x dan y memiliki jenis siklus yang sama, menggunakan
C.
fungsi bawaan untuk menghasilkan representasi siklus.sumber
-:&([:/:~#&>)&C.
dengan menggunakan formulir diam-diam. Inilah tautan TIO untuk mencobanya.c=:
MATL ,
20191716 byteInput: dua vektor kolom (menggunakan
;
sebagai pemisah). Output:1
jika konjugasi,0
jika tidak.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Tidak ada teorema tentang permutasi yang digunakan (karena ketidaktahuan belaka); hanya kekerasan dan dua fakta ini:
Untuk dua permutasi p dan q , komposisi pq setara dengan menggunakan p untuk mengindeks elemen-elemen q .
Kondisi x = gyg −1 setara dengan xg = gy .
Kode yang dikomentari:
sumber
Bahasa Wolfram (Mathematica) , 44 byte
Cobalah online!
Bahasa Wolfram (Mathematica) , 44 byte
Menggunakan pengkodean CP-1252, di mana
±
satu byte.Cobalah online!
sumber
Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
y
yang mengindeks masing-masingg⁻¹
, bukan sebaliknya. Lihat contoh(4 1 2 3)(2 1 3 4) = (4 2 1 3)
,. Dengan pendekatan Anda, itu akan menghasilkan(1 4 2 3)
sebaliknya, karena indeks kedua menjadi yang pertama. Mempertimbangkan itu, saya punya solusi 12-byte yang belum saya rusak. :-)Œ!©Ụ€⁹ịЀ®ị"⁸e
(pada dasarnya semua pengindeksan dengan argumen terbalik), kecuali lebih pendek setelah saya membuat modifikasi besar. Saya pikir tidakg⁻¹yg
sama dengangyg⁻¹
. Juga, saya pikir jawaban Anda dapat mengambil manfaat dari modifikasi itu juga, tetapi, seperti yang saya katakan sebelumnya, saya belum ingin merusak kesenangannya.x = g⁻¹yg
, makagxg⁻¹ = y
,x
dany
konjugat.eŒ!ị"Ụị@¥€¥¥
Sekam , 9 byte
Pengembalian
1
untuk konjugasi dan0
untuk non-konjugat. Cobalah online!Penjelasan
Kelas conjugacy dari permutasi P dari L = [1,2, .., n] ditentukan oleh multiset yang mengandung periode setidaknya setiap angka di L di bawah P . Ketika P diambil dalam format daftar, saya bisa mengganti L dengan P dan mendapatkan multiset yang sama. Program menghitung multiset yang sesuai untuk setiap input dan memeriksa apakah ada sub-multiset lainnya. Karena mereka memiliki jumlah elemen yang sama, ini setara dengan menjadi multiset yang sama.
sumber
Perl,
615857 byteTermasuk
+2
untukap
Berikan permutasi berbasis 0 sebagai 2 baris pada STDIN
Algoritma adalah variasi kecil pada solusi satu di xnor
Versi yang lebih lama dari kode ini mengenai bug perl dan dump core untuk beberapa input pada perl terbaru saya
5.26.1
, tetapi ia bekerja pada perl yang lebih lama5.16.3
.Itu mungkin contoh lain dari musuh perlgolf lama saya, fakta bahwa perl tidak menghitung ulang tumpukannya dengan benar.
sumber
JavaScript (ES6),
6664 byteJika saya sudah membaca jawaban lain dengan benar, masalahnya sama dengan menghitung periode semua elemen dan memeriksa bahwa kedua daftar memiliki jumlah yang sama pada setiap periode. Sunting: Disimpan 1 byte berkat @Arnauld dengan menghitung satu kurang dari periode. Menyimpan byte lain berkat @Arnauld dengan menyalahgunakan aturan paksaan aneh JavaScript untuk membandingkan array. Byte lain bisa diselamatkan dengan kari tetapi saya tidak suka kari kecuali ayam tikka masala.
sumber