2017 day 20 part 2
This commit is contained in:
parent
336341abce
commit
5cd65e1125
|
@ -3,11 +3,6 @@
|
|||
def man_dist(tup):
|
||||
return sum(map(abs, tup))
|
||||
|
||||
import sys
|
||||
import re
|
||||
pattern = re.compile(r"<([0-9-]*),([0-9-]*),([0-9-]*)>")
|
||||
data = [[(int(c[0]), int(c[1]), int(c[2])) for c in p] for p in [pattern.findall(l.strip()) for l in sys.stdin.readlines()]]
|
||||
|
||||
def update_particle(p):
|
||||
return (
|
||||
tuple(map(sum, zip(p[0], p[1]))),
|
||||
|
@ -15,12 +10,36 @@ def update_particle(p):
|
|||
p[2],
|
||||
)
|
||||
|
||||
while True:
|
||||
data = list(map(update_particle, data))
|
||||
|
||||
min_dist, min_p = None, None
|
||||
for i, particle in enumerate(data):
|
||||
md = man_dist(particle[0])
|
||||
if min_p is None or md < min_dist:
|
||||
min_p, min_dist = i, md
|
||||
def part1(particles):
|
||||
stability = 0
|
||||
previous, min_p = None, None
|
||||
while stability < 300:
|
||||
previous = min_p
|
||||
stability += 1
|
||||
min_dist = None
|
||||
particles = list(map(update_particle, particles))
|
||||
for i, particle in enumerate(particles):
|
||||
md = man_dist(particle[0])
|
||||
if min_p is None or min_dist is None or md < min_dist:
|
||||
min_p, min_dist = i, md
|
||||
if previous != min_p:
|
||||
stability = 0
|
||||
print(min_p)
|
||||
|
||||
def part2(particles):
|
||||
number = len(particles)
|
||||
while True:
|
||||
particles = list(map(update_particle, particles))
|
||||
positions = next(zip(*particles))
|
||||
if len(positions) != len(set(positions)):
|
||||
particles = list(filter(lambda p: positions.count(p[0]) == 1, particles))
|
||||
number = len(particles)
|
||||
print(number)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
import re
|
||||
pattern = re.compile(r"<([0-9-]*),([0-9-]*),([0-9-]*)>")
|
||||
data = [[(int(c[0]), int(c[1]), int(c[2])) for c in p] for p in [pattern.findall(l.strip()) for l in sys.stdin.readlines()]]
|
||||
run = part2 if any(arg in map(str.strip, map(str.lower, sys.argv)) for arg in ('-c', '--collisions')) else part1
|
||||
run(data)
|
||||
|
|
Loading…
Reference in New Issue