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 numpy, itertools

MULTIPLICATEURS = [2, 10**6]

f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]

def somme_distances_valeurs(valeurs: list[int]) -> int:
    ecarts = [ vals[1] - vals[0] for vals in itertools.pairwise(valeurs) ]
    return sum( (i+1) * (len(valeurs)-(i+1)) * ecart  for i,ecart in enumerate(ecarts) )

for partie in (0,1):
    somme_distances = 0
    for _ in range(2):    # On fait les choses pour les lignes, puis les colonnes après transposition
        indices_y_a_multiplier = [ y  for y,line in enumerate(lines)  if not '#' in line ]
        indices_y_galaxies = [y  +  (MULTIPLICATEURS[partie]-1)*len([_ for _ in indices_y_a_multiplier if _ < y])  
                              for y,line in enumerate(lines)  for c in line  if c == '#']

        somme_distances += somme_distances_valeurs(indices_y_galaxies)

        lines = numpy.array([list(line) for line in lines]).transpose().tolist()       # Transposer les lignes
    
    print(f"Réponse partie {partie+1}:", somme_distances)