56 lines
1.1 KiB
Python
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()
|