This is Day 12 of Advent of Code 2023! If you would like to solve the problems before looking at the solution, you can find them here.

In part 1 of Day 12, we have wildcards representing either an operational hot spring (denoted by a `.`) or a damaged hot spring (denoted by a `#`). We've been given the pattern in which damaged hot springs are clustered, and we need to figure out the number of potential combinations that are allowed using the wildcards. I ran into some weird - maybe interesting - issues with the `pow()` function that can return any type of numeric value, but it only takes a `u32` as an exponent (see SO post here). Another thing I learnt was to replace a character in a string at a given index using the `replace_range()` function - I guess a cleaner way to write a single position replacement instead of `pos..pos+1` could be `pos..=pos`. The logic itself is pretty simple - I used `rayon` again to parallelize the processing and calculate the sum of possible combinations for all lines. Click here to jump to the part 2 "discussion".

For part 2 of Day 12, it would have been useful to have come up with a smarter solution for part 1 because you can't really brute force part 2. Unfortunately I did not have the bandwidth or the patience to refactor the code to make part 2 run, so this part is left as an exercise for the reader.

That's all folks! If you made it this far, enjoy some AI art generated by u/dimpopo using the prompt for this puzzle.

Cheers,

Devang