diff --git a/day-19/day-19.py b/day-19/day-19.py index 7dd83ba..b02ed2e 100644 --- a/day-19/day-19.py +++ b/day-19/day-19.py @@ -11,8 +11,7 @@ def parse(input): s = [] continue if len(line): - b = tuple([int(x) for x in line.split(',')]) - s.append(b) + s.append(tuple([int(x) for x in line.split(',')])) else: scanners.append(s) if len(s): @@ -21,9 +20,7 @@ def parse(input): def calc_distances(s): - d = [] - for _ in s: - d.append(set()) + d = [set() for _ in s] for i in range(len(s)): for j in range(i+1, len(s)): dist = 0 @@ -112,15 +109,14 @@ def transform(scanners, idx, done=[]): for i in range(len(scanners[n]['beacons'])): (x, y, z) = scanners[n]['beacons'][i] scanners[n]['beacons'][i] = eval(transform_func) - (xo, yo, zo) = scanners[idx]['origin'] (x0, y0, z0) = scanners[idx]['beacons'][overlapping[0][0]] (x1, y1, z1) = scanners[n]['beacons'][overlapping[0][1]] - scanners[n]['origin'] = (xo + x0 - x1, yo + y0 - y1, zo + z0 - z1) - (xo, yo, zo) = scanners[n]['origin'] - transform(scanners, n, done) + (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) def solve(input): @@ -129,12 +125,11 @@ def solve(input): beacons = parse(input) scanners = [] for b in beacons: - s = {} - s['beacons'] = b - s['metrics'] = calc_distances(b) - s['origin'] = (0, 0, 0) - s['overlapping'] = set() - scanners.append(s) + scanners.append({ + 'beacons': b, + 'metrics': calc_distances(b), + 'origin': (0, 0, 0), + 'overlapping': set()}) for i in range(len(scanners)): for j in range(i + 1, len(scanners)): num = num_overlapping( @@ -148,10 +143,10 @@ def solve(input): for b in s['beacons']: m.add(b) result_p1 = len(m) - for i in range(len(scanners)): - (xi, yi, zi) = scanners[i]['origin'] - for j in range(i + 1, len(scanners)): - (xj, yj, zj) = scanners[j]['origin'] + for i, si in enumerate(scanners): + (xi, yi, zi) = si['origin'] + for j, sj in enumerate(scanners[i + 1:]): + (xj, yj, zj) = sj['origin'] md = abs(xi - xj) + abs(yi - yj) + abs(zi - zj) result_p2 = max(result_p2, md) print("Part 1 result:", result_p1)