204 lines
7.0 KiB
Plaintext
204 lines
7.0 KiB
Plaintext
|
[1]Advent of Code
|
|||
|
|
|||
|
• [2][About]
|
|||
|
• [3][Events]
|
|||
|
• [4][Shop]
|
|||
|
• [5][Settings]
|
|||
|
• [6][Log Out]
|
|||
|
|
|||
|
br0xen [7](AoC++) 32*
|
|||
|
|
|||
|
λy.[8]2023
|
|||
|
|
|||
|
• [9][Calendar]
|
|||
|
• [10][AoC++]
|
|||
|
• [11][Sponsors]
|
|||
|
• [12][Leaderboard]
|
|||
|
• [13][Stats]
|
|||
|
|
|||
|
Our [14]sponsors help make Advent of Code possible:
|
|||
|
[15]JPMorgan Chase - With over 57,000 technologists globally and an annual
|
|||
|
tech spend of $15 billion, JPMorgan Chase is dedicated to improving the
|
|||
|
design, analytics, coding and testing that goes into creating high quality
|
|||
|
software products.
|
|||
|
|
|||
|
--- 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 (| and -).
|
|||
|
|
|||
|
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?
|
|||
|
|
|||
|
Your puzzle answer was 6816.
|
|||
|
|
|||
|
--- 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?
|
|||
|
|
|||
|
Your puzzle answer was 8163.
|
|||
|
|
|||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|||
|
|
|||
|
At this point, you should [16]return to your Advent calendar and try
|
|||
|
another puzzle.
|
|||
|
|
|||
|
If you still want to see it, you can [17]get your puzzle input.
|
|||
|
|
|||
|
You can also [Shareon [18]Twitter [19]Mastodon] this puzzle.
|
|||
|
|
|||
|
References
|
|||
|
|
|||
|
Visible links
|
|||
|
1. https://adventofcode.com/
|
|||
|
2. https://adventofcode.com/2023/about
|
|||
|
3. https://adventofcode.com/2023/events
|
|||
|
4. https://teespring.com/stores/advent-of-code
|
|||
|
5. https://adventofcode.com/2023/settings
|
|||
|
6. https://adventofcode.com/2023/auth/logout
|
|||
|
7. Advent of Code Supporter
|
|||
|
https://adventofcode.com/2023/support
|
|||
|
8. https://adventofcode.com/2023
|
|||
|
9. https://adventofcode.com/2023
|
|||
|
10. https://adventofcode.com/2023/support
|
|||
|
11. https://adventofcode.com/2023/sponsors
|
|||
|
12. https://adventofcode.com/2023/leaderboard
|
|||
|
13. https://adventofcode.com/2023/stats
|
|||
|
14. https://adventofcode.com/2023/sponsors
|
|||
|
15. https://www.jpmorgan.com/
|
|||
|
16. https://adventofcode.com/2023
|
|||
|
17. https://adventofcode.com/2023/day/16/input
|
|||
|
18. https://twitter.com/intent/tweet?text=I%27ve+completed+%22The+Floor+Will+Be+Lava%22+%2D+Day+16+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F16&related=ericwastl&hashtags=AdventOfCode
|
|||
|
19. javascript:void(0);
|