Considere una cadena binaria S
de longitud n
. Indexando desde 1
, podemos calcular las distancias de Hamming entre S[1..i+1]
y S[n-i..n]
para todos i
en orden de 0
a n-1
. La distancia de Hamming entre dos cadenas de igual longitud es el número de posiciones en las que los símbolos correspondientes son diferentes. Por ejemplo,
S = 01010
da
[0, 2, 0, 4, 0].
Esto se debe a que 0
coincide 0
, 01
tiene una distancia de Hamming de dos a 10
, 010
coincide 010
, 0101
tiene una distancia de Hamming de cuatro a 1010
y finalmente 01010
coincide.
Sin embargo, solo nos interesan las salidas donde la distancia de Hamming es como máximo 1. Entonces, en esta tarea, informaremos Y
si la distancia de Hamming es como máximo una y N
otra. Entonces, en nuestro ejemplo anterior, obtendríamos
[Y, N, Y, N, Y]
Definir f(n)
a ser el número de matrices distintas de Y
s y N
s se obtiene cuando se itera sobre todas las 2^n
diferentes cadenas de bits posibles S
de longitud n
.
Tarea
Para aumentar a n
partir de 1
, su código debería salir f(n)
.
Ejemplo de respuestas
Para n = 1..24
, las respuestas correctas son:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Puntuación
Su código debe iterar desde n = 1
dar la respuesta para cada uno n
por turno. Voy a cronometrar toda la carrera, matándola después de dos minutos.
Tu puntaje es el más alto n
que alcanzas en ese momento.
En caso de empate, la primera respuesta gana.
¿Dónde se probará mi código?
Ejecutaré su código en mi computadora portátil Windows 7 (un poco vieja) con cygwin. Como resultado, brinde toda la ayuda que pueda para ayudar a que esto sea más fácil.
Mi laptop tiene 8GB de RAM y una CPU Intel i7 5600U@2.6 GHz (Broadwell) con 2 núcleos y 4 hilos. El conjunto de instrucciones incluye SSE4.2, AVX, AVX2, FMA3 y TSX.
Entradas principales por idioma
- n = 40 en Rust usando CryptoMiniSat, por Anders Kaseorg. (En la máquina virtual invitada de Lubuntu en Vbox).
- n = 35 en C ++ usando la biblioteca BuDDy, por Christian Seviers. (En la máquina virtual invitada de Lubuntu en Vbox).
- n = 34 en Clingo por Anders Kaseorg. (En la máquina virtual invitada de Lubuntu en Vbox).
- n = 31 en Rust por Anders Kaseorg.
- n = 29 en Clojure por NikoNyrh.
- n = 29 en C por bartavelle.
- n = 27 en Haskell por bartavelle
- n = 24 en Pari / gp por alephalpha.
- n = 22 en Python 2 + pypy por mí.
- n = 21 en Mathematica por alephalpha. (Autoinformado)
Recompensas futuras
Ahora daré una recompensa de 200 puntos por cualquier respuesta que llegue a n = 80 en mi máquina en dos minutos.