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.
- 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)