Il compito è calcolare OEIS A005434 il più rapidamente possibile.
Considera una stringa binaria S
di lunghezza n
. Indicizzando da 1
, possiamo determinare se S[1..i+1]
corrisponde S[n-i..n]
esattamente a tutti i
in ordine da 0
a n-1
. Per esempio,
S = 01010
dà
[Y, N, Y, N, Y].
Questo perché le 0
partite 0
, 01
non corrispondono 10
, le 010
partite 010
, 0101
non corrispondono 1010
e infine si 01010
abbinano da sole.
Definire f(n)
il numero di matrici distinte di Y
s che N
si ottengono quando si scorre su tutte le 2^n
diverse stringhe S
di 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 n
partire 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 = 1
dare la risposta per ciascuno n
a turno. Farò cronometrare l'intera corsa, uccidendola dopo due minuti.
Il tuo punteggio è il più alto che n
riesci 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.