Pertimbangkan S
panjang string biner n
. Dari pengindeksan 1
, kita dapat menghitung jarak Hamming antara S[1..i+1]
dan S[n-i..n]
untuk semua i
dalam urutan dari 0
ke 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 0
pertandingan 0
, 01
memiliki jarak Hamming dua 10
, 010
pertandingan 010
, 0101
memiliki jarak Hamming empat 1010
dan akhirnya 01010
cocok dengan dirinya sendiri.
Kami hanya tertarik pada output di mana jarak Hamming paling banyak 1, namun. Jadi dalam tugas ini kami akan melaporkan Y
jika jarak Hamming paling banyak satu dan N
sebaliknya. Jadi dalam contoh kita di atas kita akan dapatkan
[Y, N, Y, N, Y]
Tentukan f(n)
jumlah array yang berbeda dari Y
s dan N
s yang didapat ketika iterasi semua 2^n
string bit S
panjang yang mungkin berbeda n
.
Tugas
Untuk meningkatkan n
mulai 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 = 1
memberikan jawaban untuk masing-masing n
pada gilirannya. Saya akan mengatur waktu seluruh pelarian, membunuhnya setelah dua menit.
Skor Anda adalah yang tertinggi yang n
Anda 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.