Added 2017/22 part 2
This commit is contained in:
parent
e8eae78bd1
commit
2ab82894dd
@ -130,8 +130,6 @@ infected.)
|
|||||||
|
|
||||||
Your puzzle answer was `5266`.
|
Your puzzle answer was `5266`.
|
||||||
|
|
||||||
The first half of this puzzle is complete! It provides one gold star: \*
|
|
||||||
|
|
||||||
## \-\-- Part Two \-\-- {#part2}
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
As you go to remove the virus from the infected nodes, it *evolves* to
|
As you go to remove the virus from the infected nodes, it *evolves* to
|
||||||
@ -248,8 +246,14 @@ Given your actual map, after `10000000` bursts of activity, *how many
|
|||||||
bursts cause a node to become infected*? (Do not count nodes that begin
|
bursts cause a node to become infected*? (Do not count nodes that begin
|
||||||
infected.)
|
infected.)
|
||||||
|
|
||||||
Answer:
|
Your puzzle answer was `2511895`.
|
||||||
|
|
||||||
Although it hasn\'t changed, you can still [get your puzzle
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2017) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
input](22/input).
|
input](22/input).
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ from fred import list2int, toGrid,nprint,get_value_in_direction, expand_grid, ge
|
|||||||
|
|
||||||
input_f = 'input'
|
input_f = 'input'
|
||||||
|
|
||||||
part = 1
|
part = 2
|
||||||
#########################################
|
#########################################
|
||||||
# #
|
# #
|
||||||
# Part 1 #
|
# Part 1 #
|
||||||
@ -30,6 +30,10 @@ def goLeft(dir:str):
|
|||||||
elif dir == 'west':
|
elif dir == 'west':
|
||||||
new_dir = (1,0)
|
new_dir = (1,0)
|
||||||
facing = 'south'
|
facing = 'south'
|
||||||
|
else:
|
||||||
|
print('Something is wrong')
|
||||||
|
print(dir)
|
||||||
|
print(new_dir)
|
||||||
|
|
||||||
return new_dir,facing
|
return new_dir,facing
|
||||||
|
|
||||||
@ -112,5 +116,91 @@ if part == 1:
|
|||||||
# Part 2 #
|
# Part 2 #
|
||||||
# #
|
# #
|
||||||
#########################################
|
#########################################
|
||||||
|
|
||||||
|
def goBack(dir:str):
|
||||||
|
|
||||||
|
if dir == 'north':
|
||||||
|
new_dir = (1,0)
|
||||||
|
facing = 'south'
|
||||||
|
|
||||||
|
elif dir == 'south':
|
||||||
|
new_dir = (-1,0)
|
||||||
|
facing = 'north'
|
||||||
|
|
||||||
|
elif dir == 'east':
|
||||||
|
new_dir = (0,-1)
|
||||||
|
facing = 'west'
|
||||||
|
|
||||||
|
elif dir == 'west':
|
||||||
|
new_dir = (0,1)
|
||||||
|
facing = 'east'
|
||||||
|
else:
|
||||||
|
print('Something is wrong')
|
||||||
|
print(dir)
|
||||||
|
print(new_dir)
|
||||||
|
|
||||||
|
return new_dir,facing
|
||||||
|
|
||||||
if part == 2:
|
if part == 2:
|
||||||
exit()
|
grid = toGrid(input_f)
|
||||||
|
|
||||||
|
start = getCenter(grid)
|
||||||
|
|
||||||
|
#nprint(grid)
|
||||||
|
|
||||||
|
#print(start)
|
||||||
|
end = False
|
||||||
|
dir = (-1,0)
|
||||||
|
facing = 'north'
|
||||||
|
cur = start
|
||||||
|
infect = 0
|
||||||
|
iter = 1
|
||||||
|
nprint(grid)
|
||||||
|
while not end:
|
||||||
|
#print('-----------START-----------')
|
||||||
|
#print(cur[0]-1)
|
||||||
|
if cur[0]-1 <= 0 or cur[0]+1 >= len(grid[0]) or cur[1]+1 >= len(grid) or cur[1]-1 <= 0:
|
||||||
|
#print('Expanding')
|
||||||
|
grid = expand_grid(grid)
|
||||||
|
cur = tuple(map(lambda i, j: i + j, cur, (1,1)))
|
||||||
|
|
||||||
|
#print(cur)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if get_value_in_direction(grid,cur) == '#':
|
||||||
|
#print('infected')
|
||||||
|
|
||||||
|
dir,facing = goRight(facing)
|
||||||
|
grid[cur[0]][cur[1]] = 'F'
|
||||||
|
#cur = (cur[0]+dir[0],cur[1]+dir[1])
|
||||||
|
|
||||||
|
elif get_value_in_direction(grid,cur) == 'W':
|
||||||
|
dir,facing = dir,facing
|
||||||
|
grid[cur[0]][cur[1]] = '#'
|
||||||
|
infect += 1
|
||||||
|
|
||||||
|
elif get_value_in_direction(grid,cur) == 'F':
|
||||||
|
dir,facing = goBack(facing)
|
||||||
|
grid[cur[0]][cur[1]] = '.'
|
||||||
|
|
||||||
|
elif get_value_in_direction(grid,cur) == '.':
|
||||||
|
#print('not infected')
|
||||||
|
dir,facing = goLeft(facing)
|
||||||
|
grid[cur[0]][cur[1]] = 'W'
|
||||||
|
|
||||||
|
#cur = (cur[0]+dir[0],cur[1]+dir[1])
|
||||||
|
|
||||||
|
|
||||||
|
cur = (cur[0]+dir[0],cur[1]+dir[1])
|
||||||
|
#print(cur,dir,facing)
|
||||||
|
#nprint(grid,cur,'X')
|
||||||
|
#print('-----------END-----------',iter,infect)
|
||||||
|
iter += 1
|
||||||
|
if iter > 10000000:
|
||||||
|
end = True
|
||||||
|
elif iter % 100000 == 0:
|
||||||
|
print(iter,infect)
|
||||||
|
#input()
|
||||||
|
print(infect)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user