Il period
di una stringa è lo spostamento diverso da zero più breve in modo che la stringa corrisponda a se stessa, ignorando tutte le parti che sporgono. Quindi, ad esempio, abcabcab
ha periodo 3
. Per convenzione diciamo che se non esiste tale spostamento, una stringa ha un periodo pari alla sua lunghezza. Quindi il periodo di abcde
è 5
e il periodo di a
è 1
.
In termini più formali, il periodo di una stringa S
è il minimo, i > 0
quindi S[1,n-i] == S[i+1,n]
(indicizzazione da 1
).
Per una data stringa S di potenza di due lunghezze, calcoleremo il periodo di tutti i suoi prefissi di potenza di due lunghezze. Ad esempio, considera S = abcabcab
. I periodi che calcoleremo sono:
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
In effetti, avremo solo l'output della matrice di punti, cioè [1, 2, 3, 3]
.
Per una data potenza positiva di due n
, considera tutte le possibili stringhe binarie S
. Ricordiamo che una stringa binaria è semplicemente una stringa di 1
s e 0
s così ci sono esattamente 2^n
tali stringhe (che è 2
alla potenza n
). Per ognuno possiamo calcolare questa serie di periodi.
La sfida è scrivere un codice che accetta
n
(una potenza di due) come input e calcola quanti array così distinti ci sono.
Le risposte per n = 1, 2, 4, 8, 16, 32, 64, 128
sono:
1, 2, 6, 32, 320, 6025, 216854, 15128807
L'insieme completo di matrici di periodi distinti per n = 4
è:
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
Punto
Eseguirò il tuo codice sul mio computer con Ubuntu per 10 minuti. Il tuo punteggio è il più grande n
per il quale il tuo codice termina in quel momento. In caso di pareggio, n
vince la risposta che completa il più grande comune più veloce. Nel caso in cui ci sia un pareggio entro 1 secondo sugli orari, la prima risposta pubblicata vince.
Lingue e biblioteche
Puoi utilizzare qualsiasi lingua e libreria disponibili. Si prega di includere una spiegazione completa su come eseguire / compilare il codice in Linux, se possibile. »
Il tuo codice dovrebbe effettivamente calcolare le risposte e non, ad esempio, generare solo valori precalcolati.
Voci principali
- 2 minuti e 21 secondi per n = 128 in C # di Peter Taylor
- 9 secondi per n = 32 in Rust di isaacg
n
, lo accetteresti? Non è ben definito dove si trova il confine tra hardcoding e calcolo effettivo.
abcab
. Sono tutte tranne le ultime 3 lettere abcab
. Questi corrispondono e la rimozione di un numero inferiore di lettere non corrisponde.