La tarea es calcular OEIS A005434 lo más rápido posible.
Considere una cadena binaria S
de longitud n
. Indexando desde 1
, podemos determinar si S[1..i+1]
coincide S[n-i..n]
exactamente para todos i
en orden de 0
a n-1
. Por ejemplo,
S = 01010
da
[Y, N, Y, N, Y].
Esto se debe a que 0
coincide 0
, 01
no coincide 10
, 010
coincide 010
, 0101
no coincide 1010
y finalmente 01010
coincide a sí mismo.
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
.
El observador notará que esta pregunta es una variante más simple de otra pregunta reciente mía . Sin embargo, espero que los trucos inteligentes puedan hacer esto mucho más rápido y fácil.
Tarea
Para aumentar a n
partir de 1
, su código debería salir n, f(n)
.
Ejemplo de respuestas
Para n = 1..24
, las respuestas correctas son:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
Puntuación
Su código debe iterar desde n = 1
dar la respuesta para cada uno n
por turno. Tomaré el tiempo de 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 Virtualbox en una máquina virtual invitada de Lubuntu (en mi host de Windows 7).
Mi computadora portátil 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 = 599 en Rust bu Anders Kaseorg.
- n = 30 en C por Grimy. La versión paralela llega a 32 cuando se ejecuta de forma nativa en cygwin.