Advent of code

 1er décembre 2023 

  Trebuchet?! : Repérage de chiffres sous forme numérique ou de chaînes, avec chevauchement
four82nine74
   
hlpqrdh3
   
nvvxfxbgldrb2seven7twokxzbfkvptflnhlqjrthreeoneights
   
                          
Utilisé les Regexp en pensant que ce serait plus optimisé, mais ce qui a rendu plus compliqué au final que trois boucles imbriquées.
  1. code.py
import re

CHIFFRES = ['one','two','three','four','five','six','seven','eight','nine']

#   '[0-9]|one|two|three|four|five|six|seven|eight|nine'
PATTERN_DEBUT = re.compile('[0-9]|' + '|'.join(CHIFFRES))

#   '[0-9]|eno|owt|eerht|ruof|evif|xis|neves|thgie|enin' :
PATTERN_FIN   = re.compile('[0-9]|' + '|'.join((nom[::-1] for nom in CHIFFRES)))

def to_int(s : str) -> int :
    if s in CHIFFRES:         # pas optimisé: on passe deux fois dans CHIFFRES
        return CHIFFRES.index(s) + 1
    else:
        return int(s)

somme_partie1 = 0
somme_partie2 = 0

f = open("input.txt", 'r')
lines = [line[:-1] for line in f.readlines()]
for line in lines:
    #### PARTIE 1 ####
    tokens = re.findall('[0-9]', line)
    somme_partie1 += int(tokens[0] + tokens[-1])

    #### PARTIE 2 ####
    premier_chiffre = to_int(PATTERN_DEBUT.search(line).group())

    # chercher au début de la chaîne renversée, puis renverser le texte trouvé
    dernier_chiffre = to_int(PATTERN_FIN.search(line[::-1]).group()[::-1])

    somme_partie2 += 10 * premier_chiffre + dernier_chiffre
    

print("Réponse partie 1:", somme_partie1)
print("Réponse partie 2:", somme_partie2)