Skip to content

Commit

Permalink
Add solution to 2023-12-16
Browse files Browse the repository at this point in the history
  • Loading branch information
fuglede committed Dec 16, 2023
1 parent 9d0a723 commit e231323
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 0 deletions.
110 changes: 110 additions & 0 deletions 2023/day16/input
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
\..|.....................|.-........\.............-................|./....|.....-...-.........................
.......\.........|..............-...||..............-...........--.|...............||..........\............|.
........../.....................\.........\..................\....|.....-.................../..-.\............
................/..../........../..-....|\.|...-...................\....|/........|...........................
.....|../-\.|....|................................--.-./..........|.........../..-....-................-....|.
.../..........\................-.......\................|/..\.................\.....\...|....../............./
..-../.../......-.....\........//.............|.........../...|.........../.......-...........................
......\....../......./..|\............/..........................\..............\.....\.........|......-...|..
.|/.......\.........|...../..//...................................-....-...........././-...............-......
........-....../......./..\.............|.....................\........../-....../........-...................
......-........./\..................../..\|..-//....|.\--................|.....|.../............-............\
........................|...-........|..............|..............|................./........................
...................|................|..../...-...................../...|......\..................|...|\.......
....-......../.\...............\-...\...........................................................|.............
.............../.|.......|.........\.\.........................-|.............\........-.../...-...||.........
....-...-\.-............/...../...../..\........\|....\...............\.............-........................\
........././.......//......-...|...........-...|..|....-......-.......|............................|../.......
\.................|..../.....-..|......./.....................\....../...|./\.\...............-............./.
.....-\............../...................................../....\.....-|...........-.\...../............\.....
......................./..\..................|...............-.........-..../......../..|.....................
....\...................../...../......|...........................\......||.\...-..............-...........|.
..........................|........../...........|....-.......\........................-|..\............/..|..
-./...|..............................................|./../.........-|.\.|..........\........../.........\....
...........|......................-............................|.........................\....-........../....
........................|/....\......../.|.......\.........../..................\........................-....
...../.................-............................-.\......|...............\...........\.....-.............-
....|-.............-.../....\...........-...........|\.............-.............../-....../..................
...............\/.............../.|............................/.|...................-............-...........
.................\.....\........./......../.....\.....|........-..\..........................|................
...............-..-........-........../...../...\.................\..-.-.....|..........\..............\......
.............-....../....|.\\............|......|.........-.......|................/.......|./............\...
.................................................\.......\-....\.........|.....-..|.........-................/
.............../..............\..........................\.................-\............-............-.......
/....|...../.....................................................-....\.....-................../..........-..\
.....\.....................-...........|...\.....-...../.......-.|.................|..........................
.............-..........-....-....-.-../....|.......-.\.........................-........../..../.....\.......
..........\\.........................../...-........./........\............|.........../......................
............-......|..................................................................-......./...-...........
........\............-......|....\............................\.\........|......................../......\...-
......../...|........|..-.-.../..../..........|........|....../....../../...........\.............\....../....
......|.........-........//........-../....\........./..........|.-......-...-......-.............\..|........
./......................../................-..........................................-.....--....|...........
....../............\\..../\............|..-.|.|.-.............-........|................................./.../
..-......../.......|.......|........................-....-..............................-.....................
.........||............|.\................|......................./.\...............-..........|..../..-..\...
\|.......|..\..........-.................../|.....-.............\............./....................../........
.....................|....-.../...............\.\.............................................................
............|.......................\...........-......|...././.-...../................|........-..........\.\
..........|../\.|.......|\..-............\.-..............-....../...\......||..\........-.\..../...\......./|
..|.....................................-\............//.......|..\..............\.........|....|.............
.....\...............................-........./..........\.........-....|..........-./../...\................
.....\./....-...\....................\|.........\.............-...\..........-...............|............./..
/./\......\.........\........-../......../.....|/..................../.././..-......................|\........
.|\...-.\\.......................|........-\.....|......|......./|..........-..../...................|.|......
...........\.............\./....|./.............................|.............................................
.../...../.|.................\...../.....-..............|.\.\../.................../.............\............
..............\............-........-........\....../............|....|...\....\...|.....-..../...............
/.\.\........-....\.|....-....\..../...-./...............-.......\../........./..../........./.......\........
|..............................-..\............................\......//........\../...-../..\......../.......
.............\.../.\............\--............|................-|............|......../......................
...../....|................................-.....................................|./..........|.........\.\\..
........./......-.....|............/.-.......\..-.......................................|..................\..
.......\.\.....................-|...../.....|........|............-..............-....../\..\....../..........
|..\.|........../|..\..|\..-...................\.................../.....-/...............|................../
...........|..-..............|........................-..............-...............-.............\.........\
...\./.....-...|.-.......-................/.\.....-..-...|......-.......................................--...|
...............-.........|............-............|./.......\...../.....\............-.\.....................
..................|......|..........-..............................-....|............|.\........./..-.........
|......................../.....-../|.....\./..\....|......................./........................./...\....
....|............-........\..-...............-................/\..........................|........|.......\-.
|......./.....\.......\..................-.\..../....|............|.../..................../|.../........../..
...-|..................||......--......\......|.............|\........./.................\......\........\....
./........./........-...................................\......-......................................-.....-.
.....\..-\-....\........................|........../.......|.........-.............................///........
./.............\........./.................|.....................|..\.........../...|...|..\.|............-...
.................................\.................................\...........................-.........-....
...................\....|...............|...............\..../.....-.....................................\....
.../.......-.......|...........|.....\..................../......................|../.............\...........
......-....................../..../.....-..............\............./...........-.....\....|...............|.
......-.......-.......|..................\................-...|./.......--............../.......|.-.|.........
-..................\........../..........................-...-.............../..............................|.
............/.........-..../\..-.....\....\........./.........\.........../.........|/.../....................
...................................../.....|..\.............\..........-.......\............../.............|.
..../........./.........................-.......\..|..|.....--|...../.............../..-/./.......|..../|.....
.........\.|...|..|-...................................\../..-.....|....\....................-................
..../..-......|..............\../............./..........-.|......../..........|.\........|..................-
......|.................\..........\|...................-.../.\.........../.|............../................./
.........................\.................................../-./............................-..-.........|...
\...........-................/....-.-....................................../...../..............\.......-\.../
-....................................\.........................../.............................|..............
......................\............\.......\..\.............\.................-....\....-.|...................
.|-.-...../......./............./........|.................../.........-..\........./.\|...........-..........
.......\..............\.....-..........\.|.\...|.........\/..........\......|.\...................-...........
../.-..................../..................|.....-...-....-............................-.-..-../..\..........
.................................-.......|...../.\.................\..../................................-....
.-..|.....|.........-........|....-.........../...........\......-..........................\.................
..-.................../...|..-..|...................../...-...|........................................./|....
.........................-\............................./....................../.......-................|.....
........../.......\.........|...-/........./............./......................../...........-../..\.-\...-..
..........|....\-........\...................-.|....-.........\................../.......\....................
/...-..........\......\.........|.............|...........-....../.|..|..-............................|.......
.........\.|........\......\....|.........................................../........-........................
....\.....|.......\....................................-............|.....-........./..\...\.....-..-.........
.|../...../.......|\......\............../....\..|..-...-..............|-.................................-...
.|.\......./........../........|..\.../|......\....|.........-.|.................-.........|............./..-.
...............-.................|...-../\..../.......-.....|..\./............................................
....-.|.........-........................../...................|...............\........................../...
..|/...-..../../...-........-...-.....................................\.......................................
............../....|.....-\.....-................................../\.....................\....-........-.....
......../.|.................|......|.|.-....|...................../....................................\......
42 changes: 42 additions & 0 deletions 2023/day16/solutions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
with open("input") as f:
ls = f.read().strip().split("\n")

board = {i + 1j * j: x for i, l in enumerate(ls) for j, x in enumerate(l)}


def energized(entry, d):
q = [(entry - d, d)]
seen = set()
while q:
z, d = q.pop()
if (z, d) in seen:
continue
seen.add((z, d))
newz = z + d
if newz not in board:
continue
match board[newz]:
case "|" if d.imag:
new_dir = [1, -1]
case "-" if d.real:
new_dir = [1j, -1j]
case "/":
new_dir = [(d * 1j).conjugate()]
case "\\":
new_dir = [(d * -1j).conjugate()]
case _:
new_dir = [d]
q += [(newz, newd) for newd in new_dir]
return len({x[0] for x in seen}) - 1


# Part 1
print(energized(0, 1j))

# Part 2
N, M = len(ls), len(ls[0])
entries = [(i, 1j) for i in range(N)]
entries += [(i + (M - 1) * 1j, -1j) for i in range(N)]
entries += [(i * 1j, 1) for i in range(M)]
entries += [(N - 1 + i * 1j, -1) for i in range(M)]
print(max(energized(*x) for x in entries))

0 comments on commit e231323

Please sign in to comment.