Ho un problema combinatorio che vorrei mettere sull'OEIS , il problema è che non ho abbastanza termini. Questa sfida del codice è di aiutarmi a calcolare più termini e il vincitore sarà l'utente con l'invio contenente il maggior numero di termini.
Il problema
Supponiamo che io ti dia una serie triangolare di lampadine con lunghezza laterale :
o
o o
o o o
o o o o
o o o o o
o o o o o o
1 2 ... n
Accenderò tre lampadine che formano un triangolo equilatero "verticale" come nell'esempio seguente:
o
o x
o o o
o o o o
o x o o x
o o o o o o
Prima di accendere le luci, il tuo compito è rimuovere quante più lampadine possibili dall'array, senza perdere la capacità di dedurre il triangolo delle lampadine che è stato acceso. Per essere chiari, se una lampadina è stata rimossa, non si accende quando la sua posizione è accesa.
Ad esempio, se hai rimosso le seguenti lampadine (contrassegnate da .
) vedresti solo le seguenti due luci accese (contrassegnate da x
), che è abbastanza dedurre in modo univoco la terza posizione (non illuminata):
. .
. o . x
. . o . . o
o o o . => o o o .
o o o o . o x o o . <- the third unlit position
o . . . o o o . . . o o
Lascia che a(n)
sia il numero massimo di lampadine che è possibile rimuovere senza introdurre ambiguità.
Esempio
Con un algoritmo ingenuo, ho verificato i valori fino a un triangolo con lunghezza laterale 7, come mostrato di seguito:
.
. . o
. . o o . o
. . . . . o . o o .
. . . . o o o o o . o o . o .
. . . . o o o o . o o o o o . o . o . o o
. . . o o . o o o o . . o o o . . . o o o . o . o o o
a(2) = 3 a(3) = 4 a(4) = 5 a(5) = 7 a(6) = 9 a(7) = 11
punteggio
[a(2), a(3), ..., a(n)]
Vince l'invio che calcola la sequenza per la n maggiore. Se due invii hanno sequenze identiche, vince quello pubblicato in precedenza.
Sebbene non sia necessario per l'invio, sarebbe istruttivo per me pubblicare una costruzione degli array triangluar risultanti, come nell'esempio sopra.