Considérons une chaîne binaire S
de longueur n
. En indexant à partir de 1
, nous pouvons calculer les distances de Hamming entre S[1..i+1]
et S[n-i..n]
pour tous i
dans l'ordre de 0
à n-1
. La distance de Hamming entre deux chaînes de longueur égale est le nombre de positions auxquelles les symboles correspondants sont différents. Par exemple,
S = 01010
donne
[0, 2, 0, 4, 0].
En effet , les 0
matchs 0
, 01
a une distance de Hamming deux à 10
, 010
matchs 010
, 0101
a une distance de Hamming quatre à 1010
et enfin 01010
lui - même correspond.
Cependant, nous ne sommes intéressés que par les sorties où la distance de Hamming est au plus 1. Donc, dans cette tâche, nous signalerons un Y
si la distance de Hamming est au plus un et un N
autre. Donc, dans notre exemple ci-dessus, nous aurions
[Y, N, Y, N, Y]
Définissez f(n)
le nombre de tableaux distincts de Y
s et N
s que l'on obtient lors de l'itération sur toutes les 2^n
différentes chaînes S
de bits possibles de longueur n
.
Tâche
Pour augmenter à n
partir de 1
, votre code devrait sortir f(n)
.
Exemples de réponses
Pour n = 1..24
, les bonnes réponses sont:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Notation
Votre code doit répéter n = 1
la réponse de chacun n
à son tour. Je chronométrerai toute la course, le tuant après deux minutes.
Votre score est le plus élevé que n
vous ayez atteint pendant cette période.
En cas d'égalité, la première réponse l'emporte.
Où mon code sera-t-il testé?
Je vais exécuter votre code sur mon (légèrement vieux) ordinateur portable Windows 7 sous cygwin. Par conséquent, veuillez fournir toute l'aide que vous pouvez pour faciliter la tâche.
Mon ordinateur portable a 8 Go de RAM et un processeur Intel i7 5600U@2,6 GHz (Broadwell) avec 2 cœurs et 4 threads. Le jeu d'instructions comprend SSE4.2, AVX, AVX2, FMA3 et TSX.
Entrées principales par langue
- n = 40 dans Rust en utilisant CryptoMiniSat, par Anders Kaseorg. (Dans la VM invitée Lubuntu sous Vbox.)
- n = 35 en C ++ en utilisant la bibliothèque BuDDy, par Christian Seviers. (Dans la VM invitée Lubuntu sous Vbox.)
- n = 34 dans Clingo par Anders Kaseorg. (Dans la VM invitée Lubuntu sous Vbox.)
- n = 31 en rouille par Anders Kaseorg.
- n = 29 dans Clojure par NikoNyrh.
- n = 29 en C par Bartavelle.
- n = 27 à Haskell par Bartavelle
- n = 24 en Pari / gp par alephalpha.
- n = 22 en Python 2 + pypy par moi.
- n = 21 dans Mathematica par alephalpha. (Auto-déclaré)
Futures primes
Je vais maintenant donner une prime de 200 points pour toute réponse atteignant n = 80 sur ma machine en deux minutes.