Il compito è calcolare OEIS A005434 il più rapidamente possibile.
Considera una stringa binaria Sdi lunghezza n. Indicizzando da 1, possiamo determinare se S[1..i+1]corrisponde S[n-i..n]esattamente a tutti iin ordine da 0a n-1. Per esempio,
S = 01010
dà
[Y, N, Y, N, Y].
Questo perché le 0partite 0, 01non corrispondono 10, le 010partite 010, 0101non corrispondono 1010 e infine si 01010abbinano da sole.
Definire f(n)il numero di matrici distinte di Ys che Nsi ottengono quando si scorre su tutte le 2^ndiverse stringhe Sdi bit possibili di lunghezza n.
L'osservatore noterà che questa domanda è una variante più semplice di un'altra mia recente domanda . Tuttavia, mi aspetto che i trucchi intelligenti possano renderlo molto più veloce e più facile.
Compito
Per aumentare a npartire da 1, il tuo codice dovrebbe essere prodotto n, f(n).
Risposte di esempio
Per n = 1..24, le risposte corrette sono:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
punteggio
Il tuo codice dovrebbe ripetere dal n = 1dare la risposta per ciascuno na turno. Farò cronometrare l'intera corsa, uccidendola dopo due minuti.
Il tuo punteggio è il più alto che nriesci a raggiungere in quel momento.
In caso di pareggio, vince la prima risposta.
Dove verrà testato il mio codice?
Eseguirò il tuo codice sotto Virtualbox in una VM guest Lubuntu (sul mio host Windows 7).
Il mio laptop ha 8 GB di RAM e una CPU Intel i7 5600U@2,6 GHz (Broadwell) con 2 core e 4 thread. Il set di istruzioni include SSE4.2, AVX, AVX2, FMA3 e TSX.
Voci principali per lingua
- n = 599 in Rust bu Anders Kaseorg.
- n = 30 in C di Grimy. La versione parallela arriva a 32 se eseguita nativamente in cygwin.