• [^] # Re: Simple et qui rappelle des souvenirs.

    Posté par (Mastodon) . En réponse au message Advent of Code 2023, jour 11. Évalué à 2.

    Ouais.
    En écrivant le commentaire, j'ai pensé à mieux, et voilà :

    def run(starmap, expansion):
     stars = [(x, y) for y, line in enumerate(starmap) for x, _ in enumerate(line) if _ == "#"]
     Xs = sorted({x for x, y in stars})
     Ys = sorted({y for x, y in stars})
     stars = [
     (
     sum(1 if _ in Xs else expansion for _ in range(x + 1)),
     sum(1 if _ in Ys else expansion for _ in range(y + 1)),
     )
     for x, y in stars
     ]
     return sum(
     abs(x2 - x1) + abs(y2 - y1)
     for x1, y1 in stars
     for x2, y2 in stars
     )//2

    On calcule directement les coordonnées en parcourant les lignes/colonnes vides ou pleines.
    Parfois on a beau essayer de simplifier notre vision du problème, on reste bloqué sur un truc, et on voit pas qu'il y a plus simple.

    • Yth.