Il perioddi 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, abcabcabha 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è 5e il periodo di aè 1.
In termini più formali, il periodo di una stringa Sè il minimo, i > 0quindi 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 1s e 0s così ci sono esattamente 2^ntali stringhe (che è 2alla 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, 128sono:
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 nper il quale il tuo codice termina in quel momento. In caso di pareggio, nvince 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.