311 lines
8.8 KiB
Plaintext
311 lines
8.8 KiB
Plaintext
|
[1]Advent of Code
|
|||
|
|
|||
|
• [2][About]
|
|||
|
• [3][Events]
|
|||
|
• [4][Shop]
|
|||
|
• [5][Settings]
|
|||
|
• [6][Log Out]
|
|||
|
|
|||
|
br0xen [7](AoC++) 20*
|
|||
|
|
|||
|
//[8]2023
|
|||
|
|
|||
|
• [9][Calendar]
|
|||
|
• [10][AoC++]
|
|||
|
• [11][Sponsors]
|
|||
|
• [12][Leaderboard]
|
|||
|
• [13][Stats]
|
|||
|
|
|||
|
Our [14]sponsors help make Advent of Code possible:
|
|||
|
[15]Kotlin by JetBrains - Jingle bells, Kotlin pals, coding all the way!
|
|||
|
Solve puzzles, catch our daily livestreams for expert guidance, embrace
|
|||
|
the joy of Kotlin, and engage with a fantastic community. Happy holidays
|
|||
|
and happy coding!
|
|||
|
|
|||
|
--- Day 10: Pipe Maze ---
|
|||
|
|
|||
|
You use the hang glider to ride the hot air from Desert Island all the way
|
|||
|
up to the floating metal island. This island is surprisingly cold and
|
|||
|
there definitely aren't any thermals to glide on, so you leave your hang
|
|||
|
glider behind.
|
|||
|
|
|||
|
You wander around for a while, but you don't find any people or animals.
|
|||
|
However, you do occasionally find signposts labeled "[16]Hot Springs"
|
|||
|
pointing in a seemingly consistent direction; maybe you can find someone
|
|||
|
at the hot springs and ask them where the desert-machine parts are made.
|
|||
|
|
|||
|
The landscape here is alien; even the flowers and trees are made of metal.
|
|||
|
As you stop to admire some metal grass, you notice something metallic
|
|||
|
scurry away in your peripheral vision and jump into a big pipe! It didn't
|
|||
|
look like any animal you've ever seen; if you want a better look, you'll
|
|||
|
need to get ahead of it.
|
|||
|
|
|||
|
Scanning the area, you discover that the entire field you're standing on
|
|||
|
is densely packed with pipes; it was hard to tell at first because they're
|
|||
|
the same metallic silver color as the "ground". You make a quick sketch of
|
|||
|
all of the surface pipes you can see (your puzzle input).
|
|||
|
|
|||
|
The pipes are arranged in a two-dimensional grid of tiles:
|
|||
|
|
|||
|
• | is a vertical pipe connecting north and south.
|
|||
|
• - is a horizontal pipe connecting east and west.
|
|||
|
• L is a 90-degree bend connecting north and east.
|
|||
|
• J is a 90-degree bend connecting north and west.
|
|||
|
• 7 is a 90-degree bend connecting south and west.
|
|||
|
• F is a 90-degree bend connecting south and east.
|
|||
|
• . is ground; there is no pipe in this tile.
|
|||
|
• S is the starting position of the animal; there is a pipe on this
|
|||
|
tile, but your sketch doesn't show what shape the pipe has.
|
|||
|
|
|||
|
Based on the acoustics of the animal's scurrying, you're confident the
|
|||
|
pipe that contains the animal is one large, continuous loop.
|
|||
|
|
|||
|
For example, here is a square loop of pipe:
|
|||
|
|
|||
|
.....
|
|||
|
.F-7.
|
|||
|
.|.|.
|
|||
|
.L-J.
|
|||
|
.....
|
|||
|
|
|||
|
If the animal had entered this loop in the northwest corner, the sketch
|
|||
|
would instead look like this:
|
|||
|
|
|||
|
.....
|
|||
|
.S-7.
|
|||
|
.|.|.
|
|||
|
.L-J.
|
|||
|
.....
|
|||
|
|
|||
|
In the above diagram, the S tile is still a 90-degree F bend: you can tell
|
|||
|
because of how the adjacent pipes connect to it.
|
|||
|
|
|||
|
Unfortunately, there are also many pipes that aren't connected to the
|
|||
|
loop! This sketch shows the same loop as above:
|
|||
|
|
|||
|
-L|F7
|
|||
|
7S-7|
|
|||
|
L|7||
|
|||
|
-L-J|
|
|||
|
L|-JF
|
|||
|
|
|||
|
In the above diagram, you can still figure out which pipes form the main
|
|||
|
loop: they're the ones connected to S, pipes those pipes connect to, pipes
|
|||
|
those pipes connect to, and so on. Every pipe in the main loop connects to
|
|||
|
its two neighbors (including S, which will have exactly two pipes
|
|||
|
connecting to it, and which is assumed to connect back to those two
|
|||
|
pipes).
|
|||
|
|
|||
|
Here is a sketch that contains a slightly more complex main loop:
|
|||
|
|
|||
|
..F7.
|
|||
|
.FJ|.
|
|||
|
SJ.L7
|
|||
|
|F--J
|
|||
|
LJ...
|
|||
|
|
|||
|
Here's the same example sketch with the extra, non-main-loop pipe tiles
|
|||
|
also shown:
|
|||
|
|
|||
|
7-F7-
|
|||
|
.FJ|7
|
|||
|
SJLL7
|
|||
|
|F--J
|
|||
|
LJ.LJ
|
|||
|
|
|||
|
If you want to get out ahead of the animal, you should find the tile in
|
|||
|
the loop that is farthest from the starting position. Because the animal
|
|||
|
is in the pipe, it doesn't make sense to measure this by direct distance.
|
|||
|
Instead, you need to find the tile that would take the longest number of
|
|||
|
steps along the loop to reach from the starting point - regardless of
|
|||
|
which way around the loop the animal went.
|
|||
|
|
|||
|
In the first example with the square loop:
|
|||
|
|
|||
|
.....
|
|||
|
.S-7.
|
|||
|
.|.|.
|
|||
|
.L-J.
|
|||
|
.....
|
|||
|
|
|||
|
You can count the distance each tile in the loop is from the starting
|
|||
|
point like this:
|
|||
|
|
|||
|
.....
|
|||
|
.012.
|
|||
|
.1.3.
|
|||
|
.234.
|
|||
|
.....
|
|||
|
|
|||
|
In this example, the farthest point from the start is 4 steps away.
|
|||
|
|
|||
|
Here's the more complex loop again:
|
|||
|
|
|||
|
..F7.
|
|||
|
.FJ|.
|
|||
|
SJ.L7
|
|||
|
|F--J
|
|||
|
LJ...
|
|||
|
|
|||
|
Here are the distances for each tile on that loop:
|
|||
|
|
|||
|
..45.
|
|||
|
.236.
|
|||
|
01.78
|
|||
|
14567
|
|||
|
23...
|
|||
|
|
|||
|
Find the single giant loop starting at S. How many steps along the loop
|
|||
|
does it take to get from the starting position to the point farthest from
|
|||
|
the starting position?
|
|||
|
|
|||
|
Your puzzle answer was 6942.
|
|||
|
|
|||
|
--- Part Two ---
|
|||
|
|
|||
|
You quickly reach the farthest point of the loop, but the animal never
|
|||
|
emerges. Maybe its nest is within the area enclosed by the loop?
|
|||
|
|
|||
|
To determine whether it's even worth taking the time to search for such a
|
|||
|
nest, you should calculate how many tiles are contained within the loop.
|
|||
|
For example:
|
|||
|
|
|||
|
...........
|
|||
|
.S-------7.
|
|||
|
.|F-----7|.
|
|||
|
.||.....||.
|
|||
|
.||.....||.
|
|||
|
.|L-7.F-J|.
|
|||
|
.|..|.|..|.
|
|||
|
.L--J.L--J.
|
|||
|
...........
|
|||
|
|
|||
|
The above loop encloses merely four tiles - the two pairs of . in the
|
|||
|
southwest and southeast (marked I below). The middle . tiles (marked O
|
|||
|
below) are not in the loop. Here is the same loop again with those regions
|
|||
|
marked:
|
|||
|
|
|||
|
...........
|
|||
|
.S-------7.
|
|||
|
.|F-----7|.
|
|||
|
.||OOOOO||.
|
|||
|
.||OOOOO||.
|
|||
|
.|L-7OF-J|.
|
|||
|
.|II|O|II|.
|
|||
|
.L--JOL--J.
|
|||
|
.....O.....
|
|||
|
|
|||
|
In fact, there doesn't even need to be a full tile path to the outside for
|
|||
|
tiles to count as outside the loop - squeezing between pipes is also
|
|||
|
allowed! Here, I is still within the loop and O is still outside the loop:
|
|||
|
|
|||
|
..........
|
|||
|
.S------7.
|
|||
|
.|F----7|.
|
|||
|
.||OOOO||.
|
|||
|
.||OOOO||.
|
|||
|
.|L-7F-J|.
|
|||
|
.|II||II|.
|
|||
|
.L--JL--J.
|
|||
|
..........
|
|||
|
|
|||
|
In both of the above examples, 4 tiles are enclosed by the loop.
|
|||
|
|
|||
|
Here's a larger example:
|
|||
|
|
|||
|
.F----7F7F7F7F-7....
|
|||
|
.|F--7||||||||FJ....
|
|||
|
.||.FJ||||||||L7....
|
|||
|
FJL7L7LJLJ||LJ.L-7..
|
|||
|
L--J.L7...LJS7F-7L7.
|
|||
|
....F-J..F7FJ|L7L7L7
|
|||
|
....L7.F7||L7|.L7L7|
|
|||
|
.....|FJLJ|FJ|F7|.LJ
|
|||
|
....FJL-7.||.||||...
|
|||
|
....L---J.LJ.LJLJ...
|
|||
|
|
|||
|
The above sketch has many random bits of ground, some of which are in the
|
|||
|
loop (I) and some of which are outside it (O):
|
|||
|
|
|||
|
OF----7F7F7F7F-7OOOO
|
|||
|
O|F--7||||||||FJOOOO
|
|||
|
O||OFJ||||||||L7OOOO
|
|||
|
FJL7L7LJLJ||LJIL-7OO
|
|||
|
L--JOL7IIILJS7F-7L7O
|
|||
|
OOOOF-JIIF7FJ|L7L7L7
|
|||
|
OOOOL7IF7||L7|IL7L7|
|
|||
|
OOOOO|FJLJ|FJ|F7|OLJ
|
|||
|
OOOOFJL-7O||O||||OOO
|
|||
|
OOOOL---JOLJOLJLJOOO
|
|||
|
|
|||
|
In this larger example, 8 tiles are enclosed by the loop.
|
|||
|
|
|||
|
Any tile that isn't part of the main loop can count as being enclosed by
|
|||
|
the loop. Here's another example with many bits of junk pipe lying around
|
|||
|
that aren't connected to the main loop at all:
|
|||
|
|
|||
|
FF7FSF7F7F7F7F7F---7
|
|||
|
L|LJ||||||||||||F--J
|
|||
|
FL-7LJLJ||||||LJL-77
|
|||
|
F--JF--7||LJLJ7F7FJ-
|
|||
|
L---JF-JLJ.||-FJLJJ7
|
|||
|
|F|F-JF---7F7-L7L|7|
|
|||
|
|FFJF7L7F-JF7|JL---7
|
|||
|
7-L-JL7||F7|L7F-7F7|
|
|||
|
L.L7LFJ|||||FJL7||LJ
|
|||
|
L7JLJL-JLJLJL--JLJ.L
|
|||
|
|
|||
|
Here are just the tiles that are enclosed by the loop marked with I:
|
|||
|
|
|||
|
FF7FSF7F7F7F7F7F---7
|
|||
|
L|LJ||||||||||||F--J
|
|||
|
FL-7LJLJ||||||LJL-77
|
|||
|
F--JF--7||LJLJIF7FJ-
|
|||
|
L---JF-JLJIIIIFJLJJ7
|
|||
|
|F|F-JF---7IIIL7L|7|
|
|||
|
|FFJF7L7F-JF7IIL---7
|
|||
|
7-L-JL7||F7|L7F-7F7|
|
|||
|
L.L7LFJ|||||FJL7||LJ
|
|||
|
L7JLJL-JLJLJL--JLJ.L
|
|||
|
|
|||
|
In this last example, 10 tiles are enclosed by the loop.
|
|||
|
|
|||
|
Figure out whether you have time to search for the nest by calculating the
|
|||
|
area within the loop. How many tiles are enclosed by the loop?
|
|||
|
|
|||
|
Your puzzle answer was 297.
|
|||
|
|
|||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
|||
|
|
|||
|
At this point, you should [17]return to your Advent calendar and try
|
|||
|
another puzzle.
|
|||
|
|
|||
|
If you still want to see it, you can [18]get your puzzle input.
|
|||
|
|
|||
|
You can also [Shareon [19]Twitter [20]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://kotlinlang.org/
|
|||
|
16. https://en.wikipedia.org/wiki/Hot_spring
|
|||
|
17. https://adventofcode.com/2023
|
|||
|
18. https://adventofcode.com/2023/day/10/input
|
|||
|
19. https://twitter.com/intent/tweet?text=I%27ve+completed+%22Pipe+Maze%22+%2D+Day+10+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F10&related=ericwastl&hashtags=AdventOfCode
|
|||
|
20. javascript:void(0);
|