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