◂ 11 décembre 2023 ▸
Cosmic Expansion : Compter des distances de Manhattan entre des points avec lignes/colonnes vides à démultiplier
.......................... …
..........#.....#......... …
.......................#.. …
⋮
- code1.py
- code1_maths.py
- code2.py
- code2_maths.py
""" On pourrait bien entendu utiliser le code de la partie 2
en utilisant un facteur ×2 au lieu de ×1'000'000
Mais c'est sympa de faire le code qui ajoute des lignes.
"""
import itertools
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]
indices_y_a_multiplier = [ y for y,line in enumerate(lines) if not '#' in line ]
for y in indices_y_a_multiplier[::-1]: # depuis la fin pour ne pas décaler les indices
lines.insert(y, len(lines[0]) * '.')
indices_x_a_multiplier = [ x for x in range(len(lines[0])) if all(line[x]=='.' for line in lines) ]
for x in indices_x_a_multiplier[::-1]: # idem, depuis la fin
lines = [ line[:x] + '.' + line[x:] for line in lines ]
galaxies = [ (x,y) for y in range(len(lines)) for x in range(len(lines[0])) if lines[y][x] == '#' ]
def dist_manhattan(p1: list[int,int], p2: list[int,int]) -> int:
return sum( abs(p1[i] - p2[i]) for i in (0,1) )
somme_distances = sum( dist_manhattan(galaxie1, galaxie2)
for (galaxie1, galaxie2) in itertools.combinations(galaxies, 2) )
print("Réponse partie 1:", somme_distances)
##### alternatives #####
indices_x_a_multiplier = [ x for x in range(len(lines[0])) if '#' not in [line[x] for line in lines] ]