diff options
| author | nekineki <nekineki@nekineki.net> | 2025-12-04 17:14:49 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2025-12-04 17:14:49 +0100 |
| commit | 5728ac294db4a017075d6cdecbff6098383b550e (patch) | |
| tree | 88febec4fe954dfa8ab815d7ea80877333af947d /2025/day04.py | |
| parent | 9dd352728fccef303bb626d8bbad36595aa987e0 (diff) | |
day04
Diffstat (limited to '2025/day04.py')
| -rwxr-xr-x | 2025/day04.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/2025/day04.py b/2025/day04.py new file mode 100755 index 0000000..e69acd5 --- /dev/null +++ b/2025/day04.py @@ -0,0 +1,59 @@ +#!/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) + |
