Added 2019 day 10 part 2
This commit is contained in:
parent
cf95e25c34
commit
9fb1014182
@ -36,8 +36,46 @@ def part1(vals: list):
|
|||||||
mx, my, max = x, y, tmp
|
mx, my, max = x, y, tmp
|
||||||
return mx, my, max
|
return mx, my, max
|
||||||
|
|
||||||
|
def selectStart(indices, current):
|
||||||
|
i = 0
|
||||||
|
while indices[i] < current:
|
||||||
|
i += 1
|
||||||
|
return i + 1
|
||||||
|
|
||||||
|
|
||||||
def part2(vals: list, x: int, y: int, count):
|
def part2(vals: list, x: int, y: int, count):
|
||||||
pass
|
asteroids = getAsteroids(vals, x, y)
|
||||||
|
d = dict()
|
||||||
|
for asteroid in asteroids:
|
||||||
|
if str(asteroid.angle) in d:
|
||||||
|
d[str(asteroid.angle)].append(asteroid)
|
||||||
|
else:
|
||||||
|
d[str(asteroid.angle)] = [asteroid]
|
||||||
|
|
||||||
|
for a in d:
|
||||||
|
d[a].sort(key=lambda x:x.dist, reverse=True)
|
||||||
|
|
||||||
|
idx = list(set([asteroid.angle for asteroid in asteroids]))
|
||||||
|
idx.sort()
|
||||||
|
|
||||||
|
laser = (selectStart(idx, -pi/2) - 1) % len(idx)
|
||||||
|
destroyed = []
|
||||||
|
id = str(idx[laser])
|
||||||
|
for i in range(count):
|
||||||
|
cur = d[id].pop()
|
||||||
|
destroyed.append((cur.x, cur.y))
|
||||||
|
if not len(d[id]):
|
||||||
|
d.pop(id)
|
||||||
|
if i < count - 1:
|
||||||
|
while 1:
|
||||||
|
laser = (laser + 1) % len(idx)
|
||||||
|
id = str(idx[laser])
|
||||||
|
if id not in d:
|
||||||
|
continue
|
||||||
|
if len(d[str(idx[laser])]):
|
||||||
|
break
|
||||||
|
|
||||||
|
return destroyed
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
assert part1([".#..#",".....","#####","....#","...##"]) == (3, 4, 8)
|
assert part1([".#..#",".....","#####","....#","...##"]) == (3, 4, 8)
|
||||||
@ -47,15 +85,20 @@ def test():
|
|||||||
"..#...##..","..##....##","......#...",".####.###."]) == (1,2,35)
|
"..#...##..","..##....##","......#...",".####.###."]) == (1,2,35)
|
||||||
assert part1([".#..#..###","####.###.#","....###.#.","..###.##.#","##.##.#.#.","....###..#",
|
assert part1([".#..#..###","####.###.#","....###.#.","..###.##.#","##.##.#.#.","....###..#",
|
||||||
"..#.#..#.#","#..#.#.###",".##...##.#",".....#.#.."]) == (6,3,41)
|
"..#.#..#.#","#..#.#.###",".##...##.#",".....#.#.."]) == (6,3,41)
|
||||||
assert part1([".#..##.###...#######","##.############..##.",".#.######.########.#",".###.#######.####.#.",
|
tmp = [".#..##.###...#######","##.############..##.",".#.######.########.#",".###.#######.####.#.",
|
||||||
"#####.##.#.##.###.##","..#####..#.#########","####################","#.####....###.#.#.##",
|
"#####.##.#.##.###.##","..#####..#.#########","####################","#.####....###.#.#.##",
|
||||||
"##.#################","#####.##.###..####..","..######..##.#######","####.##.####...##..#",
|
"##.#################","#####.##.###..####..","..######..##.#######","####.##.####...##..#",
|
||||||
".#####..#.######.###","##...#.##########...","#.##########.#######",".####.#.###.###.#.##",
|
".#####..#.######.###","##...#.##########...","#.##########.#######",".####.#.###.###.#.##",
|
||||||
"....##.##.###..#####",".#.#.###########.###","#.#.#.#####.####.###","###.##.####.##.#..##"]) == (11,13,210)
|
"....##.##.###..#####",".#.#.###########.###","#.#.#.#####.####.###","###.##.####.##.#..##"]
|
||||||
|
assert part1(tmp) == (11,13,210)
|
||||||
|
assert part2([".#....#####...#..","##...##.#####..##","##...#...#.#####.","..#.....X...###..",
|
||||||
|
"..#.#.....#....##"], 8, 3, 4*9)[-1] == (14, 3)
|
||||||
|
assert part2(tmp, 11,13, 299)[199] == (8,2)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
test()
|
test()
|
||||||
vals = readFile()
|
vals = readFile()
|
||||||
p1 = part1(vals)
|
p1 = part1(vals)
|
||||||
print(f"Part 1: {p1[2]}")
|
print(f"Part 1: {p1[2]}")
|
||||||
print(f"Part 2: {part2(vals, p1[0], p1[1], 200)}")
|
p2 = part2(vals, p1[0], p1[1], 200)
|
||||||
|
print(f"Part 2: {p2[-1][0] * 100 + p2[-1][1]}")
|
Loading…
x
Reference in New Issue
Block a user