• # Python

    Posté par . En réponse au message Advent of Code 2023, jour 11. Évalué à 1.

    Aujourd'hui, je considère ma carte comme une grille avec 0,0 en haut à gauche, puis je cherche les lignes/colonnes vides, puis l'emplacement des galaxies que j'associe par paires.

    Je cherche ensuite la distance entre les paires de galaxies, et ajoute à ces distances le nombre de lignes/colonnes vides comprises entre les deux galaxies multiplié par un facteur (1 pour la 1er partie, 1000000-1 pour la 2e ).

    Le code :

    #!/bin/python3
    def getVoid(puzzle):
     void_lines = []
     for i, line in enumerate(puzzle):
     if all([e == "." for e in line]):
     void_lines.append(i)
     void_columns = []
     for col in range(len(puzzle[0])):
     if all([l[col] == "." for l in puzzle]):
     void_columns.append(col)
     return void_lines, void_columns
    def getGalaxies(puzzle):
     galaxies = []
     for i, line in enumerate(puzzle):
     for j, space in enumerate(line):
     if space == "#":
     galaxies.append((j,i))
     return galaxies
    def getPairs(galaxies):
     pairs = []
     for i in range(len(galaxies)):
     for p in range(i):
     pairs.append((galaxies[i],galaxies[p]))
     return pairs
    def getSpaceBetween(pair, void_lines, void_columns, space_void):
     spacex = abs(pair[1][0] - pair[0][0])
     spacex += sum([space_void if i in void_columns else 0 for i in range(min([pair[0][0],pair[1][0]]),max(pair[0][0],pair[1][0]))])
     spacey = abs(pair[1][1] - pair[0][1])
     spacey += sum([space_void if i in void_lines else 0 for i in range(min([pair[0][1],pair[1][1]]),max(pair[0][1],pair[1][1]))])
     return spacex+spacey
    def solve1(puzzle,testing=False):
     s=0
     void_lines, void_columns = getVoid(puzzle)
     galaxies = getGalaxies(puzzle)
     pairs = getPairs(galaxies)
     for p in pairs:
     s += getSpaceBetween(p,void_lines,void_columns,1)
     if testing:
     print(s)
     return s
    def solve2(puzzle,testing=False):
     s = 0
     void_lines, void_columns = getVoid(puzzle)
     galaxies = getGalaxies(puzzle)
     pairs = getPairs(galaxies)
     for p in pairs:
     s += getSpaceBetween(p,void_lines,void_columns,1000000-1)
     if testing:
     print(s)
     return s

    L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès