Advent of code

 3 décembre 2023 

  Gear Ratios : Trouver des nombres qui touchent des symboles dans une grille
..172...................
   
..........*.......712...
   
.......823.835......%...
   
            
Mon algo pour la partie 2 est plus compliqué que nécessaire. Il suffit d'avoir un tableau qui compte le nombre de chaque carte, et d'augmenter au fur et à mesure qu'on les passe en revue.
  1. code1.py
  2. code1_bordSeulement.py
  3. code2.py
  4. code2_court.py
  5. code2_depuis_gears_plutot_que_nombres.py
import re
lines = [line[:-1] for line in open("input.txt", 'r').readlines()]

gears = dict()
for y, line in enumerate(lines):
    for num in re.finditer('[0-9]+', line):
        for gear_coord in ((h,w) for w in range(max(0,num.start()-1), min(num.end()+1,len(lines[0]))) for h in range(max(0,y-1), min(y+2,len(lines))) if lines[h][w] == '*'):
            gears.setdefault(gear_coord, []).append(int(num.group()))

print("Réponse partie 2:", sum(numbers[0]*numbers[1] for numbers in gears.values() if len(numbers) == 2))