-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path16.worksheet.sc
130 lines (114 loc) · 4.69 KB
/
16.worksheet.sc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
--- Day 16: The Floor Will Be Lava ---
With the beam of light completely focused somewhere, the reindeer leads you
deeper still into the Lava Production Facility. At some point, you realize that
the steel facility walls have been replaced with cave, and the doorways are just
cave, and the floor is cave, and you're pretty sure this is actually just a
giant cave.
Finally, as you approach what must be the heart of the mountain, you see a
bright light in a cavern up ahead. There, you discover that the beam of light
you so carefully focused is emerging from the cavern wall closest to the
facility and pouring all of its energy into a contraption on the opposite side.
Upon closer inspection, the contraption appears to be a flat, two-dimensional
square grid containing empty space (.), mirrors (/ and \), and splitters (|, -).
The contraption is aligned so that most of the beam bounces around the grid, but
each tile on the grid converts some of the beam's light into heat to melt the
rock in the cavern.
You note the layout of the contraption (your puzzle input). For example:
.|...\....
|.-.\.....
.....|-...
........|.
..........
.........\
..../.\\..
.-.-/..|..
.|....-|.\
..//.|....
The beam enters in the top-left corner from the left and heading to the right.
Then, its behavior depends on what it encounters as it moves:
If the beam encounters empty space (.), it continues in the same direction.
If the beam encounters a mirror (/ or \), the beam is reflected 90 degrees
depending on the angle of the mirror. For instance, a rightward-moving beam
that encounters a / mirror would continue upward in the mirror's column,
while a rightward-moving beam that encounters a \ mirror would continue
downward from the mirror's column.
If the beam encounters the pointy end of a splitter (| or -), the beam passes
through the splitter as if the splitter were empty space. For instance, a
rightward-moving beam that encounters a - splitter would continue in the
same direction.
If the beam encounters the flat side of a splitter (| or -), the beam is split
into two beams going in each of the two directions the splitter's pointy
ends are pointing. For instance, a rightward-moving beam that encounters a |
splitter would split into two beams: one that continues upward from the
splitter's column and one that continues downward from the splitter's column.
Beams do not interact with other beams; a tile can have many beams passing
through it at the same time. A tile is energized if that tile has at least one
beam pass through it, reflect in it, or split in it.
In the above example, here is how the beam of light bounces around the
contraption:
>|<<<\....
|v-.\^....
.v...|->>>
.v...v^.|.
.v...v^...
.v...v^..\
.v../2\\..
<->-/vv|..
.|<<<2-|.\
.v//.|.v..
Beams are only shown on empty tiles; arrows indicate the direction of the beams.
If a tile contains beams moving in multiple directions, the number of distinct
directions is shown instead. Here is the same diagram but instead only showing
whether a tile is energized (#) or not (.):
######....
.#...#....
.#...#####
.#...##...
.#...##...
.#...##...
.#..####..
########..
.#######..
.#...#.#..
Ultimately, in this example, 46 tiles become energized.
The light isn't energizing enough tiles to produce lava; to debug the
contraption, you need to start by analyzing the current situation. With the beam
starting in the top-left heading right, how many tiles end up being energized?
--- Part Two ---
As you try to work out what might be wrong, the reindeer tugs on your shirt and
leads you to a nearby control panel. There, a collection of buttons lets you
align the contraption so that the beam enters from any edge tile and heading
away from that edge. (You can choose either of two directions for the beam if it
starts on a corner; for instance, if the beam starts in the bottom-right corner,
it can start heading either left or upward.)
So, the beam could start on any tile in the top row (heading downward), any tile
in the bottom row (heading upward), any tile in the leftmost column (heading
right), or any tile in the rightmost column (heading left). To produce lava, you
need to find the configuration that energizes as many tiles as possible.
In the above example, this can be achieved by starting the beam in the fourth
tile from the left in the top row:
.|<2<\....
|v-v\^....
.v.v.|->>>
.v.v.v^.|.
.v.v.v^...
.v.v.v^..\
.v.v/2\\..
<-2-/vv|..
.|<<<2-|.\
.v//.|.v..
Using this configuration, 51 tiles are energized:
.#####....
.#.#.#....
.#.#.#####
.#.#.##...
.#.#.##...
.#.#.##...
.#.#####..
########..
.#######..
.#...#.#..
Find the initial beam configuration that energizes the largest number of tiles;
how many tiles are energized in that configuration?
*/