Files
aocpy/2017/d20.py
2024-05-30 15:37:22 -04:00

56 lines
1.1 KiB
Python

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()