parent
eed17195fc
commit
0a2598ffc4
@ -0,0 +1,4 @@ |
||||
<x=14, y=2, z=8> |
||||
<x=7, y=4, z=10> |
||||
<x=1, y=17, z=16> |
||||
<x=-4, y=-1, z=1> |
||||
@ -0,0 +1,34 @@ |
||||
from itertools import permutations |
||||
import os |
||||
import re |
||||
|
||||
inputfile = os.path.join(os.path.dirname(__file__), "input/day12_input") |
||||
|
||||
|
||||
def get_moons(): |
||||
with open(inputfile) as fp: |
||||
return [[int(m[1]), int(m[2]), int(m[3])] |
||||
for m in |
||||
re.finditer(r'x=(-?\d+).*y=(-?\d+).*z=(-?\d+)', fp.read())] |
||||
|
||||
|
||||
def test_day12a(): |
||||
moons = [(m, [0, 0, 0]) for m in get_moons()] |
||||
e = 0 |
||||
for _ in range(1000): |
||||
for me, other in permutations(moons, 2): |
||||
v = me[1] |
||||
pa = me[0] |
||||
pb = other[0] |
||||
v[0] += -1 if pa[0] > pb[0] else 1 if pa[0] < pb[0] else 0 |
||||
v[1] += -1 if pa[1] > pb[1] else 1 if pa[1] < pb[1] else 0 |
||||
v[2] += -1 if pa[2] > pb[2] else 1 if pa[2] < pb[2] else 0 |
||||
for moon in moons: |
||||
moon[0][0] += moon[1][0] |
||||
moon[0][1] += moon[1][1] |
||||
moon[0][2] += moon[1][2] |
||||
|
||||
for p, v in moons: |
||||
e += (abs(p[0])+abs(p[1])+abs(p[2]))*(abs(v[0])+abs(v[1])+abs(v[2])) |
||||
|
||||
assert e == 9139 |
||||
Loading…
Reference in new issue