223 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|                                [1]Advent of Code
 | ||
| 
 | ||
|      • [2][About]
 | ||
|      • [3][Events]
 | ||
|      • [4][Shop]
 | ||
|      • [5][Settings]
 | ||
|      • [6][Log Out]
 | ||
| 
 | ||
|    br0xen [7](AoC++) 24*
 | ||
| 
 | ||
|                                   sub y{[8]2023}
 | ||
| 
 | ||
|      • [9][Calendar]
 | ||
|      • [10][AoC++]
 | ||
|      • [11][Sponsors]
 | ||
|      • [12][Leaderboard]
 | ||
|      • [13][Stats]
 | ||
| 
 | ||
|    Our [14]sponsors help make Advent of Code possible:
 | ||
|    [15]Tailscale - Secure remote access, powered by WireGuard. Replace your
 | ||
|    VPN :)
 | ||
| 
 | ||
| --- Day 12: Hot Springs ---
 | ||
| 
 | ||
|    You finally reach the hot springs! You can see steam rising from secluded
 | ||
|    areas attached to the primary, ornate building.
 | ||
| 
 | ||
|    As you turn to enter, the [16]researcher stops you. "Wait - I thought you
 | ||
|    were looking for the hot springs, weren't you?" You indicate that this
 | ||
|    definitely looks like hot springs to you.
 | ||
| 
 | ||
|    "Oh, sorry, common mistake! This is actually the [17]onsen! The hot
 | ||
|    springs are next door."
 | ||
| 
 | ||
|    You look in the direction the researcher is pointing and suddenly notice
 | ||
|    the massive metal helixes towering overhead. "This way!"
 | ||
| 
 | ||
|    It only takes you a few more steps to reach the main gate of the massive
 | ||
|    fenced-off area containing the springs. You go through the gate and into a
 | ||
|    small administrative building.
 | ||
| 
 | ||
|    "Hello! What brings you to the hot springs today? Sorry they're not very
 | ||
|    hot right now; we're having a lava shortage at the moment." You ask about
 | ||
|    the missing machine parts for Desert Island.
 | ||
| 
 | ||
|    "Oh, all of Gear Island is currently offline! Nothing is being
 | ||
|    manufactured at the moment, not until we get more lava to heat our forges.
 | ||
|    And our springs. The springs aren't very springy unless they're hot!"
 | ||
| 
 | ||
|    "Say, could you go up and see why the lava stopped flowing? The springs
 | ||
|    are too cold for normal operation, but we should be able to find one
 | ||
|    springy enough to launch you up there!"
 | ||
| 
 | ||
|    There's just one problem - many of the springs have fallen into disrepair,
 | ||
|    so they're not actually sure which springs would even be safe to use!
 | ||
|    Worse yet, their condition records of which springs are damaged (your
 | ||
|    puzzle input) are also damaged! You'll need to help them repair the
 | ||
|    damaged records.
 | ||
| 
 | ||
|    In the giant field just outside, the springs are arranged into rows. For
 | ||
|    each row, the condition records show every spring and whether it is
 | ||
|    operational (.) or damaged (#). This is the part of the condition records
 | ||
|    that is itself damaged; for some springs, it is simply unknown (?) whether
 | ||
|    the spring is operational or damaged.
 | ||
| 
 | ||
|    However, the engineer that produced the condition records also duplicated
 | ||
|    some of this information in a different format! After the list of springs
 | ||
|    for a given row, the size of each contiguous group of damaged springs is
 | ||
|    listed in the order those groups appear in the row. This list always
 | ||
|    accounts for every damaged spring, and each number is the entire size of
 | ||
|    its contiguous group (that is, groups are always separated by at least one
 | ||
|    operational spring: #### would always be 4, never 2,2).
 | ||
| 
 | ||
|    So, condition records with no unknown spring conditions might look like
 | ||
|    this:
 | ||
| 
 | ||
|  #.#.### 1,1,3
 | ||
|  .#...#....###. 1,1,3
 | ||
|  .#.###.#.###### 1,3,1,6
 | ||
|  ####.#...#... 4,1,1
 | ||
|  #....######..#####. 1,6,5
 | ||
|  .###.##....# 3,2,1
 | ||
| 
 | ||
|    However, the condition records are partially damaged; some of the springs'
 | ||
|    conditions are actually unknown (?). For example:
 | ||
| 
 | ||
|  ???.### 1,1,3
 | ||
|  .??..??...?##. 1,1,3
 | ||
|  ?#?#?#?#?#?#?#? 1,3,1,6
 | ||
|  ????.#...#... 4,1,1
 | ||
|  ????.######..#####. 1,6,5
 | ||
|  ?###???????? 3,2,1
 | ||
| 
 | ||
|    Equipped with this information, it is your job to figure out how many
 | ||
|    different arrangements of operational and broken springs fit the given
 | ||
|    criteria in each row.
 | ||
| 
 | ||
|    In the first line (???.### 1,1,3), there is exactly one way separate
 | ||
|    groups of one, one, and three broken springs (in that order) can appear in
 | ||
|    that row: the first three unknown springs must be broken, then
 | ||
|    operational, then broken (#.#), making the whole row #.#.###.
 | ||
| 
 | ||
|    The second line is more interesting: .??..??...?##. 1,1,3 could be a total
 | ||
|    of four different arrangements. The last ? must always be broken (to
 | ||
|    satisfy the final contiguous group of three broken springs), and each ??
 | ||
|    must hide exactly one of the two broken springs. (Neither ?? could be both
 | ||
|    broken springs or they would form a single contiguous group of two; if
 | ||
|    that were true, the numbers afterward would have been 2,3 instead.) Since
 | ||
|    each ?? can either be #. or .#, there are four possible arrangements of
 | ||
|    springs.
 | ||
| 
 | ||
|    The last line is actually consistent with ten different arrangements!
 | ||
|    Because the first number is 3, the first and second ? must both be . (if
 | ||
|    either were #, the first number would have to be 4 or higher). However,
 | ||
|    the remaining run of unknown spring conditions have many different ways
 | ||
|    they could hold groups of two and one broken springs:
 | ||
| 
 | ||
|  ?###???????? 3,2,1
 | ||
|  .###.##.#...
 | ||
|  .###.##..#..
 | ||
|  .###.##...#.
 | ||
|  .###.##....#
 | ||
|  .###..##.#..
 | ||
|  .###..##..#.
 | ||
|  .###..##...#
 | ||
|  .###...##.#.
 | ||
|  .###...##..#
 | ||
|  .###....##.#
 | ||
| 
 | ||
|    In this example, the number of possible arrangements for each row is:
 | ||
| 
 | ||
|      • ???.### 1,1,3 - 1 arrangement
 | ||
|      • .??..??...?##. 1,1,3 - 4 arrangements
 | ||
|      • ?#?#?#?#?#?#?#? 1,3,1,6 - 1 arrangement
 | ||
|      • ????.#...#... 4,1,1 - 1 arrangement
 | ||
|      • ????.######..#####. 1,6,5 - 4 arrangements
 | ||
|      • ?###???????? 3,2,1 - 10 arrangements
 | ||
| 
 | ||
|    Adding all of the possible arrangement counts together produces a total of
 | ||
|    21 arrangements.
 | ||
| 
 | ||
|    For each row, count all of the different arrangements of operational and
 | ||
|    broken springs that meet the given criteria. What is the sum of those
 | ||
|    counts?
 | ||
| 
 | ||
|    Your puzzle answer was 7716.
 | ||
| 
 | ||
| --- Part Two ---
 | ||
| 
 | ||
|    As you look out at the field of springs, you feel like there are way more
 | ||
|    springs than the condition records list. When you examine the records, you
 | ||
|    discover that they were actually folded up this whole time!
 | ||
| 
 | ||
|    To unfold the records, on each row, replace the list of spring conditions
 | ||
|    with five copies of itself (separated by ?) and replace the list of
 | ||
|    contiguous groups of damaged springs with five copies of itself (separated
 | ||
|    by ,).
 | ||
| 
 | ||
|    So, this row:
 | ||
| 
 | ||
|  .# 1
 | ||
| 
 | ||
|    Would become:
 | ||
| 
 | ||
|  .#?.#?.#?.#?.# 1,1,1,1,1
 | ||
| 
 | ||
|    The first line of the above example would become:
 | ||
| 
 | ||
|  ???.###????.###????.###????.###????.### 1,1,3,1,1,3,1,1,3,1,1,3,1,1,3
 | ||
| 
 | ||
|    In the above example, after unfolding, the number of possible arrangements
 | ||
|    for some rows is now much larger:
 | ||
| 
 | ||
|      • ???.### 1,1,3 - 1 arrangement
 | ||
|      • .??..??...?##. 1,1,3 - 16384 arrangements
 | ||
|      • ?#?#?#?#?#?#?#? 1,3,1,6 - 1 arrangement
 | ||
|      • ????.#...#... 4,1,1 - 16 arrangements
 | ||
|      • ????.######..#####. 1,6,5 - 2500 arrangements
 | ||
|      • ?###???????? 3,2,1 - 506250 arrangements
 | ||
| 
 | ||
|    After unfolding, adding all of the possible arrangement counts together
 | ||
|    produces 525152.
 | ||
| 
 | ||
|    Unfold your condition records; what is the new sum of possible arrangement
 | ||
|    counts?
 | ||
| 
 | ||
|    Your puzzle answer was 18716325559999.
 | ||
| 
 | ||
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | ||
| 
 | ||
|    At this point, you should [18]return to your Advent calendar and try
 | ||
|    another puzzle.
 | ||
| 
 | ||
|    If you still want to see it, you can [19]get your puzzle input.
 | ||
| 
 | ||
|    You can also [Shareon [20]Twitter [21]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://tailscale.com/advent
 | ||
|   16. https://adventofcode.com/2023/day/11
 | ||
|   17. https://en.wikipedia.org/wiki/Onsen
 | ||
|   18. https://adventofcode.com/2023
 | ||
|   19. https://adventofcode.com/2023/day/12/input
 | ||
|   20. https://twitter.com/intent/tweet?text=I%27ve+completed+%22Hot+Springs%22+%2D+Day+12+%2D+Advent+of+Code+2023&url=https%3A%2F%2Fadventofcode%2Ecom%2F2023%2Fday%2F12&related=ericwastl&hashtags=AdventOfCode
 | ||
|   21. javascript:void(0);
 |