Day 25
This commit is contained in:
parent
89ee8ffd51
commit
366a28ba53
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from pprint import pprint
|
||||
|
||||
|
||||
class Point(object):
|
||||
def __init__(self, x, y, z, t):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.z = z
|
||||
self.t = t
|
||||
|
||||
def __sub__(self, other):
|
||||
return sum([abs(getattr(self, prop) - getattr(other, prop)) for prop in ["x", "y", "z", "t"]])
|
||||
|
||||
def __repr__(self):
|
||||
return "<Point {},{},{},{}>".format(self.x, self.y, self.z, self.t)
|
||||
|
||||
|
||||
def main():
|
||||
points = []
|
||||
with open("input.txt") as f:
|
||||
for line in f.readlines():
|
||||
if line:
|
||||
points.append(Point(*[int(i) for i in line.split(",")]))
|
||||
|
||||
consts = []
|
||||
|
||||
# assign near points
|
||||
while points:
|
||||
assigned_one = False
|
||||
|
||||
for seeker in points[:]:
|
||||
assigned = False
|
||||
for const in consts:
|
||||
for point in const:
|
||||
if point - seeker <= 3:
|
||||
const.append(seeker)
|
||||
points.remove(seeker)
|
||||
assigned = True
|
||||
assigned_one = True
|
||||
break
|
||||
if assigned:
|
||||
break
|
||||
|
||||
if not assigned_one:
|
||||
# if we don't assign a point after looping through them all, create a new constellation
|
||||
consts.append([points.pop()])
|
||||
|
||||
print("Constellations:", len(consts), "Points:", len(points))
|
||||
|
||||
pprint(consts)
|
||||
|
||||
print("Constellations:", len(consts), "Points:", len(points))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue