İkili bir Suzunluk 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 isırayla 0iç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 0maçları 0, 01için Hamming mesafesi iki sahiptir 10, 010kibrit 010, 0101için Hamming mesafesi dört sahiptir 1010 ve son olarak 01010kendini eşleşir.
Bununla birlikte, sadece Hamming mesafesinin en fazla 1 olduğu çıkışlarla ilgileniyoruz. Bu nedenle, bu görevde YHamming 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), Ys ve Ns'nin farklı dizilerinin sayısı olarak tanımlayın .2^nSn
Görev
nBaşlangıç noktasını artırmak 1iç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 = 1her biri için cevap vermesini yinelemesi gerekir n. Tüm koşuyu zamanlayacağım, iki dakika sonra öldüreceğim.
Puanınız no 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 .
