Day 18: Lavaduct Lagoon
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
C
Fun and interesting puzzle! In part 1 I fumbled a bit trying to implement even/odd outside/inside tracking before realizing that wouldn’t work for this shape and just did the flood fill.
For part 2 I correctly guessed that like the intersecting cuboids (2021 day 22) it would be about finding a better representation for the grid or avoiding representing it entirely. Long story shorter:
/* * Conceptually: the raw map, which is too large to fit directly in * memory for part 2, is made much smaller by collapsing (and counting) * identical rows and columns. Another way to look it at is that a grid * is fitted to make 'opaque' cells. * | |#|##|# * For example: -+---+-+--+- * #|###|#| |# * #### ### 1 -+---+-+--+- * ##### # ### # 1 #| | | |# * # # becomes # # 2 or: #| | | |# * # # ##### 1 -+---+-+--+- * ######## 13121 #|###|#|##|# * * To avoid a lot of complex work, instead of actually collapsing and * splitting rows and columns, we first generate the wall rectangles and * collect the unique X and Y coordinates. Those are locations of our * virtual grid lines. */
Despite being quite happy with this solution, I couldn’t help but notice the brevity and simplicity of the other solutions here. Gonna have a look what’s happening there and see if I can try that approach too.
(Got bitten by a nasty overflow btw, the list of unique X coordinates was overwriting the list of unique Y coordinates. Oh well, such is the life of a C programmer.)
https://github.com/sjmulder/aoc/blob/master/2023/c/day18.c
Oh, just like day 11! I hadn’t thought of that. I was initially about to try something similar by separating into rectangular regions, as in ear-clipping triangulation. But that would require a lot of iterating, and something about “polygon” and “walking the edges” went ping in my memory…