Latar Belakang
Penangan kartu yang sangat terampil mampu melakukan teknik di mana mereka memotong setumpuk menjadi dua sempurna, kemudian dengan sempurna menyisipkan kartu-kartu tersebut. Jika mereka mulai dengan dek yang diurutkan dan melakukan teknik ini dengan sempurna 52 kali berturut-turut, dek akan dikembalikan ke urutan yang diurutkan. Tantangan Anda adalah mengambil setumpuk kartu bilangan bulat dan menentukan apakah kartu itu dapat diurutkan menggunakan hanya Faro shuffles.
Definisi
Secara matematis, Faro shuffle adalah permutasi pada elemen 2 n (untuk bilangan bulat positif n ) yang membawa elemen pada posisi i (1-diindeks) ke posisi 2 i (mod 2 n +1). Kami juga ingin dapat menangani daftar panjang ganjil, jadi dalam hal ini, cukup tambahkan satu elemen ke akhir daftar (Joker, jika Anda memiliki satu berguna) dan Faro mengacak daftar baru seperti di atas, tetapi abaikan elemen dummy yang ditambahkan saat memeriksa pesanan daftar.
Tujuan
Tulis sebuah program atau fungsi yang mengambil daftar bilangan bulat dan mengembalikan atau menampilkan kebenaran jika sejumlah Faro shuffles akan menyebabkan daftar itu diurutkan dalam urutan nondescending (bahkan jika angka itu nol - daftar kecil harus memberikan kebenaran). Jika tidak, kembalikan atau hasilkan falsy.
Contohnya
[1,1,2,3,5,8,13,21] => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True
Mencetak gol
Ini adalah kode-golf sehingga sumber terpendek dalam byte menang.
sumber
Jawaban:
Pyth -
262524 byteGunakan pengurangan kumulatif untuk menerapkan Faro shuffle beberapa kali dan simpan semua hasil. Kemudian, memetakan melalui itu dan memeriksa apakah mereka invarian di bawah pengurutan, kemudian menggunakan jumlah untuk memeriksa apakah ada yang benar. Mengembalikan positif atau nol.
Test Suite .
sumber
MATL , 41 byte
Outputnya adalah
1
atau0
.Penjelasan
Contoh
sumber