Day 12: Christmas Tree Farm
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


Python
You got me good, Eric.
hint
Think of the simplest check you can make for a region.
click to view code
# This does not work for the sample :D def solve(data: str): # split input blocks = data.split("\n\n") shape_blocks = blocks[:-1] region_block = blocks[-1] # for every shape, get the number of occupied cells shape_area = [] for shape_block in shape_blocks: shape_area.append(shape_block.count('#')) fit_regions = 0 # for every region, check if the area is sufficient to fit all shapes for region_data in region_block.splitlines(): size_data, shape_data = region_data.split(': ') # get region size m, n = [int(dim) for dim in size_data.split('x')] # get area needed to fit all shapes, without considering arrangement area_needed = 0 for id, freq in enumerate(map(int, shape_data.split(' '))): area_needed += shape_area[id] * freq # if the region area is sufficient, count it as a fit (!!!) if m * n > area_needed: fit_regions += 1 return fit_regionsMild spoilers ahead, but you’re reading the solutions thread.
I was just doing some preliminary checking of the data on my phone with Nushell (to see how much my ageing laptop would suffer) when I discovered there weren’t any non trivial cases.
Normally I get the test data working before trying the input data, this is definitely teaching me the value of investigating the data before heading down into the code mines.
Unfortunately I can’t get the second star yet because I missed a few days.
I actually did a lot of optimizations before I had to give up and search what I was missing. I did have a look at my input data, but still wouldn’t make the connection because in my mind, any solution had to work for the sample too.
Yeah, it’s quite a mean trick really - kinda a big middle finger to anyone who does TDD
spoiler
I had an feeling it would be trivial, but didnt think it would be that trivial. I got the answer without even parsing the shapes, just called them all 9.
Tap for spoiler
That’s very interesting because that was one of my early approaches too, but it actually gave me the wrong answer for my input!