J'ai un problème de combinatoire que j'aimerais mettre sur l' OEIS - le problème est que je n'ai pas assez de termes. Ce défi de code est de m'aider à calculer plus de termes, et le gagnant sera l'utilisateur avec la soumission contenant le plus grand nombre de termes.
Le problème
Supposons que je vous donne un tableau triangulaire d'ampoules de longueur latérale :
o
o o
o o o
o o o o
o o o o o
o o o o o o
1 2 ... n
Je vais allumer trois ampoules qui forment un triangle équilatéral "vertical" comme dans l'exemple suivant:
o
o x
o o o
o o o o
o x o o x
o o o o o o
Avant d'allumer les lumières, votre travail consiste à retirer autant d'ampoules que possible de la matrice, sans perdre la possibilité de déduire le triangle d'ampoules allumées. Pour être clair, si une ampoule a été retirée, elle ne s'allume pas lorsque sa position est allumée.
Par exemple, si vous supprimiez les ampoules suivantes (marquées par .
), vous ne verriez que les deux lumières suivantes s'allumer (marquées par x
), ce qui suffit à déduire uniquement la troisième position (non éclairée):
. .
. 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
Soit a(n)
le nombre maximum d'ampoules pouvant être retirées sans introduire d'ambiguïtés.
Exemple
Avec un algorithme naïf, j'ai vérifié les valeurs jusqu'à un triangle de longueur de côté 7, comme indiqué ci-dessous:
.
. . 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
Notation
La soumission qui calcule la séquence [a(2), a(3), ..., a(n)]
des n plus grands gains. Si deux soumissions ont des séquences identiques, alors celle qui a été publiée plus tôt l'emporte.
Bien que cela ne soit pas nécessaire pour la soumission, ce serait instructif pour moi si vous postez une construction des tableaux triangluar résultants, comme dans l'exemple ci-dessus.