Pertimbangkan daftar l
, yang terdiri dari angka-angka. Tentukan operasi blok pada indeks i
pada daftar l
untuk menjadi tindakan memindahkan 3 elemen berurutan mulai dari i
dalam l
hingga akhir.
Contoh:
l, i (1-indexing) -> l (after applying block operation at index i)
[1,2,3,4,5], 1 -> [4,5,1,2,3]
[1,2,3,4,5,6,7], 3 -> [1,2,6,7,3,4,5]
Diberikan daftar yang hanya terdiri dari 0 dan 1, tantangan Anda adalah mempartisi sehingga nol berada di depan, dan yang ada di belakang, hanya menggunakan operasi blok. Output harus menjadi indeks dalam urutan yang diterapkan pada daftar.
Karena ini tidak mungkin untuk daftar [1,0,1,0]
, panjang daftar dijamin setidaknya 5.
Test case (pengindeksan 1)
(ada output yang valid lainnya)
[1,1,1,0,0] -> [1]
[0,1,0,1,0] -> [1,2,1,1]
[0,0,0,1,1,1,0,0,0] -> [4]
Gunakan skrip ini untuk menghasilkan lebih banyak kasus uji. (hanya masukan. The rplc ' ';','
bagian digunakan untuk r e pl a c e spasi dengan koma di output)
Kriteria menang
kode-tantangan adalah kriteria pemenang utama, dan kode tercepat adalah tie-breaker. Khususnya:
- Solusi dengan panjang output terpendek (jumlah operasi blok paling sedikit) dengan test case (
n_elem
= 500,random_seed
= {nilai rahasia}) menang. Anda harus dapat menjalankan solusi Anda sampai selesai dengan test case (n_elem
= 500,random_seed
= 123456). - Dalam kasus ikatan, solusi yang dapat menangani nilai power-of-2 terbesar
n_elem
denganrandom_seed
= {nilai rahasia} dalam 10 detik (untuk saya) menang. - Dalam hal ikatan, solusi yang membutuhkan waktu lebih sedikit pada kasus tes menang.
sumber
Jawaban:
Python 3 , (0,397 n + 3,58) langkah
1000 poin regresi polinomial oleh
numpy.polyfit
.Cobalah online!
sumber
Python 3, ~ 179 langkah untuk n = 500 (rata-rata)
Pendekatan serakah heuristik. Agak lambat tapi masih berfungsi. Menggunakan pemecah yang optimal untuk ukuran kecil.
sumber