from lib import str_to_ints from collections import defaultdict def part_1(data): ps = [] for i, line in enumerate(data.splitlines()): ps.append(str_to_ints(line) + [i]) for _ in range(10_000): for p in ps: p[3] += p[6] p[4] += p[7] p[5] += p[8] p[0] += p[3] p[1] += p[4] p[2] += p[5] ps.sort(key=lambda p: abs(p[0]) + abs(p[1]) + abs(p[2])) print(ps[0][-1]) def part_2(data): ps = [] for i, line in enumerate(data.splitlines()): ps.append(str_to_ints(line) + [i]) for _ in range(10_000): poss = defaultdict(list) for p in ps: p[3] += p[6] p[4] += p[7] p[5] += p[8] p[0] += p[3] p[1] += p[4] p[2] += p[5] poss[(p[0], p[1], p[2])].append(p) for pts in poss.values(): if len(pts) > 1: for p in pts: ps.remove(p) print(len(ps)) def main(): data = open(0).read() part_1(data) part_2(data) if __name__ == "__main__": main()