15
15
p=<3,0,0>, v=<-1,0,0>, a=<0,0,0>
16
16
"""
17
17
18
- template = ' p=<{:d},{:d},{:d}>, v=<{:d},{:d},{:d}>, a=<{:d},{:d},{:d}>'
18
+ template = " p=<{:d},{:d},{:d}>, v=<{:d},{:d},{:d}>, a=<{:d},{:d},{:d}>"
19
19
20
20
21
21
def parsed (data ):
@@ -26,10 +26,27 @@ def key(p):
26
26
return [abs (x ) + abs (y ) + abs (z ) for x , y , z in chunks (reversed (p ), 3 )]
27
27
28
28
29
+ def abs_accel (p ):
30
+ px , py , pz , vx , vy , vz , ax , ay , az = p
31
+ a = abs (ax ) + abs (ay ) + abs (az )
32
+ return a
33
+
34
+
35
+ def pos (p0 , t ):
36
+ px0 , py0 , pz0 , vx0 , vy0 , vz0 , ax0 , ay0 , az0 = p0
37
+ px1 = px0 + vx0 * t + (ax0 * t ** 2 ) // 2
38
+ py1 = py0 + vy0 * t + (ay0 * t ** 2 ) // 2
39
+ pz1 = pz0 + vz0 * t + (az0 * t ** 2 ) // 2
40
+ d = abs (px1 ) + abs (py1 ) + abs (pz1 )
41
+ return d
42
+
43
+
29
44
def part_a (data ):
30
45
particles = parsed (data )
31
46
p_min = min (particles , key = key )
32
- return particles .index (p_min )
47
+ a_min = abs_accel (p_min )
48
+ d = {i : pos (p , 100 ) for i , p in enumerate (particles ) if abs_accel (p ) == a_min }
49
+ return min (d , key = d .get )
33
50
34
51
35
52
def part_b (data ):
0 commit comments