Advent of code

 11 décembre 2023 

  Cosmic Expansion : Compter des distances de Manhattan entre des points avec lignes/colonnes vides à démultiplier
..........................
   
..........#.....#.........
   
.......................#..
   
             
  1. code1.py
  2. code1_maths.py
  3. code2.py
  4. 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)