summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/08/python/main.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/2024/08/python/main.py b/2024/08/python/main.py
new file mode 100644
index 0000000..c7bb47d
--- /dev/null
+++ b/2024/08/python/main.py
@@ -0,0 +1,49 @@
+from collections import defaultdict
+from fileinput import input
+from itertools import product
+
+antennas = defaultdict(set)
+x_max, y_max = 0, 0
+
+for idy, line in enumerate(input()):
+ y_max = max(y_max, idy)
+ for idx, c in enumerate(line.strip()):
+ x_max = max(x_max, idx)
+ if c == ".":
+ continue
+
+ antennas[c].add(complex(idx, idy))
+
+nodes = set()
+for vs in antennas.values():
+ for v1, v2 in product(vs, vs):
+ if v1 == v2:
+ continue
+ vec = v2 - v1
+ nodes.add(v1 + 2 * vec)
+ nodes.add(v2 - 2 * vec)
+
+nodes = {n for n in nodes if 0 <= n.real <= x_max and 0 <= n.imag <= y_max}
+
+gold_nodes = set()
+for vs in antennas.values():
+ for v1, v2 in product(vs, vs):
+ if v1 == v2:
+ continue
+ vec = v2 - v1
+ start = v1
+ while 0 <= start.real <= x_max and 0 <= start.imag <= y_max:
+ gold_nodes.add(start)
+ start += vec
+
+ start = v2
+ while 0 <= start.real <= x_max and 0 <= start.imag <= y_max:
+ gold_nodes.add(start)
+ start -= vec
+
+
+silver = len(nodes)
+gold = len(gold_nodes)
+
+print("silver:", silver)
+print("gold:", gold)