Advent of code

 3 décembre 2024 

  Mull It Over : Trouver les bons motifs dans un texte et multiplier.
^+'*>,,why()mul(229,919)&$-#when()<do()
   
select()#'mul$%({]!how()^mul(832,589)'
   
                    
code.py crée un tableau des opérations pertinentes et les traite ensuite ;
code_orig.py cherche les mul de façon peu efficace, puis, pour la partie 2, supprime les parties entre don't() et do() avant de recommencer.
  1. code.py
  2. code_orig.py
import re, math

with open("input.txt", 'r', encoding='utf-8') as f:
    text = f.read()

tokens = re.findall("mul\\([0-9]{1,3},[0-9]{1,3}\\)|do\\(\\)|don't\\(\\)", text)

result1 = result2 = 0

do = True
for token in tokens:
    if token == "do()":
        do = True
    elif token == "don't()":
        do = False
    else:
        #product = math.prod([int(val) for val in re.findall('[0-9]+', token)])
        a, b = token[4:-1].split(',')
        product = int(a) * int(b)
        result1 += product
        if do:
            result2 += product

print("Réponse partie 1:", result1)
print("Réponse partie 2:", result2)