from lib import get_data, str_to_ints def freeze(coords, velos): coords = tuple(map(tuple, coords)) velos = tuple(map(tuple, velos)) return coords + velos def part_1(data): coords = [] velos = [] for line in data.splitlines(): coords.append(str_to_ints(line)) velos.append([0, 0, 0]) for _ in range(1_000): # apply gravity for i in range(len(coords)): for j in range(i + 1, len(coords)): for d in range(3): if coords[i][d] > coords[j][d]: velos[i][d] -= 1 velos[j][d] += 1 elif coords[i][d] < coords[j][d]: velos[i][d] += 1 velos[j][d] -= 1 # update coords for i in range(len(coords)): for d in range(3): coords[i][d] += velos[i][d] r = 0 for i in range(len(coords)): p = sum(map(abs, coords[i])) k = sum(map(abs, velos[i])) r += p * k print(r) def part_2(data): raise Exception("TBD") def main(): data = get_data(__file__) part_1(data) part_2(data) if __name__ == "__main__": main()