2023 Day 19 Complete
This commit is contained in:
163
2023/day19/problem
Normal file
163
2023/day19/problem
Normal file
@@ -0,0 +1,163 @@
|
||||
[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);
|
Reference in New Issue
Block a user