sfondo
Una sequenza di Davenport-Schinzel ha due parametri interi positivi d
e n
. Indicheremo l'insieme di tutte le sequenze di Davenport-Schinzel per determinati parametri di DS(d,n)
.
Considera tutte le sequenze dei numeri naturali 1
come n
, compreso, che soddisfano:
- Non ci sono due numeri consecutivi nella sequenza identici.
- Non esiste una sottosequenza (non necessariamente consecutiva) di lunghezza maggiore di
d
, che si alterna tra due numeri diversi.
Puoi L
indicare la lunghezza massima di una tale sequenza (data d
e n
). Quindi, DS(d,n)
è l'insieme di tutte queste sequenze con lunghezza L
.
Alcuni esempi potrebbero essere d'aiuto. Let d = 4
, n = 3
. Le sequenze più lunghe possibili con questi vincoli hanno L = 8
. Quindi il seguente è un membro di DS(4,3)
:
[1, 2, 1, 3, 1, 3, 2, 3]
Non ci sono numeri identici consecutivi e ci sono sottosequenze alternate di lunghezza 4
, ma non più lunghe:
1 2 1 2
1 2 1 2
1 3 1 3
1 3 1 3
2 3 2 3
2 3 2 3
1 3 1 3
1 3 1 3
I seguenti esempi non sono in DS(4,3)
:
[1, 2, 2, 3, 1, 3, 2, 3] # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1] # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2] # Longer valid sequences for d = 4, n = 3 exist.
Per ulteriori informazioni consultare MathWorld e OEIS e i riferimenti che elencano.
La sfida
Dati due numeri interi positivi, n
e d
, generare qualsiasi sequenza Davenport-Schinzel in DS(d,n)
. Si noti che questi non sono in genere univoci, quindi emettere un singolo risultato valido.
È possibile scrivere un programma o una funzione, prendendo l'input tramite STDIN (o l'alternativa più vicina), l'argomento della riga di comando o l'argomento della funzione e restituendo il risultato dalla funzione o stampandolo su STDOUT (o l'alternativa più vicina).
Per l'output è possibile utilizzare qualsiasi stringa o formato elenco comodo e non ambiguo.
Questo è il golf del codice, quindi vince l'invio più breve (in byte).
Lunghezza delle sequenze
Dal momento che le sequenze non sono uniche, non è molto utile per singoli esempi in questa sfida. Tuttavia, i due problemi di validità generale sono abbastanza facili da verificare per qualsiasi output, quindi la domanda principale è solo se la sequenza ha la lunghezza giusta (o c'è una sequenza valida più lunga). Pertanto, ecco un elenco di 1 noto L
per dato d
e n
:
\
d\n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
\-----------------------------------------------------------
1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 | 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
4 | 1 4 8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
5 | 1 5 10 16 22 29 ...
6 | 1 6 14 23 34 ...
7 | 1 7 16 28 41 ...
8 | 1 8 20 35 53 ...
9 | 1 9 22 40 61 ...
10 | 1 10 26 47 73 ...
Non è necessario codificare in modo rigido tutte le informazioni da questa tabella nell'invio.
1 Questa tabella è del 1994, quindi da allora potrebbero esserci stati più progressi, ma dubito che qualsiasi presentazione sarà in grado di gestire anche le voci più grandi in questa tabella in un ragionevole lasso di tempo.