day10
This commit is contained in:
parent
2285e2b504
commit
8e5b90fd35
1 changed files with 88 additions and 0 deletions
88
10/10.py
Executable file
88
10/10.py
Executable file
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys, math
|
||||
|
||||
grid = []
|
||||
for line in sys.stdin:
|
||||
line = line.rstrip()
|
||||
grid.append(line)
|
||||
|
||||
maxcount = 0
|
||||
keepseen = {}
|
||||
keepx = 0
|
||||
keepy = 0
|
||||
|
||||
for x in range(0, len(grid[0])):
|
||||
for y in range(0, len(grid)):
|
||||
|
||||
# skip space, as we're building on an asteroid.
|
||||
if grid[y][x] == ".":
|
||||
continue
|
||||
|
||||
seen = {}
|
||||
count = 0
|
||||
|
||||
for tx in range(0, len(grid[0])):
|
||||
for ty in range(0, len(grid)):
|
||||
|
||||
# Well this is horrible, but we'll rethink later if it's too slow.
|
||||
|
||||
# skip space.
|
||||
if grid[ty][tx] == ".":
|
||||
continue
|
||||
|
||||
# Skip self
|
||||
if tx == x and ty == y:
|
||||
continue
|
||||
|
||||
# Angle of the dangle
|
||||
asteroid_angle = math.atan2((y-ty),(x-tx))
|
||||
# rotate 90 degrees
|
||||
asteroid_angle = asteroid_angle - math.pi/2
|
||||
# wrap negative values
|
||||
if asteroid_angle < 0:
|
||||
asteroid_angle = 2*math.pi + asteroid_angle
|
||||
|
||||
asteroid_range = math.sqrt((x-tx)**2 + (y-ty)**2)
|
||||
|
||||
if asteroid_angle in seen:
|
||||
seen[asteroid_angle][asteroid_range] = 100*tx+ty # ("%d,%d" % (tx, ty))
|
||||
else:
|
||||
t = {}
|
||||
t[asteroid_range] = 100*tx+ty # ("%d,%d" % (tx, ty))
|
||||
seen[asteroid_angle] = t
|
||||
count += 1
|
||||
|
||||
# Note the best asteroid so far.
|
||||
if count > maxcount:
|
||||
maxcount = count
|
||||
keepseen = seen
|
||||
keepx = x
|
||||
keepy = y
|
||||
|
||||
# part 1 answer.
|
||||
print(maxcount)
|
||||
|
||||
zaps = 0
|
||||
while len(keepseen) > 0:
|
||||
for laser in sorted(keepseen.keys()):
|
||||
zaps += 1
|
||||
this_angle = keepseen[laser]
|
||||
asteroids = sorted(this_angle)
|
||||
if zaps == 200:
|
||||
print(this_angle[asteroids[0]])
|
||||
exit
|
||||
#print(zaps, this_angle[asteroids[0]])
|
||||
del this_angle[asteroids[0]]
|
||||
if len(this_angle) == 0:
|
||||
del keepseen[laser]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue