◂ 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 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)