Considérons une chaîne binaire Sde 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 idans 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 0matchs 0, 01a une distance de Hamming deux à 10, 010matchs 010, 0101a une distance de Hamming quatre à 1010 et enfin 01010lui - 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 Ysi la distance de Hamming est au plus un et un Nautre. Donc, dans notre exemple ci-dessus, nous aurions
[Y, N, Y, N, Y]
Définissez f(n)le nombre de tableaux distincts de Ys et Ns que l'on obtient lors de l'itération sur toutes les 2^ndifférentes chaînes Sde bits possibles de longueur n.
Tâche
Pour augmenter à npartir 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 = 1la 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 nvous 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.
