Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Solution to Day 20: Particle Swarm - Part 2
#aoc_d20.py
inp = open('input_d20.txt').readlines()
import re
data = {}
idx = 0
for i in inp:
m = re.match("p=<(-?\d+),(-?\d+),(-?\d+)>,\sv=<(-?\d+),(-?\d+),(-?\d+)>,\sa=<(-?\d+),(-?\d+),(-?\d+)>",i)
data[idx] = {'px':int(m.group(1)),'py':int(m.group(2)),'pz':int(m.group(3)),
'vx':int(m.group(4)),'vy':int(m.group(5)),'vz':int(m.group(6)),
'ax':int(m.group(7)),'ay':int(m.group(8)),'az':int(m.group(9))}
idx += 1
distances = {}
r = 0
br = int(input('Podaj breaker: '))
while True:
if r > br:
break
r += 1
for k,v in data.items():
v['vx'] += v['ax']
v['vy'] += v['ay']
v['vz'] += v['az']
v['px'] += v['vx']
v['py'] += v['vy']
v['pz'] += v['vz']
new_data = {}
for k,v in data.items():
add = True
for k2,v2 in data.items():
if k == k2:
continue
if v['px'] == v2['px'] and v['py'] == v2['py'] and v['pz'] == v2['pz']:
add = False
break
if add:
new_data[k] = v
data = new_data
print 'Survived: ',len(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment