El period
de una cadena es el desplazamiento más corto distinto de cero, de modo que la cadena coincide con sí misma, ignorando cualquier parte que sobresalga. Entonces, por ejemplo, abcabcab
tiene punto 3
. Por convención, decimos que si no existe tal cambio, entonces una cadena tiene un período igual a su longitud. Entonces, el período de abcde
es 5
y el período de a
es 1
.
En términos más formales, el período de una cadena S
es el mínimo i > 0
para que S[1,n-i] == S[i+1,n]
(indexando desde 1
).
Para una cadena S dada de potencia de dos longitudes, calcularemos el período de todos sus prefijos de potencia de dos longitudes. Por ejemplo, considere S = abcabcab
. Los períodos que calcularemos son:
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
De hecho, solo mostraremos el conjunto de períodos, es decir [1, 2, 3, 3]
.
Para una potencia positiva dada de dos n
, considere todas las cadenas binarias posibles S
. Recuerde que una cadena binaria es simplemente una cadena de 1
sys, 0
por lo que existen exactamente 2^n
esas cadenas (eso es lo que tiene que ver 2
con la potencia n
). Para cada uno podemos calcular este conjunto de períodos.
El desafío es escribir código que tome
n
(una potencia de dos) como entrada y calcule cuántas matrices distintas existen.
Las respuestas para n = 1, 2, 4, 8, 16, 32, 64, 128
son:
1, 2, 6, 32, 320, 6025, 216854, 15128807
El conjunto completo de matrices de períodos distintos para n = 4
es:
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
Puntuación
Ejecutaré su código en mi computadora con Ubuntu durante 10 minutos. Su puntaje es el mayor n
por el cual su código termina en ese momento. En el caso de un empate, la respuesta que completa la mayor n
victoria conjunta . En el caso de que haya un empate dentro de 1 segundo en los tiempos, la primera respuesta publicada gana.
Idiomas y bibliotecas
Puede usar cualquier idioma y bibliotecas disponibles que desee. Incluya una explicación completa sobre cómo ejecutar / compilar su código en Linux, si es posible.
Su código realmente debería calcular las respuestas y no, por ejemplo, solo generar valores precalculados.
Entradas principales
- 2 minutos y 21 segundos para n = 128 en C # por Peter Taylor
- 9 segundos para n = 32 en óxido por isaacg
n
, ¿lo aceptaría? No está bien definido dónde está el límite entre el hardcoding y la informática real.
abcab
. Todas menos las últimas 3 letras son abcab
. Estos coinciden, y eliminar un número menor de letras no coincide.