◂ 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
import itertools
MULTIPLICATEURS = [2, 10**6]
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]
galaxies = [ (x,y) for y in range(len(lines)) for x in range(len(lines[0])) if lines[y][x] == '#' ]
def dist_manhattan_mult(p1: list[int,int], p2: list[int,int], indices_a_multiplier: list[list[int]], multiplicateur: int) -> int:
nb = 0
for i in (0,1):
ind_min, ind_max = (p1[i],p2[i]) if p1[i] < p2[i] else (p2[i],p1[i])
nb += ind_max - ind_min
nb += (multiplicateur - 1) * len([k for k in indices_a_multiplier[i] if ind_min < k < ind_max])
return nb
indices_x_a_multiplier = [ x for x in range(len(lines[0])) if all(line[x]=='.' for line in lines) ]
indices_y_a_multiplier = [ y for y,line in enumerate(lines) if not '#' in line ]
indices_a_multiplier = [indices_x_a_multiplier, indices_y_a_multiplier]
for partie in (0,1):
somme_distances = sum( dist_manhattan_mult(galaxie1, galaxie2, indices_a_multiplier, MULTIPLICATEURS[partie])
for (galaxie1, galaxie2) in itertools.combinations(galaxies, 2) )
print(f"Réponse partie {partie+1}:", somme_distances)