aboutsummaryrefslogtreecommitdiff
path: root/2025/08/b.py
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-12-08 08:02:19 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2025-12-08 08:02:19 +0100
commitbb6a7fd447db8ebafe9df80097821cb0105907f7 (patch)
treef90268235abbd37eeddc933208dfffec78ec9eaf /2025/08/b.py
parent5d69f923116a2b251a445c0cb9e6f23551ad686a (diff)
downloadaoc-bb6a7fd447db8ebafe9df80097821cb0105907f7.tar.gz
aoc-bb6a7fd447db8ebafe9df80097821cb0105907f7.zip
Refactor
Diffstat (limited to '')
-rw-r--r--2025/08/b.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/2025/08/b.py b/2025/08/b.py
index 4a6d610..0fac672 100644
--- a/2025/08/b.py
+++ b/2025/08/b.py
@@ -1,26 +1,28 @@
1import fileinput 1import fileinput
2 2
3class SetJoin:
4 def __init__(self, n):
5 self._parent = [i for i in range(n)]
6
7 def rep(self, i):
8 return i if self._parent[i] == i else self.rep(self._parent[i])
9
10 def join(self, i, j):
11 self._parent[self.rep(i)] = self.rep(j)
12
3with fileinput.input() as lines: 13with fileinput.input() as lines:
4 pts = [tuple(int(x) for x in line[:-1].split(',')) for line in lines] 14 pts = [tuple(int(x) for x in line[:-1].split(',')) for line in lines]
5 15
6r = range(len(pts))
7
8def dist(p, q): 16def dist(p, q):
9 return (p[0]-q[0])**2 + (p[1]-q[1])**2 + (p[2]-q[2])**2 17 return (p[0]-q[0])**2 + (p[1]-q[1])**2 + (p[2]-q[2])**2
10 18
19r = range(len(pts))
11d = sorted([(dist(pts[i], pts[j]), i, j) for i in r for j in r if j > i]) 20d = sorted([(dist(pts[i], pts[j]), i, j) for i in r for j in r if j > i])
12 21
13rep = [i for i in r] 22sj = SetJoin(len(pts))
14
15def findrep(i):
16 return i if rep[i] == i else findrep(rep[i])
17
18def joinrep(i, j):
19 rep[findrep(i)] = findrep(j)
20
21for _, j, k in d: 23for _, j, k in d:
22 if findrep(j) != findrep(k): 24 if sj.rep(j) != sj.rep(k):
23 joinrep(j, k) 25 sj.join(j, k)
24 sol = pts[j][0] * pts[k][0] 26 sol = pts[j][0] * pts[k][0]
25 27
26print(sol) 28print(sol)

Generated with cgit - Back to sebastiano.tronto.net