Advent of code

 5 décembre 2023 

  If You Give A Seed A Fertilizer : Faire des correspondances de nombres sur de larges intervalles qui se chevauchent
seeds: 364807853 408612163 302918330
   
  
   
seed-to-soil map:
   
2069473506 3732587455 1483883
   
3235691256 2348990120 6550341
   
                  ⋮   
  
   
soil-to-fertilizer map:
   
2700214958 2743391193 363795571
   
                  ⋮   
humidity-to-location map:
   
                  
  1. code1.py
  2. code2.py
  3. code2_oo.py
  4. code2_oo_nonRecursif.py
  5. intervalle.py
import re
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]

def parse_ints(line: str) -> list[int]:
    return [ int(tok) for tok in re.split('[^0-9]+', line) if tok ]

seeds = parse_ints(lines[0])

""" Pour les règles de transformations entre les valeurs de
    seed => soil => fertilizer => water => light => temperature => humidity => location """
Regle =  tuple[int, int, int]   # nouvelle valeur de base, ancienne valeur de base, nb de valeurs
Regles = list[Regle]
transformations: list[Regles] = []

for line in lines[1:]:
    if not line:
        continue
    elif ':' in line:
        print("Lecture des règles de " + line.split()[0])
        transformations.append([])
        continue
    else:
        transformations[-1].append( tuple(parse_ints(line)) )

def calculer_valeur_suivante(regles: Regles, value: int) -> int:
    for new_val_base, old_val_base, size in regles:
        if  old_val_base  <=  value  <  old_val_base + size:
            return value + new_val_base - old_val_base
    return value

def seed_to_location(seed: int) -> int:
    id = seed
    for regles in transformations:
        id = calculer_valeur_suivante(regles, id)
    return id

reponse1 = min(seed_to_location(seed) for seed in seeds)

print("Réponse partie 1:", reponse1)