164 lines
6.4 KiB
Plaintext
164 lines
6.4 KiB
Plaintext
|
[1]Advent of Code
|
|||
|
|
|||
|
• [2][About]
|
|||
|
• [3][Events]
|
|||
|
• [4][Shop]
|
|||
|
• [5][Settings]
|
|||
|
• [6][Log Out]
|
|||
|
|
|||
|
br0xen [7](AoC++) 38*
|
|||
|
|
|||
|
λy.[8]2023
|
|||
|
|
|||
|
• [9][Calendar]
|
|||
|
• [10][AoC++]
|
|||
|
• [11][Sponsors]
|
|||
|
• [12][Leaderboard]
|
|||
|
• [13][Stats]
|
|||
|
|
|||
|
Our [14]sponsors help make Advent of Code possible:
|
|||
|
[15]BJSS Ltd - "Our people are a team of problem solvers, experienced in
|
|||
|
evolving technologies and delivering world-class technology solutions"
|
|||
|
|
|||
|
--- Day 19: Aplenty ---
|
|||
|
|
|||
|
The Elves of Gear Island are thankful for your help and send you on your
|
|||
|
way. They even have a hang glider that someone [16]stole from Desert
|
|||
|
Island; since you're already going that direction, it would help them a
|
|||
|
lot if you would use it to get down there and return it to them.
|
|||
|
|
|||
|
As you reach the bottom of the relentless avalanche of machine parts, you
|
|||
|
discover that they're already forming a formidable heap. Don't worry,
|
|||
|
though - a group of Elves is already here organizing the parts, and they
|
|||
|
have a system.
|
|||
|
|
|||
|
To start, each part is rated in each of four categories:
|
|||
|
|
|||
|
• x: Extremely cool looking
|
|||
|
• m: Musical (it makes a noise when you hit it)
|
|||
|
• a: Aerodynamic
|
|||
|
• s: Shiny
|
|||
|
|
|||
|
Then, each part is sent through a series of workflows that will ultimately
|
|||
|
accept or reject the part. Each workflow has a name and contains a list of
|
|||
|
rules; each rule specifies a condition and where to send the part if the
|
|||
|
condition is true. The first rule that matches the part being considered
|
|||
|
is applied immediately, and the part moves on to the destination described
|
|||
|
by the rule. (The last rule in each workflow has no condition and always
|
|||
|
applies if reached.)
|
|||
|
|
|||
|
Consider the workflow ex{x>10:one,m<20:two,a>30:R,A}. This workflow is
|
|||
|
named ex and contains four rules. If workflow ex were considering a
|
|||
|
specific part, it would perform the following steps in order:
|
|||
|
|
|||
|
• Rule "x>10:one": If the part's x is more than 10, send the part to the
|
|||
|
workflow named one.
|
|||
|
• Rule "m<20:two": Otherwise, if the part's m is less than 20, send the
|
|||
|
part to the workflow named two.
|
|||
|
• Rule "a>30:R": Otherwise, if the part's a is more than 30, the part is
|
|||
|
immediately rejected (R).
|
|||
|
• Rule "A": Otherwise, because no other rules matched the part, the part
|
|||
|
is immediately accepted (A).
|
|||
|
|
|||
|
If a part is sent to another workflow, it immediately switches to the
|
|||
|
start of that workflow instead and never returns. If a part is accepted
|
|||
|
(sent to A) or rejected (sent to R), the part immediately stops any
|
|||
|
further processing.
|
|||
|
|
|||
|
The system works, but it's not keeping up with the torrent of weird metal
|
|||
|
shapes. The Elves ask if you can help sort a few parts and give you the
|
|||
|
list of workflows and some part ratings (your puzzle input). For example:
|
|||
|
|
|||
|
px{a2090:A,rfg}
|
|||
|
pv{a>1716:R,A}
|
|||
|
lnx{m>1548:A,A}
|
|||
|
rfg{s2440:R,A}
|
|||
|
qs{s>3448:A,lnx}
|
|||
|
qkq{x2662:A,R}
|
|||
|
in{s2770:qs,m3333:R,R}
|
|||
|
hdj{m>838:A,pv}
|
|||
|
|
|||
|
{x=787,m=2655,a=1222,s=2876}
|
|||
|
{x=1679,m=44,a=2067,s=496}
|
|||
|
{x=2036,m=264,a=79,s=2244}
|
|||
|
{x=2461,m=1339,a=466,s=291}
|
|||
|
{x=2127,m=1623,a=2188,s=1013}
|
|||
|
|
|||
|
The workflows are listed first, followed by a blank line, then the ratings
|
|||
|
of the parts the Elves would like you to sort. All parts begin in the
|
|||
|
workflow named in. In this example, the five listed parts go through the
|
|||
|
following workflows:
|
|||
|
|
|||
|
• {x=787,m=2655,a=1222,s=2876}: in -> qqz -> qs -> lnx -> A
|
|||
|
• {x=1679,m=44,a=2067,s=496}: in -> px -> rfg -> gd -> R
|
|||
|
• {x=2036,m=264,a=79,s=2244}: in -> qqz -> hdj -> pv -> A
|
|||
|
• {x=2461,m=1339,a=466,s=291}: in -> px -> qkq -> crn -> R
|
|||
|
• {x=2127,m=1623,a=2188,s=1013}: in -> px -> rfg -> A
|
|||
|
|
|||
|
Ultimately, three parts are accepted. Adding up the x, m, a, and s rating
|
|||
|
for each of the accepted parts gives 7540 for the part with x=787, 4623
|
|||
|
for the part with x=2036, and 6951 for the part with x=2127. Adding all of
|
|||
|
the ratings for all of the accepted parts gives the sum total of 19114.
|
|||
|
|
|||
|
Sort through all of the parts you've been given; what do you get if you
|
|||
|
add together all of the rating numbers for all of the parts that
|
|||
|
ultimately get accepted?
|
|||
|
|
|||
|
Your puzzle answer was 409898.
|
|||
|
|
|||
|
--- Part Two ---
|
|||
|
|
|||
|
Even with your help, the sorting process still isn't fast enough.
|
|||
|
|
|||
|
One of the Elves comes up with a new plan: rather than sort parts
|
|||
|
individually through all of these workflows, maybe you can figure out in
|
|||
|
advance which combinations of ratings will be accepted or rejected.
|
|||
|
|
|||
|
Each of the four ratings (x, m, a, s) can have an integer value ranging
|
|||
|
from a minimum of 1 to a maximum of 4000. Of all possible distinct
|
|||
|
combinations of ratings, your job is to figure out which ones will be
|
|||
|
accepted.
|
|||
|
|
|||
|
In the above example, there are 167409079868000 distinct combinations of
|
|||
|
ratings that will be accepted.
|
|||
|
|
|||
|
Consider only your list of workflows; the list of part ratings that the
|
|||
|
Elves wanted you to sort is no longer relevant. How many distinct
|
|||
|
combinations of ratings will be accepted by the Elves' workflows?
|
|||
|
|
|||
|
Your puzzle answer was 113057405770956.
|
|||
|
|
|||
|
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://www.bjss.com/
|
|||
|
16. https://adventofcode.com/2023/day/9
|
|||
|
17. https://adventofcode.com/2023
|
|||
|
18. https://adventofcode.com/2023/day/19/input
|
|||
|
19. https://twitter.com/intent/tweet?text=I%27ve+completed+%22Aplenty%22+%2D+Day+19+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F19&related=ericwastl&hashtags=AdventOfCode
|
|||
|
20. javascript:void(0);
|