Pertimbangkan Spanjang string biner n. Dari pengindeksan 1, kita dapat menghitung jarak Hamming antara S[1..i+1]dan S[n-i..n]untuk semua idalam urutan dari 0ke n-1. Jarak Hamming antara dua string dengan panjang yang sama adalah jumlah posisi di mana simbol yang sesuai berbeda. Sebagai contoh,
S = 01010
memberi
[0, 2, 0, 4, 0].
Ini karena 0pertandingan 0, 01memiliki jarak Hamming dua 10, 010pertandingan 010, 0101memiliki jarak Hamming empat 1010 dan akhirnya 01010cocok dengan dirinya sendiri.
Kami hanya tertarik pada output di mana jarak Hamming paling banyak 1, namun. Jadi dalam tugas ini kami akan melaporkan Yjika jarak Hamming paling banyak satu dan Nsebaliknya. Jadi dalam contoh kita di atas kita akan dapatkan
[Y, N, Y, N, Y]
Tentukan f(n)jumlah array yang berbeda dari Ys dan Ns yang didapat ketika iterasi semua 2^nstring bit Spanjang yang mungkin berbeda n.
Tugas
Untuk meningkatkan nmulai dari 1, kode Anda harus ditampilkan f(n).
Contoh jawaban
Sebab n = 1..24, jawaban yang benar adalah:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Mencetak gol
Kode Anda harus beralih dari n = 1memberikan jawaban untuk masing-masing npada gilirannya. Saya akan mengatur waktu seluruh pelarian, membunuhnya setelah dua menit.
Skor Anda adalah yang tertinggi yang nAnda dapatkan pada waktu itu.
Dalam kasus seri, jawaban pertama menang.
Di mana kode saya akan diuji?
Saya akan menjalankan kode Anda di laptop Windows 7 (agak lama) saya di bawah cygwin. Sebagai hasilnya, tolong berikan bantuan yang Anda bisa untuk mempermudah ini.
Laptop saya memiliki RAM 8GB dan CPU Intel i7 5600U@2.6 GHz (Broadwell) dengan 2 core dan 4 thread. Set instruksi termasuk SSE4.2, AVX, AVX2, FMA3 dan TSX.
Entri terkemuka per bahasa
- n = 40 di Rust menggunakan CryptoMiniSat, oleh Anders Kaseorg. (Dalam VM tamu Lubuntu di bawah Vbox.)
- n = 35 dalam C ++ menggunakan perpustakaan BuDDy, oleh Christian Seviers. (Dalam VM tamu Lubuntu di bawah Vbox.)
- n = 34 di Clingo oleh Anders Kaseorg. (Dalam VM tamu Lubuntu di bawah Vbox.)
- n = 31 in Rust oleh Anders Kaseorg.
- n = 29 in Clojure oleh NikoNyrh.
- n = 29 in C oleh bartavelle.
- n = 27 in Haskell oleh bartavelle
- n = 24 in Pari / gp oleh alephalpha.
- n = 22 in Python 2 + pypy oleh saya.
- n = 21 dalam Mathematica by alephalpha. (Dilaporkan sendiri)
Karunia masa depan
Sekarang saya akan memberikan hadiah 200 poin untuk setiap jawaban yang mencapai n = 80 pada mesin saya dalam dua menit.
