Considere uma cadeia S
de comprimento binária n
. Indexando de 1
, podemos calcular as distâncias de Hamming entre S[1..i+1]
e S[n-i..n]
para todos i
na ordem de 0
para n-1
. A distância de Hamming entre duas cordas de igual comprimento é o número de posições nas quais os símbolos correspondentes são diferentes. Por exemplo,
S = 01010
dá
[0, 2, 0, 4, 0].
Isso ocorre porque 0
combinações 0
, 01
tem distância de Hamming 2 a 10
, 010
combina 010
, 0101
tem distância de Hamming 4 a 1010
e, finalmente, 01010
combina-se.
No entanto, estamos interessados apenas em saídas onde a distância de Hamming é no máximo 1. Portanto, nesta tarefa, reportaremos a Y
se a distância de Hamming é no máximo uma e N
outra. Então, no nosso exemplo acima, teríamos
[Y, N, Y, N, Y]
Define f(n)
-se o número de matrizes distintas de Y
s e N
s que se tem quando iteração sobre todas as 2^n
sequências de bits diferentes possíveis S
de comprimento n
.
Tarefa
Para aumentar a n
partir de 1
, seu código deve ser exibido f(n)
.
Respostas de exemplo
Pois n = 1..24
, as respostas corretas são:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Pontuação
Seu código deve repetir n = 1
a resposta de cada um n
. Eu cronometrarei a corrida inteira, matando-a depois de dois minutos.
Sua pontuação é a mais alta que n
você obtém nesse período.
Em caso de empate, a primeira resposta vence.
Onde meu código será testado?
Vou executar seu código no meu laptop Windows 7 (um pouco antigo) sob o cygwin. Como resultado, forneça qualquer assistência possível para facilitar isso.
Meu laptop possui 8 GB de RAM e uma CPU Intel i7 5600U@2.6 GHz (Broadwell) com 2 núcleos e 4 threads. O conjunto de instruções inclui SSE4.2, AVX, AVX2, FMA3 e TSX.
Entradas principais por idioma
- n = 40 em Rust usando CryptoMiniSat, de Anders Kaseorg. (Na VM convidada do Lubuntu, no Vbox.)
- n = 35 em C ++ usando a biblioteca BuDDy, de Christian Seviers. (Na VM convidada do Lubuntu, no Vbox.)
- n = 34 em Clingo por Anders Kaseorg. (Na VM convidada do Lubuntu, no Vbox.)
- n = 31 em Rust por Anders Kaseorg.
- n = 29 in Clojure por NikoNyrh.
- n = 29 in C por bartavelle.
- n = 27 in Haskell por bartavelle
- n = 24 in Pari / gp por alefalpha.
- n = 22 em Python 2 + pypy por mim.
- n = 21 no Mathematica por alefalpha. (Auto-relatado)
Recompensas futuras
Agora, darei uma recompensa de 200 pontos por qualquer resposta que chegue a n = 80 na minha máquina em dois minutos.