Kemarin saya menanyakan pertanyaan ini tentang riffle shuffles. Tampaknya pertanyaan kemarin agak terlalu sulit sehingga pertanyaan ini adalah tugas yang terkait tetapi jauh lebih mudah.
Hari ini Anda diminta untuk menentukan apakah permutasi benar-benar mengacak. Definisi kami tentang riffle shuffle diadaptasi dari pertanyaan terakhir kami:
Bagian pertama dari shuffle adalah pembagian. Di partisi membagi tumpukan kartu menjadi dua. Dua subbagian harus kontinu, saling eksklusif dan lengkap. Di dunia nyata ingin membuat partisi Anda sedekat mungkin, namun dalam tantangan ini ini bukan pertimbangan, semua partisi termasuk yang merosot (satu partisi kosong) memiliki pertimbangan yang sama.
Setelah dipartisi, kartu-kartu disambungkan sedemikian rupa sehingga kartu-kartu mempertahankan urutan relatifnya di dalam partisi tempat mereka menjadi anggota . Misalnya, jika kartu A ada di depan kartu B di geladak dan kartu A dan B berada di partisi yang sama, kartu A harus di depan kartu B di hasil akhir, bahkan jika jumlah kartu di antara mereka telah meningkat. Jika A dan B berada di partisi yang berbeda, mereka dapat dalam urutan apa pun, terlepas dari urutan awal mereka, pada hasil akhir.
Setiap kocokan riffle kemudian dapat dilihat sebagai permutasi dari kartu asli. Misalnya permutasi
1,2,3 -> 1,3,2
adalah kocokan riffle. Jika Anda membagi deck seperti itu
1, 2 | 3
kita melihat bahwa setiap kartu di dalam 1,3,2
memiliki urutan relatif yang sama untuk setiap kartu lain di partisi itu. 2
masih setelah 1
.
Di sisi lain permutasi berikut ini bukan shuffle riffle.
1,2,3 -> 3,2,1
Kita dapat melihat ini karena untuk semua dua partisi (non-sepele)
1, 2 | 3
1 | 2, 3
ada sepasang kartu yang tidak mempertahankan pemesanan relatif mereka. Di partisi pertama 1
dan 2
ubah urutannya, sedangkan di partisi kedua 2
dan 3
ubah urutannya.
Tugas
Diberi permutasi melalui metode yang masuk akal, tentukan apakah itu merupakan shuffle riffle yang valid. Anda harus menampilkan dua nilai konstanta berbeda satu untuk "Ya, ini adalah riffle shuffle" dan satu untuk "Tidak, ini bukan riffle shuffle".
Ini adalah kode-golf sehingga jawaban akan dinilai dalam byte dengan lebih sedikit byte lebih baik.
Uji Kasus
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
.
[2,3,6,1,4,5]
.
[0, ..., n-1]
alih-alih [1, ..., n]
sebagai input?
0
untuk falsy tetapi bilangan bulat apa pun[1, +∞)
untuk kebenaran?