Update day 19 solution
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user