• # Pas besoin de tout stocker !

    Posté par (site web personnel) . En réponse au message Advent of Code 2023 : Day 9. Évalué à 3.

    En fait, si on y réfléchit un peu, on s'aperçoit qu'il n'est pas utile de stocker toute la liste, ni toute la liste des dérivées, ni toute la liste des dérivées secondes, etc. Tout ce dont on a besoin, c'est :

    • pendant la phase de calcul des dérivées, la liste des valeurs de la dernière dérivée calculée, pour pouvoir vérifier si elle sont toutes nulles ;
    • pour pouvoir extrapoler, les dernières valeurs – et pour la seconde partie, les premières valeur – de chaque dérivée jusqu'à la dernière significative.

    Par exemple, en cours de calcul :

    10 13 16 21 30 45 68 ← données d'origines
    10 68 ← données stockées
     3 23
     0 2 4 6 8
     ? ? ? ?
    

    En fin de calcul :

    10 68 ← données stockées
     3 23
     0 8
     2 2
    

    Pour extrapoler à droite, si vous prenez le temps de vérifier ce qui se passe, il suffit en fait de faire la somme de toutes les dernières valeurs.

    Et pour extrapoler à gauche, la somme de toutes les valeurs, en passant en négatif celles d'une ligne sur deux. Ou, pour le dire autrement, la somme du produit des premières valeurs multipliées par moins un élevé à une puissance égale au rang de la ligne d'où vient la valeur courante.