Update day 19 solution
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-12-19 21:55:32 +01:00
parent 7def74b81e
commit 959b52cda2

View File

@@ -86,12 +86,12 @@ def get_transform_func(v0, v1):
def transform(scanners, idx, done=[]):
done.append(idx)
for n in scanners[idx]['overlapping']:
if n in done:
for next in scanners[idx]['overlapping']:
if next in done:
continue
overlapping = []
for i, b0 in enumerate(scanners[idx]['metrics']):
for j, b1 in enumerate(scanners[n]['metrics']):
for j, b1 in enumerate(scanners[next]['metrics']):
if 11 <= len(b0 & b1):
overlapping.append((i, j))
if 2 <= len(overlapping):
@@ -102,21 +102,21 @@ def transform(scanners, idx, done=[]):
(x0, y0, z0) = scanners[idx]['beacons'][overlapping[0][0]]
(x1, y1, z1) = scanners[idx]['beacons'][overlapping[1][0]]
v0 = (x0 - x1, y0 - y1, z0 - z1)
(x0, y0, z0) = scanners[n]['beacons'][overlapping[0][1]]
(x1, y1, z1) = scanners[n]['beacons'][overlapping[1][1]]
(x0, y0, z0) = scanners[next]['beacons'][overlapping[0][1]]
(x1, y1, z1) = scanners[next]['beacons'][overlapping[1][1]]
v1 = (x0 - x1, y0 - y1, z0 - z1)
transform_func = get_transform_func(v0, v1)
for i, b in enumerate(scanners[n]['beacons']):
for i, b in enumerate(scanners[next]['beacons']):
(x, y, z) = b
scanners[n]['beacons'][i] = eval(transform_func)
scanners[next]['beacons'][i] = eval(transform_func)
(x0, y0, z0) = scanners[idx]['beacons'][overlapping[0][0]]
(x1, y1, z1) = scanners[n]['beacons'][overlapping[0][1]]
(x1, y1, z1) = scanners[next]['beacons'][overlapping[0][1]]
(xo, yo, zo) = (x0 - x1, y0 - y1, z0 - z1)
scanners[n]['origin'] = (xo, yo, zo)
for i in range(len(scanners[n]['beacons'])):
(x, y, z) = scanners[n]['beacons'][i]
scanners[n]['beacons'][i] = (x + xo, y + yo, z + zo)
transform(scanners, n, done)
scanners[next]['origin'] = (xo, yo, zo)
for i in range(len(scanners[next]['beacons'])):
(x, y, z) = scanners[next]['beacons'][i]
scanners[next]['beacons'][i] = (x + xo, y + yo, z + zo)
transform(scanners, next, done)
def solve(input):