◂ 4 décembre 2025 ▸
Printing Department : Compter les symboles autour de chaque case d'une grille et effacer progressivement ceux peu entourés
@@.@@..@@@@@ …
@@@@@@@@.@.. …
@.@.@.@@@@@. …
⋮
- 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)