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

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

def calc_muls(text):
    lines = text.split('mul')
    result = 0
    for line in lines:
        if re.search('^\\([0-9]+,[0-9]+\\)', line):
            #  a, b, *_ = re.split('[^0-9]+', line)
            a, b, *_ = re.findall('[0-9]+', line)
            result += int(a) * int(b)
    return result

print("Réponse partie 1:", calc_muls(text))

    
### Part 2 : strip from don't to do() ###
start = text.find("don't()")
while start >= 0:
    end = text.find("do()", start)
    if end == -1:
        end = len(text)
    text = text[0:start] + text[end:]
    start = text.find("don't()", start)


print("Réponse partie 2:", calc_muls(text))