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:
""" Version non récursive, plus besoin de deux fonctions différentes
20% plus rapide que la version OO récursive. """
def calculer_intervalles_suivants(regles: Transformation, intervalles: list[Intervalle]) -> list[Intervalle]:
intervalles_calcules = []
intervalles_a_traiter = intervalles
for intervalle_regle, decalage in regles:
new_inter_a_traiter = []
for intervalle in intervalles_a_traiter:
intersection = intervalle & intervalle_regle
if intersection.est_vide():
new_inter_a_traiter.append(intervalle)
else:
intervalles_calcules.append(intersection.decale(decalage))
new_inter_a_traiter.extend(intervalle - intersection)
intervalles_a_traiter = new_inter_a_traiter
intervalles_calcules.extend(intervalles_a_traiter)
return list(intervalles_calcules)
intervalles = seeds_intervalles
for regles in transformations:
intervalles = calculer_intervalles_suivants(regles, intervalles)