summaryrefslogtreecommitdiff
path: root/2025/day04.py
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2025-12-04 17:14:49 +0100
committernekineki <nekineki@nekineki.net>2025-12-04 17:14:49 +0100
commit5728ac294db4a017075d6cdecbff6098383b550e (patch)
tree88febec4fe954dfa8ab815d7ea80877333af947d /2025/day04.py
parent9dd352728fccef303bb626d8bbad36595aa987e0 (diff)
day04
Diffstat (limited to '2025/day04.py')
-rwxr-xr-x2025/day04.py59
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)
+