Solve day 20.
This commit is contained in:
55
2017/d20.py
Normal file
55
2017/d20.py
Normal file
@@ -0,0 +1,55 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user