İkili bir S
uzunluk dizesi düşünün n
. Dan endekslenmesi 1
, biz hesaplayabilir Hamming mesafeleri arasındaki S[1..i+1]
ve S[n-i..n]
herkes için i
sırayla 0
için n-1
. Eşit uzunlukta iki tel arasındaki Hamming mesafesi, karşılık gelen sembollerin farklı olduğu konumların sayısıdır. Örneğin,
S = 01010
verir
[0, 2, 0, 4, 0].
Bunun nedeni ise 0
maçları 0
, 01
için Hamming mesafesi iki sahiptir 10
, 010
kibrit 010
, 0101
için Hamming mesafesi dört sahiptir 1010
ve son olarak 01010
kendini eşleşir.
Bununla birlikte, sadece Hamming mesafesinin en fazla 1 olduğu çıkışlarla ilgileniyoruz. Bu nedenle, bu görevde Y
Hamming mesafesinin en fazla bir olup olmadığını bildireceğiz N
. Yani yukarıdaki örneğimizde
[Y, N, Y, N, Y]
Olası tüm farklı uzunluktaki bit dizelerini yinelediğinde f(n)
, Y
s ve N
s'nin farklı dizilerinin sayısı olarak tanımlayın .2^n
S
n
Görev
n
Başlangıç noktasını artırmak 1
için kodunuzun çıktısı alınmalıdır f(n)
.
Örnek cevaplar
Çünkü n = 1..24
, doğru cevaplar:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
puanlama
Kodunuzun n = 1
her biri için cevap vermesini yinelemesi gerekir n
. Tüm koşuyu zamanlayacağım, iki dakika sonra öldüreceğim.
Puanınız n
o zaman aldığınız en yüksek puan .
Beraberlik durumunda, ilk cevap kazanır.
Kodum nerede test edilecek?
Kodunuzu cygwin altındaki (biraz eski) Windows 7 dizüstü bilgisayarımda çalıştıracağım. Sonuç olarak, lütfen bunu kolaylaştırmak için yapabileceğiniz her türlü yardımı verin.
Dizüstü bilgisayarımda 8GB RAM ve 2 çekirdekli ve 4 iş parçacıklı Intel i7 5600U@2.6 GHz (Broadwell) CPU var. Komut kümesi SSE4.2, AVX, AVX2, FMA3 ve TSX'i içerir.
Her dil için önde gelen girişler
- N = 40 içinde Rust Anders Kaseorg tarafından CryptoMiniSat kullanılarak. (Lubuntu'da konuk VM, Vbox altında.)
- n = 35 olarak C ++ Christian Seviers tarafından BUDDY kitaplığı kullanılarak. (Lubuntu'da konuk VM, Vbox altında.)
- n = 34 içinde Clingo Anders Kaseorg ile. (Lubuntu'da Vbox altındaki konuk VM.)
- n = 31 içinde Rust Anders Kaseorg ile.
- n = 29 içinde Clojure NikoNyrh ile.
- bartavelle ile C'de n = 29 .
- n = 27 içinde Haskell'e Bartavelle göre
- n = 24 , alefalfal tarafından Pari / gp'de.
- n = 22 yılında Python 2 + PYPY bana göre.
- n = 21 içinde Mathematica'nın alephalpha ile. (Kendini bildirdi)
Gelecek ödülleri
Şimdi iki dakika içinde makinemde n = 80'e ulaşan herhangi bir cevap için 200 puanlık bir ödül vereceğim .