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