-
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
170 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
\..|.....................|.-........\.............-................|./....|.....-...-......................... | ||
.......\.........|..............-...||..............-...........--.|...............||..........\............|. | ||
........../.....................\.........\..................\....|.....-.................../..-.\............ | ||
................/..../........../..-....|\.|...-...................\....|/........|........................... | ||
.....|../-\.|....|................................--.-./..........|.........../..-....-................-....|. | ||
.../..........\................-.......\................|/..\.................\.....\...|....../............./ | ||
..-../.../......-.....\........//.............|.........../...|.........../.......-........................... | ||
......\....../......./..|\............/..........................\..............\.....\.........|......-...|.. | ||
.|/.......\.........|...../..//...................................-....-...........././-...............-...... | ||
........-....../......./..\.............|.....................\........../-....../........-................... | ||
......-........./\..................../..\|..-//....|.\--................|.....|.../............-............\ | ||
........................|...-........|..............|..............|................./........................ | ||
...................|................|..../...-...................../...|......\..................|...|\....... | ||
....-......../.\...............\-...\...........................................................|............. | ||
.............../.|.......|.........\.\.........................-|.............\........-.../...-...||......... | ||
....-...-\.-............/...../...../..\........\|....\...............\.............-........................\ | ||
........././.......//......-...|...........-...|..|....-......-.......|............................|../....... | ||
\.................|..../.....-..|......./.....................\....../...|./\.\...............-............./. | ||
.....-\............../...................................../....\.....-|...........-.\...../............\..... | ||
......................./..\..................|...............-.........-..../......../..|..................... | ||
....\...................../...../......|...........................\......||.\...-..............-...........|. | ||
..........................|........../...........|....-.......\........................-|..\............/..|.. | ||
-./...|..............................................|./../.........-|.\.|..........\........../.........\.... | ||
...........|......................-............................|.........................\....-........../.... | ||
........................|/....\......../.|.......\.........../..................\........................-.... | ||
...../.................-............................-.\......|...............\...........\.....-.............- | ||
....|-.............-.../....\...........-...........|\.............-.............../-....../.................. | ||
...............\/.............../.|............................/.|...................-............-........... | ||
.................\.....\........./......../.....\.....|........-..\..........................|................ | ||
...............-..-........-........../...../...\.................\..-.-.....|..........\..............\...... | ||
.............-....../....|.\\............|......|.........-.......|................/.......|./............\... | ||
.................................................\.......\-....\.........|.....-..|.........-................/ | ||
.............../..............\..........................\.................-\............-............-....... | ||
/....|...../.....................................................-....\.....-................../..........-..\ | ||
.....\.....................-...........|...\.....-...../.......-.|.................|.......................... | ||
.............-..........-....-....-.-../....|.......-.\.........................-........../..../.....\....... | ||
..........\\.........................../...-........./........\............|.........../...................... | ||
............-......|..................................................................-......./...-........... | ||
........\............-......|....\............................\.\........|......................../......\...- | ||
......../...|........|..-.-.../..../..........|........|....../....../../...........\.............\....../.... | ||
......|.........-........//........-../....\........./..........|.-......-...-......-.............\..|........ | ||
./......................../................-..........................................-.....--....|........... | ||
....../............\\..../\............|..-.|.|.-.............-........|................................./.../ | ||
..-......../.......|.......|........................-....-..............................-..................... | ||
.........||............|.\................|......................./.\...............-..........|..../..-..\... | ||
\|.......|..\..........-.................../|.....-.............\............./....................../........ | ||
.....................|....-.../...............\.\............................................................. | ||
............|.......................\...........-......|...././.-...../................|........-..........\.\ | ||
..........|../\.|.......|\..-............\.-..............-....../...\......||..\........-.\..../...\......./| | ||
..|.....................................-\............//.......|..\..............\.........|....|............. | ||
.....\...............................-........./..........\.........-....|..........-./../...\................ | ||
.....\./....-...\....................\|.........\.............-...\..........-...............|............./.. | ||
/./\......\.........\........-../......../.....|/..................../.././..-......................|\........ | ||
.|\...-.\\.......................|........-\.....|......|......./|..........-..../...................|.|...... | ||
...........\.............\./....|./.............................|............................................. | ||
.../...../.|.................\...../.....-..............|.\.\../.................../.............\............ | ||
..............\............-........-........\....../............|....|...\....\...|.....-..../............... | ||
/.\.\........-....\.|....-....\..../...-./...............-.......\../........./..../........./.......\........ | ||
|..............................-..\............................\......//........\../...-../..\......../....... | ||
.............\.../.\............\--............|................-|............|......../...................... | ||
...../....|................................-.....................................|./..........|.........\.\\.. | ||
........./......-.....|............/.-.......\..-.......................................|..................\.. | ||
.......\.\.....................-|...../.....|........|............-..............-....../\..\....../.......... | ||
|..\.|........../|..\..|\..-...................\.................../.....-/...............|................../ | ||
...........|..-..............|........................-..............-...............-.............\.........\ | ||
...\./.....-...|.-.......-................/.\.....-..-...|......-.......................................--...| | ||
...............-.........|............-............|./.......\...../.....\............-.\..................... | ||
..................|......|..........-..............................-....|............|.\........./..-......... | ||
|......................../.....-../|.....\./..\....|......................./........................./...\.... | ||
....|............-........\..-...............-................/\..........................|........|.......\-. | ||
|......./.....\.......\..................-.\..../....|............|.../..................../|.../........../.. | ||
...-|..................||......--......\......|.............|\........./.................\......\........\.... | ||
./........./........-...................................\......-......................................-.....-. | ||
.....\..-\-....\........................|........../.......|.........-.............................///........ | ||
./.............\........./.................|.....................|..\.........../...|...|..\.|............-... | ||
.................................\.................................\...........................-.........-.... | ||
...................\....|...............|...............\..../.....-.....................................\.... | ||
.../.......-.......|...........|.....\..................../......................|../.............\........... | ||
......-....................../..../.....-..............\............./...........-.....\....|...............|. | ||
......-.......-.......|..................\................-...|./.......--............../.......|.-.|......... | ||
-..................\........../..........................-...-.............../..............................|. | ||
............/.........-..../\..-.....\....\........./.........\.........../.........|/.../.................... | ||
...................................../.....|..\.............\..........-.......\............../.............|. | ||
..../........./.........................-.......\..|..|.....--|...../.............../..-/./.......|..../|..... | ||
.........\.|...|..|-...................................\../..-.....|....\....................-................ | ||
..../..-......|..............\../............./..........-.|......../..........|.\........|..................- | ||
......|.................\..........\|...................-.../.\.........../.|............../................./ | ||
.........................\.................................../-./............................-..-.........|... | ||
\...........-................/....-.-....................................../...../..............\.......-\.../ | ||
-....................................\.........................../.............................|.............. | ||
......................\............\.......\..\.............\.................-....\....-.|................... | ||
.|-.-...../......./............./........|.................../.........-..\........./.\|...........-.......... | ||
.......\..............\.....-..........\.|.\...|.........\/..........\......|.\...................-........... | ||
../.-..................../..................|.....-...-....-............................-.-..-../..\.......... | ||
.................................-.......|...../.\.................\..../................................-.... | ||
.-..|.....|.........-........|....-.........../...........\......-..........................\................. | ||
..-.................../...|..-..|...................../...-...|........................................./|.... | ||
.........................-\............................./....................../.......-................|..... | ||
........../.......\.........|...-/........./............./......................../...........-../..\.-\...-.. | ||
..........|....\-........\...................-.|....-.........\................../.......\.................... | ||
/...-..........\......\.........|.............|...........-....../.|..|..-............................|....... | ||
.........\.|........\......\....|.........................................../........-........................ | ||
....\.....|.......\....................................-............|.....-........./..\...\.....-..-......... | ||
.|../...../.......|\......\............../....\..|..-...-..............|-.................................-... | ||
.|.\......./........../........|..\.../|......\....|.........-.|.................-.........|............./..-. | ||
...............-.................|...-../\..../.......-.....|..\./............................................ | ||
....-.|.........-........................../...................|...............\........................../... | ||
..|/...-..../../...-........-...-.....................................\....................................... | ||
............../....|.....-\.....-................................../\.....................\....-........-..... | ||
......../.|.................|......|.|.-....|...................../....................................\...... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
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: | ||
here, d = q.pop() | ||
if (here, d) in seen: | ||
continue | ||
seen.add((here, d)) | ||
newhere = here + d | ||
if newhere not in board: | ||
continue | ||
seen_loc.add(newhere) | ||
match board[newhere]: | ||
case "|": | ||
if d in (-1j, 1j): | ||
q.append((newhere, 1)) | ||
q.append((newhere, -1)) | ||
else: | ||
q.append((newhere, d)) | ||
case "-": | ||
if d in (1, -1): | ||
q.append((newhere, 1j)) | ||
q.append((newhere, -1j)) | ||
else: | ||
q.append((newhere, d)) | ||
case ".": | ||
q.append((newhere, d)) | ||
case "/": | ||
q.append((newhere, (d * 1j).conjugate())) | ||
case "\\": | ||
q.append((newhere, d.conjugate() * 1j)) | ||
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) |