Day 16 (not super efficient)
This commit is contained in:
1 parent
312113ce81
commit
4a5a3ba757
4 files changed
+182
No files matched your search
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
ENERGY = []
|
||||
|
||||
|
||||
# direction given as tuple, e.g., (1,0) for right
|
||||
def move_beam(x,y,d,grid):
|
||||
while True:
|
||||
if (x > len(grid[0])-1) or (x < 0) or (y > len(grid)-1) or (y < 0): break
|
||||
if d in ENERGY[x+y*len(grid[0])]: break
|
||||
ENERGY[x+y*len(grid[0])].append(d)
|
||||
tile = grid[y][x]
|
||||
if tile == '.':
|
||||
x, y = x+d[0], y+d[1]
|
||||
elif (tile == '-' and d[1] == 0) or (tile == '|' and d[0] == 0):
|
||||
x,y = x+d[0], y+d[1]
|
||||
elif tile == '\\':
|
||||
d = (d[1],d[0])
|
||||
x,y = x+d[0], y+d[1]
|
||||
elif tile == '/':
|
||||
d = (-d[1],-d[0])
|
||||
x,y = x+d[0], y+d[1]
|
||||
elif tile == '-':
|
||||
move_beam(x-1, y, (-1,0), grid)
|
||||
move_beam(x+1, y, (1,0), grid)
|
||||
elif tile == '|':
|
||||
move_beam(x, y-1, (0,-1), grid)
|
||||
move_beam(x, y+1, (0,1), grid)
|
||||
|
||||
|
||||
def energize(x,y,d,grid):
|
||||
global ENERGY
|
||||
ENERGY = []
|
||||
for i in range(len(grid) * len(grid[0])):
|
||||
ENERGY.append([])
|
||||
move_beam(x,y,d,grid)
|
||||
return len(ENERGY) - ENERGY.count([])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
grid = [list(line.strip('\n')) for line in open(sys.argv[1])]
|
||||
res2 = 0
|
||||
for i in range(len(grid)):
|
||||
res2 = max(energize(0,i,(1,0),grid),res2)
|
||||
for i in range(len(grid[0])):
|
||||
res2 = max(energize(i,0,(0,1),grid),res2)
|
||||
for i in range(len(grid)):
|
||||
res2 = max(energize(len(grid)-1,i,(-1,0),grid),res2)
|
||||
for i in range(len(grid[0])):
|
||||
res2 = max(energize(i,len(grid[0])-1,(0,-1),grid),res2)
|
||||
|
||||
# challenge 1
|
||||
res1 = str(energize(0,0,(1,0),grid))
|
||||
print(f"challenge 1:\n{res1}\n")
|
||||
|
||||
# challenge 2
|
||||
res2 = str(res2)
|
||||
print(f"challenge 2:\n{res2}\n")
|
||||
|
||||
Reference in new issue
Block a user