4 changed files with 182 additions and 0 deletions
@ -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") |
|||
|
@ -0,0 +1,10 @@ |
|||
.|...\.... |
|||
|.-.\..... |
|||
.....|-... |
|||
........|. |
|||
.......... |
|||
.........\ |
|||
..../.\\.. |
|||
.-.-/..|.. |
|||
.|....-|.\ |
|||
..//.|.... |
@ -0,0 +1,110 @@ |
|||
\.................-....-.-.|....................|......./.|.\................|...........|....--.............. |
|||
............-...................|.............|..-.......-/..............-....\............................... |
|||
|.......//...........................................|...............-......../.....\....................\.... |
|||
....|......-.-.............-......\.....\......../..................../....................................... |
|||
..\..\../................../.............-............|....-.........................|......|...............|. |
|||
-..|........................./.................\.........\./.............\..|..-...-.............\............ |
|||
.\......||-..................../................-................./....|........................|............. |
|||
..............\./...........-.........../-................-.........\...\........../-.......|................. |
|||
....-..........-.-.....\......................../.......-..........-/.....................||................|. |
|||
./..........|/............................\./............................./....../........\...-|............\- |
|||
........\.............................-...../............---...........|...............|......\\.............. |
|||
........//....|.\......./...\.............|..............\............./...........-.|..-.............|....... |
|||
...................\...........-/..-......\...|........-.|................\-.......|........\................. |
|||
|.|....../|............\./..-........\..............................-.....................|....../............ |
|||
............-....................-..............-..-................|.//.............-.............-.......... |
|||
..........-.......-......|-................./........../...\........-.......................-..\.......\...... |
|||
................../....|............-....../................./.....................|.................-........ |
|||
...\..............--..|.....||.....\.............\../................................................-.-...../ |
|||
.........-......|....-.................-.......\-................./..|...................|\.....\.....|.|-.... |
|||
......................-......................-............/....................\...../...\..../............... |
|||
...../......-...............\...-....|......../.........\................................|.........../........ |
|||
........../.......\..............-...............\........-|....-......-.............|...........|........./.. |
|||
./...............\....../....../..../...................................................|.....|.|../......./.. |
|||
....|\........\-...../...................-.............\.\..................................././..........\... |
|||
....................................-..../......................-..///......-...|.|..........................| |
|||
.........-\.....-...........|........./..........-..\.....\./...................-........................-.... |
|||
....../.......././......--.....|.\..-...-....\..........................-....-...-..|.|.....|.......\-./...... |
|||
...-....................-................|.............-../........|../........-.............|\............... |
|||
...../...........-......../................|................|.....\.....-.............../...|....../\......... |
|||
./...\.....\..-./.........................|................................-....................-............. |
|||
.............\|.../....\\.....\..|...........\.....................|......|.|.....|.....-............\.\...... |
|||
........................|......-..........-.../......-........|...../.\|...-................................|. |
|||
.......\...-...\..........|.....\...................\.........|..........-/.........\...................../... |
|||
.-|.......|............./..|./....-.../...\............-......../..............-.......//...-...........||.\.. |
|||
..|..\./..-........\..|....-..\.........../..............................|..\..................../..|...../-.. |
|||
.|.........-.\...........................\..../......./....||............\..........|............-.\|......... |
|||
....................\..../|............................\.../..|........./...../............||........\....../. |
|||
....................../.....|...................|......|.................|..|.......|................|........ |
|||
.....................\.........-..../.........../../..-......\.................|.../....................../... |
|||
........\.-................/........\...../....../.|.\...|/../..........................................-..... |
|||
....................................|......./...../............-................-/..|.-....................\.. |
|||
..|.........................-....................../...|.....|.............../.........../.....|\............. |
|||
.......................................|.\.|.......................-.......|..............\............-./.... |
|||
..........//................\..|./................-.................-..../../|................................ |
|||
.|......................................./............/..-.......-.|.........................\|..|............ |
|||
............................/.-..................-./..../..............|-.........-|.......................... |
|||
.................-...|................\.........|\...............................\...........\...//........... |
|||
........\..|.|--.............|.......\.................|......|\./.........................\.|................ |
|||
.-|.............|\|.....\|././...|..\.............\..\...................\...........\...../.................. |
|||
..../..............-..|...|.........-.........\.....-...........-.....|...\.-....-../.................\....... |
|||
........\.|........\\.........-...............-.......-..................................../..........|....... |
|||
...............-...................\/...............\..-\...........|.-........-.\-.....\....\..../......-.... |
|||
.../-......./..............|.......|..//......-....................../.|....\......|..\.........../-\......... |
|||
.-....|./....-.../....../.....-..............\..-..\..-............\................|...|..........-.......|.. |
|||
|......../...................\..../....\......./..|.................\...............\.........\../.|......../. |
|||
../............/........|..|.......................................\../\...............\............/.......\. |
|||
........-.-...\........../.......-....-............./.............-......./................\..........-....... |
|||
.../-................/......|/........-......|..........|..-..............|/..........................-....... |
|||
......./............../...................|../...../................./../..........\../.....\....\............ |
|||
..............-..|../-........................|...\.../...-/..........\.......\......\.................-....-. |
|||
......................................-/.\........................../......-..\..\........\...............|..\ |
|||
.............-.........../-|........-........\....-.....\....../..\........................\......|.......\... |
|||
.././....................|\.../\.........\.|.............../..../...|......./.\...|.......\.........|......... |
|||
......................./........./-./...........................|/...\........-.../.................||........ |
|||
..............|./........\..............\.............................|/................../............|.-..|. |
|||
.........................-......../........./.....|....-..-.-..............-.-......../.......\...\./......... |
|||
.-............../../....\//......../...|......|......\..................-......\.....-....\|.........|........ |
|||
..............-.....................\.................\.|...-............................|......\............. |
|||
\\.....|...........\............|............................../............................................\. |
|||
.-........../|...\..............-...............................\...........\.....|......\..........\......... |
|||
.\............\.|....-........./....../../.....-..\........|...............-..................|............-.| |
|||
.....\......-.........-.........|....../..-....|.....\..../....|........-..................................... |
|||
..........\-..-..../\.....................\.........-...........|..../-.......................\....-.......... |
|||
...../............./..|..................../............../../.........|...............-../................... |
|||
.....|...../.....|......-.............................|...........-......................./............/...... |
|||
.....................||./.-.................-.........\.\..................-..............\...--.........\.... |
|||
.|......-......-.\.......-......\....\..\..|.........../......./.....................-..........|............. |
|||
.....\.....\............................--..................|..-........\....\...\.|.\.-...........\...\...... |
|||
./...........\.......\/......|........./..|................\-................/....\...................\.\..... |
|||
..|...............................-.........-.|/......|.....|........\........................................ |
|||
.......|............-............../............-......../..-...\|-...-..../...........-..........-..-/....... |
|||
............................-..\.......................................-.........................\..........-. |
|||
........................\.........|................||...-....\......\.....\.................\...\\....../..... |
|||
....\../.....-.......-.................-|...................-../.|-............|........-|......./../...\..... |
|||
..................................................\.......|......./..\./......../....|....-|.-................ |
|||
....../.........|.......|...|.......\.../|...............-.......-\..\......././..................|..\.|...../ |
|||
............|.....\...........-.............................../.....-.................-.../............/.../.. |
|||
...../.......\............................|.....\....\................/..................\......../........... |
|||
..................-....\.........\|................/|......../.-................|...\......................--. |
|||
......-..-.....................................-\.........|.../.....................|..|.-.....\...|....\....- |
|||
......-......-.................-......|..................................................|.................... |
|||
..\...............|......../........-......./.............../...........-..........|/.....///\.....-.......... |
|||
.........../..|.............../..........\|.........................\...|.....\||....\...|.|/.....-....../.... |
|||
...../...../.....-............................................|........|............|......................... |
|||
......-../\................../..............\............\.................../|...........|.............\..... |
|||
...........-..........................-....\..\..|.-..............................................\........|.. |
|||
/.--..//....\...............................-............|..././.............................................. |
|||
/...............|.........../..../......................\.....|............|...........|...................-.. |
|||
..-................\../|......../...................../...........\..|.|\../.................................. |
|||
....|...../.....-......\.........................-.....//...............|.........-.......|...-....--......... |
|||
....|..\.-..../....................|..........\............./...........\.../................................. |
|||
............................\...................................../.......................|...........\....... |
|||
.........../.....-.....................\..\.-..|............-...............\.........................-....... |
|||
......-.......-\.\......\..-.-........./...........\..........|........................\.....-.....\.......... |
|||
..............-....../.-............./........../..............\-....-.../...../.-............\......./.-..... |
|||
......|...................................................||..../...|\.....................-.../...\........|. |
|||
......|.//........................-...../...........-..\...|......|..................../........../........... |
|||
.....................................................|.........//...........|\.....\....................|.../. |
|||
............-..||...........|....../....................\...\................................../.......|...... |
|||
..\....\......./-\.\...........-\................|.........../................||.../.....-...........\........ |
Loading…
Reference in new issue