Browse Source

Day 16 (not super efficient)

pull/1/head
Maya Herrscher 1 year ago
parent
commit
4a5a3ba757
  1. 0
      2023/day16/challenge
  2. 62
      2023/day16/code.py
  3. 10
      2023/day16/example
  4. 110
      2023/day16/input

0
2023/day16/challenge

62
2023/day16/code.py

@ -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")

10
2023/day16/example

@ -0,0 +1,10 @@
.|...\....
|.-.\.....
.....|-...
........|.
..........
.........\
..../.\\..
.-.-/..|..
.|....-|.\
..//.|....

110
2023/day16/input

@ -0,0 +1,110 @@
\.................-....-.-.|....................|......./.|.\................|...........|....--..............
............-...................|.............|..-.......-/..............-....\...............................
|.......//...........................................|...............-......../.....\....................\....
....|......-.-.............-......\.....\......../..................../.......................................
..\..\../................../.............-............|....-.........................|......|...............|.
-..|........................./.................\.........\./.............\..|..-...-.............\............
.\......||-..................../................-................./....|........................|.............
..............\./...........-.........../-................-.........\...\........../-.......|.................
....-..........-.-.....\......................../.......-..........-/.....................||................|.
./..........|/............................\./............................./....../........\...-|............\-
........\.............................-...../............---...........|...............|......\\..............
........//....|.\......./...\.............|..............\............./...........-.|..-.............|.......
...................\...........-/..-......\...|........-.|................\-.......|........\.................
|.|....../|............\./..-........\..............................-.....................|....../............
............-....................-..............-..-................|.//.............-.............-..........
..........-.......-......|-................./........../...\........-.......................-..\.......\......
................../....|............-....../................./.....................|.................-........
...\..............--..|.....||.....\.............\../................................................-.-...../
.........-......|....-.................-.......\-................./..|...................|\.....\.....|.|-....
......................-......................-............/....................\...../...\..../...............
...../......-...............\...-....|......../.........\................................|.........../........
........../.......\..............-...............\........-|....-......-.............|...........|........./..
./...............\....../....../..../...................................................|.....|.|../......./..
....|\........\-...../...................-.............\.\..................................././..........\...
....................................-..../......................-..///......-...|.|..........................|
.........-\.....-...........|........./..........-..\.....\./...................-........................-....
....../.......././......--.....|.\..-...-....\..........................-....-...-..|.|.....|.......\-./......
...-....................-................|.............-../........|../........-.............|\...............
...../...........-......../................|................|.....\.....-.............../...|....../\.........
./...\.....\..-./.........................|................................-....................-.............
.............\|.../....\\.....\..|...........\.....................|......|.|.....|.....-............\.\......
........................|......-..........-.../......-........|...../.\|...-................................|.
.......\...-...\..........|.....\...................\.........|..........-/.........\...................../...
.-|.......|............./..|./....-.../...\............-......../..............-.......//...-...........||.\..
..|..\./..-........\..|....-..\.........../..............................|..\..................../..|...../-..
.|.........-.\...........................\..../......./....||............\..........|............-.\|.........
....................\..../|............................\.../..|........./...../............||........\....../.
....................../.....|...................|......|.................|..|.......|................|........
.....................\.........-..../.........../../..-......\.................|.../....................../...
........\.-................/........\...../....../.|.\...|/../..........................................-.....
....................................|......./...../............-................-/..|.-....................\..
..|.........................-....................../...|.....|.............../.........../.....|\.............
.......................................|.\.|.......................-.......|..............\............-./....
..........//................\..|./................-.................-..../../|................................
.|......................................./............/..-.......-.|.........................\|..|............
............................/.-..................-./..../..............|-.........-|..........................
.................-...|................\.........|\...............................\...........\...//...........
........\..|.|--.............|.......\.................|......|\./.........................\.|................
.-|.............|\|.....\|././...|..\.............\..\...................\...........\...../..................
..../..............-..|...|.........-.........\.....-...........-.....|...\.-....-../.................\.......
........\.|........\\.........-...............-.......-..................................../..........|.......
...............-...................\/...............\..-\...........|.-........-.\-.....\....\..../......-....
.../-......./..............|.......|..//......-....................../.|....\......|..\.........../-\.........
.-....|./....-.../....../.....-..............\..-..\..-............\................|...|..........-.......|..
|......../...................\..../....\......./..|.................\...............\.........\../.|......../.
../............/........|..|.......................................\../\...............\............/.......\.
........-.-...\........../.......-....-............./.............-......./................\..........-.......
.../-................/......|/........-......|..........|..-..............|/..........................-.......
......./............../...................|../...../................./../..........\../.....\....\............
..............-..|../-........................|...\.../...-/..........\.......\......\.................-....-.
......................................-/.\........................../......-..\..\........\...............|..\
.............-.........../-|........-........\....-.....\....../..\........................\......|.......\...
.././....................|\.../\.........\.|.............../..../...|......./.\...|.......\.........|.........
......................./........./-./...........................|/...\........-.../.................||........
..............|./........\..............\.............................|/................../............|.-..|.
.........................-......../........./.....|....-..-.-..............-.-......../.......\...\./.........
.-............../../....\//......../...|......|......\..................-......\.....-....\|.........|........
..............-.....................\.................\.|...-............................|......\.............
\\.....|...........\............|............................../............................................\.
.-........../|...\..............-...............................\...........\.....|......\..........\.........
.\............\.|....-........./....../../.....-..\........|...............-..................|............-.|
.....\......-.........-.........|....../..-....|.....\..../....|........-.....................................
..........\-..-..../\.....................\.........-...........|..../-.......................\....-..........
...../............./..|..................../............../../.........|...............-../...................
.....|...../.....|......-.............................|...........-......................./............/......
.....................||./.-.................-.........\.\..................-..............\...--.........\....
.|......-......-.\.......-......\....\..\..|.........../......./.....................-..........|.............
.....\.....\............................--..................|..-........\....\...\.|.\.-...........\...\......
./...........\.......\/......|........./..|................\-................/....\...................\.\.....
..|...............................-.........-.|/......|.....|........\........................................
.......|............-............../............-......../..-...\|-...-..../...........-..........-..-/.......
............................-..\.......................................-.........................\..........-.
........................\.........|................||...-....\......\.....\.................\...\\....../.....
....\../.....-.......-.................-|...................-../.|-............|........-|......./../...\.....
..................................................\.......|......./..\./......../....|....-|.-................
....../.........|.......|...|.......\.../|...............-.......-\..\......././..................|..\.|...../
............|.....\...........-.............................../.....-.................-.../............/.../..
...../.......\............................|.....\....\................/..................\......../...........
..................-....\.........\|................/|......../.-................|...\......................--.
......-..-.....................................-\.........|.../.....................|..|.-.....\...|....\....-
......-......-.................-......|..................................................|....................
..\...............|......../........-......./.............../...........-..........|/.....///\.....-..........
.........../..|.............../..........\|.........................\...|.....\||....\...|.|/.....-....../....
...../...../.....-............................................|........|............|.........................
......-../\................../..............\............\.................../|...........|.............\.....
...........-..........................-....\..\..|.-..............................................\........|..
/.--..//....\...............................-............|..././..............................................
/...............|.........../..../......................\.....|............|...........|...................-..
..-................\../|......../...................../...........\..|.|\../..................................
....|...../.....-......\.........................-.....//...............|.........-.......|...-....--.........
....|..\.-..../....................|..........\............./...........\.../.................................
............................\...................................../.......................|...........\.......
.........../.....-.....................\..\.-..|............-...............\.........................-.......
......-.......-\.\......\..-.-........./...........\..........|........................\.....-.....\..........
..............-....../.-............./........../..............\-....-.../...../.-............\......./.-.....
......|...................................................||..../...|\.....................-.../...\........|.
......|.//........................-...../...........-..\...|......|..................../........../...........
.....................................................|.........//...........|\.....\....................|.../.
............-..||...........|....../....................\...\................................../.......|......
..\....\......./-\.\...........-\................|.........../................||.../.....-...........\........
Loading…
Cancel
Save