◂ 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.
- code1.py
- code1_bordSeulement.py
- code2.py
- code2_court.py
- code2_depuis_gears_plutot_que_nombres.py
import re
f = open("input.txt", 'r', encoding='utf-8')
lines = [line[:-1] for line in f.readlines()]
HEIGHT = len(lines)
WIDTH = len(lines[0])
def is_touching_symbol(lines: list[str], y: int, x1: int, x2: int) -> bool:
for h in range(max(0,y-1), min(y+2,HEIGHT)):
for w in range(max(0,x1-1), min(x2+1,WIDTH)):
if lines[h][w] not in '.0123456789':
return True
return False
somme_nombres = 0
for y, line in enumerate(lines):
for num in re.finditer('[0-9]+', line):
if is_touching_symbol(lines, y, *num.span()):
somme_nombres += int(num.group())
print("Réponse partie 1:", somme_nombres)