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 20ad854
Show file tree
Hide file tree
Showing 2 changed files with 163 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 @@
\..|.....................|.-........\.............-................|./....|.....-...-.........................
.......\.........|..............-...||..............-...........--.|...............||..........\............|.
........../.....................\.........\..................\....|.....-.................../..-.\............
................/..../........../..-....|\.|...-...................\....|/........|...........................
.....|../-\.|....|................................--.-./..........|.........../..-....-................-....|.
.../..........\................-.......\................|/..\.................\.....\...|....../............./
..-../.../......-.....\........//.............|.........../...|.........../.......-...........................
......\....../......./..|\............/..........................\..............\.....\.........|......-...|..
.|/.......\.........|...../..//...................................-....-...........././-...............-......
........-....../......./..\.............|.....................\........../-....../........-...................
......-........./\..................../..\|..-//....|.\--................|.....|.../............-............\
........................|...-........|..............|..............|................./........................
...................|................|..../...-...................../...|......\..................|...|\.......
....-......../.\...............\-...\...........................................................|.............
.............../.|.......|.........\.\.........................-|.............\........-.../...-...||.........
....-...-\.-............/...../...../..\........\|....\...............\.............-........................\
........././.......//......-...|...........-...|..|....-......-.......|............................|../.......
\.................|..../.....-..|......./.....................\....../...|./\.\...............-............./.
.....-\............../...................................../....\.....-|...........-.\...../............\.....
......................./..\..................|...............-.........-..../......../..|.....................
....\...................../...../......|...........................\......||.\...-..............-...........|.
..........................|........../...........|....-.......\........................-|..\............/..|..
-./...|..............................................|./../.........-|.\.|..........\........../.........\....
...........|......................-............................|.........................\....-........../....
........................|/....\......../.|.......\.........../..................\........................-....
...../.................-............................-.\......|...............\...........\.....-.............-
....|-.............-.../....\...........-...........|\.............-.............../-....../..................
...............\/.............../.|............................/.|...................-............-...........
.................\.....\........./......../.....\.....|........-..\..........................|................
...............-..-........-........../...../...\.................\..-.-.....|..........\..............\......
.............-....../....|.\\............|......|.........-.......|................/.......|./............\...
.................................................\.......\-....\.........|.....-..|.........-................/
.............../..............\..........................\.................-\............-............-.......
/....|...../.....................................................-....\.....-................../..........-..\
.....\.....................-...........|...\.....-...../.......-.|.................|..........................
.............-..........-....-....-.-../....|.......-.\.........................-........../..../.....\.......
..........\\.........................../...-........./........\............|.........../......................
............-......|..................................................................-......./...-...........
........\............-......|....\............................\.\........|......................../......\...-
......../...|........|..-.-.../..../..........|........|....../....../../...........\.............\....../....
......|.........-........//........-../....\........./..........|.-......-...-......-.............\..|........
./......................../................-..........................................-.....--....|...........
....../............\\..../\............|..-.|.|.-.............-........|................................./.../
..-......../.......|.......|........................-....-..............................-.....................
.........||............|.\................|......................./.\...............-..........|..../..-..\...
\|.......|..\..........-.................../|.....-.............\............./....................../........
.....................|....-.../...............\.\.............................................................
............|.......................\...........-......|...././.-...../................|........-..........\.\
..........|../\.|.......|\..-............\.-..............-....../...\......||..\........-.\..../...\......./|
..|.....................................-\............//.......|..\..............\.........|....|.............
.....\...............................-........./..........\.........-....|..........-./../...\................
.....\./....-...\....................\|.........\.............-...\..........-...............|............./..
/./\......\.........\........-../......../.....|/..................../.././..-......................|\........
.|\...-.\\.......................|........-\.....|......|......./|..........-..../...................|.|......
...........\.............\./....|./.............................|.............................................
.../...../.|.................\...../.....-..............|.\.\../.................../.............\............
..............\............-........-........\....../............|....|...\....\...|.....-..../...............
/.\.\........-....\.|....-....\..../...-./...............-.......\../........./..../........./.......\........
|..............................-..\............................\......//........\../...-../..\......../.......
.............\.../.\............\--............|................-|............|......../......................
...../....|................................-.....................................|./..........|.........\.\\..
........./......-.....|............/.-.......\..-.......................................|..................\..
.......\.\.....................-|...../.....|........|............-..............-....../\..\....../..........
|..\.|........../|..\..|\..-...................\.................../.....-/...............|................../
...........|..-..............|........................-..............-...............-.............\.........\
...\./.....-...|.-.......-................/.\.....-..-...|......-.......................................--...|
...............-.........|............-............|./.......\...../.....\............-.\.....................
..................|......|..........-..............................-....|............|.\........./..-.........
|......................../.....-../|.....\./..\....|......................./........................./...\....
....|............-........\..-...............-................/\..........................|........|.......\-.
|......./.....\.......\..................-.\..../....|............|.../..................../|.../........../..
...-|..................||......--......\......|.............|\........./.................\......\........\....
./........./........-...................................\......-......................................-.....-.
.....\..-\-....\........................|........../.......|.........-.............................///........
./.............\........./.................|.....................|..\.........../...|...|..\.|............-...
.................................\.................................\...........................-.........-....
...................\....|...............|...............\..../.....-.....................................\....
.../.......-.......|...........|.....\..................../......................|../.............\...........
......-....................../..../.....-..............\............./...........-.....\....|...............|.
......-.......-.......|..................\................-...|./.......--............../.......|.-.|.........
-..................\........../..........................-...-.............../..............................|.
............/.........-..../\..-.....\....\........./.........\.........../.........|/.../....................
...................................../.....|..\.............\..........-.......\............../.............|.
..../........./.........................-.......\..|..|.....--|...../.............../..-/./.......|..../|.....
.........\.|...|..|-...................................\../..-.....|....\....................-................
..../..-......|..............\../............./..........-.|......../..........|.\........|..................-
......|.................\..........\|...................-.../.\.........../.|............../................./
.........................\.................................../-./............................-..-.........|...
\...........-................/....-.-....................................../...../..............\.......-\.../
-....................................\.........................../.............................|..............
......................\............\.......\..\.............\.................-....\....-.|...................
.|-.-...../......./............./........|.................../.........-..\........./.\|...........-..........
.......\..............\.....-..........\.|.\...|.........\/..........\......|.\...................-...........
../.-..................../..................|.....-...-....-............................-.-..-../..\..........
.................................-.......|...../.\.................\..../................................-....
.-..|.....|.........-........|....-.........../...........\......-..........................\.................
..-.................../...|..-..|...................../...-...|........................................./|....
.........................-\............................./....................../.......-................|.....
........../.......\.........|...-/........./............./......................../...........-../..\.-\...-..
..........|....\-........\...................-.|....-.........\................../.......\....................
/...-..........\......\.........|.............|...........-....../.|..|..-............................|.......
.........\.|........\......\....|.........................................../........-........................
....\.....|.......\....................................-............|.....-........./..\...\.....-..-.........
.|../...../.......|\......\............../....\..|..-...-..............|-.................................-...
.|.\......./........../........|..\.../|......\....|.........-.|.................-.........|............./..-.
...............-.................|...-../\..../.......-.....|..\./............................................
....-.|.........-........................../...................|...............\........................../...
..|/...-..../../...-........-...-.....................................\.......................................
............../....|.....-\.....-................................../\.....................\....-........-.....
......../.|.................|......|.|.-....|...................../....................................\......
53 changes: 53 additions & 0 deletions 2023/day16/solutions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from math import inf


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()
seen_loc = 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
seen_loc.add(newz)
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.conjugate() * 1j]
case _:
new_dir = [d]
q += [(newz, newd) for newd in new_dir]
return len(seen_loc)


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

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

print(m)

0 comments on commit 20ad854

Please sign in to comment.