#!/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 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)]: nx = x + dx ny = y + dy if (nx, ny) in D and D[(nx, ny)] == '@': n += 1 if n < 4: res1 += 1 def remove(D): 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)]: nx = x + dx ny = y + dy if (nx, ny) in D and D[(nx, ny)] == '@': n += 1 if n < 4: r += 1 D[(x, y)] = '.' return D, r D, r = remove(D) res2 += r while r > 0: D, r = remove(D) res2 += r print('res1:', res1) print('res2:', res2)