Supponiamo che una sottostringa sia una sezione continua di una stringa originale. Ad esempio cat
è una sottostringa di concatenate
. Diremo che una sottostringa corretta è una sottostringa che non è uguale alla stringa originale. Ad esempio concatenate
è una sottostringa concatenate
ma non una sottostringa corretta. (le stringhe a carattere singolo non hanno sottostringhe appropriate)
Definiremo ora una sequenza usando questi termini. Il n esimo termine in questa sequenza sarà il numero più piccolo in modo tale che non v'è una vera e propria sottostringa della sua rappresentazione binaria che non è una sottostringa di qualsiasi termine precedente nella sequenza. Il primo termine è 10
.
Come esercizio, generiamo i primi 5 termini. Lavorerò in binario per semplificare le cose.
Il primo termine è 10
. Poiché 11
il numero più piccolo successivo, ha solo una sottostringa corretta, 1
che è anche una sottostringa di 10
, 11
non è nella sequenza. 100
tuttavia contiene la sottostringa corretta 00
che non è una sottostringa di 10
così 100
è il nostro prossimo termine. Il prossimo è 101
che contiene la sottostringa corretta unica che 01
lo aggiunge alla sequenza, quindi 110
contiene la sottostringa corretta 11
che è nuova aggiungendola alla sequenza.
Ora abbiamo
10, 100, 101, 110
111
è il prossimo ma contiene solo le sottostringhe 1
e 11
non è un termine. 1000
tuttavia contiene l' 000
aggiunta alla sequenza.
Ecco i primi termini della coppia in decimale
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Compito
O
Prendere n come input e generare il n esimo termine in questa sequenza (0 o 1 indicizzato)
Emette continuamente i termini della sequenza
Questo è il codice-golf le risposte sono segnate in byte con meno byte meglio.
n
)?
a(36)
è 47 (1 indicizzato).