You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.1 KiB
Markdown
147 lines
3.1 KiB
Markdown
3 years ago
|
https://adventofcode.com/2021/day/12
|
||
|
|
||
|
## \--- Day 12: Passage Pathing ---
|
||
|
|
||
|
With your submarine's subterranean subsystems subsisting suboptimally, the
|
||
|
only way you're getting out of this cave anytime soon is by finding a path
|
||
|
yourself. Not just _a_ path - the only way to know if you've found the _best_
|
||
|
path is to find _all_ of them.
|
||
|
|
||
|
Fortunately, the sensors are still mostly working, and so you build a rough
|
||
|
map of the remaining caves (your puzzle input). For example:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
start-A
|
||
|
start-b
|
||
|
A-c
|
||
|
A-b
|
||
|
b-d
|
||
|
A-end
|
||
|
b-end
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
This is a list of how all of the caves are connected. You start in the cave
|
||
|
named `start`, and your destination is the cave named `end`. An entry like
|
||
|
`b-d` means that cave `b` is connected to cave `d` \- that is, you can move
|
||
|
between them.
|
||
|
|
||
|
So, the above cave system looks roughly like this:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
start
|
||
|
/ \
|
||
|
c--A-----b--d
|
||
|
\ /
|
||
|
end
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
Your goal is to find the number of distinct _paths_ that start at `start`, end
|
||
|
at `end`, and don't visit small caves more than once. There are two types of
|
||
|
caves: _big_ caves (written in uppercase, like `A`) and _small_ caves (written
|
||
|
in lowercase, like `b`). It would be a waste of time to visit any small cave
|
||
|
more than once, but big caves are large enough that it might be worth visiting
|
||
|
them multiple times. So, all paths you find should _visit small caves at most
|
||
|
once_ , and can _visit big caves any number of times_.
|
||
|
|
||
|
Given these rules, there are `_10_` paths through this example cave system:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
start,A,b,A,c,A,end
|
||
|
start,A,b,A,end
|
||
|
start,A,b,end
|
||
|
start,A,c,A,b,A,end
|
||
|
start,A,c,A,b,end
|
||
|
start,A,c,A,end
|
||
|
start,A,end
|
||
|
start,b,A,c,A,end
|
||
|
start,b,A,end
|
||
|
start,b,end
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
(Each line in the above list corresponds to a single path; the caves visited
|
||
|
by that path are listed in the order they are visited and separated by
|
||
|
commas.)
|
||
|
|
||
|
Note that in this cave system, cave `d` is never visited by any path: to do
|
||
|
so, cave `b` would need to be visited twice (once on the way to cave `d` and a
|
||
|
second time when returning from cave `d`), and since cave `b` is small, this
|
||
|
is not allowed.
|
||
|
|
||
|
Here is a slightly larger example:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
dc-end
|
||
|
HN-start
|
||
|
start-kj
|
||
|
dc-start
|
||
|
dc-HN
|
||
|
LN-dc
|
||
|
HN-end
|
||
|
kj-sa
|
||
|
kj-HN
|
||
|
kj-dc
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
The `19` paths through it are as follows:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
start,HN,dc,HN,end
|
||
|
start,HN,dc,HN,kj,HN,end
|
||
|
start,HN,dc,end
|
||
|
start,HN,dc,kj,HN,end
|
||
|
start,HN,end
|
||
|
start,HN,kj,HN,dc,HN,end
|
||
|
start,HN,kj,HN,dc,end
|
||
|
start,HN,kj,HN,end
|
||
|
start,HN,kj,dc,HN,end
|
||
|
start,HN,kj,dc,end
|
||
|
start,dc,HN,end
|
||
|
start,dc,HN,kj,HN,end
|
||
|
start,dc,end
|
||
|
start,dc,kj,HN,end
|
||
|
start,kj,HN,dc,HN,end
|
||
|
start,kj,HN,dc,end
|
||
|
start,kj,HN,end
|
||
|
start,kj,dc,HN,end
|
||
|
start,kj,dc,end
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
Finally, this even larger example has `226` paths through it:
|
||
|
|
||
|
[code]
|
||
|
|
||
|
fs-end
|
||
|
he-DX
|
||
|
fs-he
|
||
|
start-DX
|
||
|
pj-DX
|
||
|
end-zg
|
||
|
zg-sl
|
||
|
zg-pj
|
||
|
pj-he
|
||
|
RW-he
|
||
|
fs-DX
|
||
|
pj-RW
|
||
|
zg-RW
|
||
|
start-pj
|
||
|
he-WI
|
||
|
zg-he
|
||
|
pj-fs
|
||
|
start-RW
|
||
|
|
||
|
[/code]
|
||
|
|
||
|
_How many paths through this cave system are there that visit small caves at
|
||
|
most once?_
|
||
|
|