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);
|