Day 12: Garden Groups
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
I know I’m late, but it’s still fun and I’m sure no-one will see this.
Part 2 took me way too long to get right. I was initially only returning the relative point to which a plot needed a fence. I ran into issues of knowing if it was a valid fence or not by my method of counting (later). I eventually went with returning a tuple of the plot and an enum flag of the sides that it has fences on.
For counting I grouped the points by one axis then sorted on the other and counted the number of times the transition between two wasn’t contiguous.
It could by done in parallel, but the original traversal would need de-duping, which I didn’t feel like doing. After that things are done on a region basis, which could be parallel.
I also can’t help but notice mine is by far the longest ( > . < )
F#
Tap for spoiler
I saw it :)
If I understand your approach for pt2, you are getting all the fences and then grouping the connected ones? That definitely seems like a harder approach. I went with the counting corner method, which was also hard, but less iterating required.
Keep the solutions coming, even as the sub wanes in activity, I still appreciate them :)
hey thanks!
I didn’t check any other solutions before finishing (currently wondering way day 13 is too low), but I thought that trying to traverse fences would be a pain and since I have everything separated by regions and not traversing the array, counting corners never came to mind.
But the thought that I had was that for each region, all points will be a straight line in the V or H orientations, so if I can go up and down and count when
last != next - 1
, then that’ll tell me that that is a contiguous piece of fence.The idea isn’t too hard, for tracking the XAxis it’s
region.GroupBy(YAxis) // row .Select(group => group.Sort(g => g.XAxis) // column .Window(a,b => a != b - 1 ? 1 : 0).Sum() .Sum()
Except that I used a different splitting method and that came to me later.