Considere uma cadeia Sde 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 ina ordem de 0para 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 0combinações 0, 01tem distância de Hamming 2 a 10, 010combina 010, 0101tem distância de Hamming 4 a 1010 e, finalmente, 01010combina-se.
No entanto, estamos interessados apenas em saídas onde a distância de Hamming é no máximo 1. Portanto, nesta tarefa, reportaremos a Yse a distância de Hamming é no máximo uma e Noutra. Então, no nosso exemplo acima, teríamos
[Y, N, Y, N, Y]
Define f(n)-se o número de matrizes distintas de Ys e Ns que se tem quando iteração sobre todas as 2^nsequências de bits diferentes possíveis Sde comprimento n.
Tarefa
Para aumentar a npartir 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 = 1a resposta de cada um n. Eu cronometrarei a corrida inteira, matando-a depois de dois minutos.
Sua pontuação é a mais alta que nvocê 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.
