Advent of code

 4 décembre 2025 

  Printing Department : Compter les symboles autour de chaque case d'une grille et effacer progressivement ceux peu entourés
@@.@@..@@@@@
   
@@@@@@@@.@..
   
@.@.@.@@@@@.
   
      
  1. code.py
import time
AFFICHAGE_GRILLE = True

def afficher(lines, pause=0):
    global AFFICHAGE_GRILLE
    if not AFFICHAGE_GRILLE:
        return
    CHARS = (' ', '\u2585', '\033[07m\u2585\033[0m', '\033[07m \033[0m')
    # Rendre pairs les nb colonnes et lignes 
    lines = [line[1:-1]+(['.'] if len(line)%2 else []) for line in lines[1:-1]]
    if len(lines)%2:
        lines.append(len(lines[0])*['.'])
    t = ''
    for y in range(0, len(lines), 2):
        for x in range(len(lines[0])):
            t = t + CHARS[2*(lines[y][x] == '@') + (lines[y+1][x] == '@')] 
        t = t + '\n'
    print(len(lines[0])*'=' + '\n' + t + len(lines[0])*'=')
    time.sleep(pause)


lines = []
with open('input.txt', 'r', encoding='utf-8') as f:
    for line in f:
        lines.append(list('.' + line.strip() + '.'))

# Ajouter des bords vides
lines = [len(lines[0])*['.']] + lines + [len(lines[0])*['.']]


AUTOUR = [ (dx,dy)  for dx in range(-1,2)
                    for dy in range(-1,2) 
                    if not (dx==0 and dy==0) ]
def est_papier_peu_entoure(lines, x, y):
    global AUTOUR
    if lines[y][x] == '@':
        n = 0
        for dx,dy in AUTOUR:
            if lines[y+dy][x+dx] == '@':
                n += 1
        return n < 4
    else:
        return False


rep1 = sum( est_papier_peu_entoure(lines, x, y) 
            for x in range(1,len(lines[0])-1) 
            for y in range(1,len(lines)-1) )
afficher(lines, pause=.5)

         
rep2 = 0
changes = True
while changes:
    afficher(lines, pause=0.1)
    changes = False
    for y in range(1,len(lines)-1):
        for x in range(1,len(lines[0])-1):
            if est_papier_peu_entoure(lines, x, y):
                rep2 += 1
                lines[y][x] = '.'
                changes = True
         
print("Réponse partie 1:", rep1)
print("Réponse partie 2:", rep2)