#!/usr/bin/env python3 from functools import reduce from re import findall from copy import deepcopy import sys # import numpy as np filename = sys.argv[1] if len(sys.argv) == 2 \ else "in/" + sys.argv[0].split('/')[-1].rstrip(".py") + ".pzl" data = open(filename).read() lines = data.rstrip('\n').split('\n') res1 = 0 res2 = 0 D = dict() for x,line in enumerate(lines): for y, c in enumerate(line): D[(x,y)] = c def solve(D, remove=False): r = 0 for (x, y), c in D.items(): if c != '@': continue n = 0 for dx, dy in [(1, -1), (1, 0), (1, 1), (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1)]: d = (x + dx, y + dy) if d in D and D[d] == '@': n += 1 if n < 4: r += 1 if remove == True: D[(x, y)] = '.' return r res1 = solve(D) while (r := solve(D, remove=True)) > 0: res2 += r print('res1:', res1) print('res2:', res2)