this post was submitted on 12 Dec 2025
14 points (100.0% liked)

Advent Of Code

1202 readers
3 users here now

An unofficial home for the advent of code community on programming.dev! Other challenges are also welcome!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

Everybody Codes is another collection of programming puzzles with seasonal events.

EC 2025

AoC 2025

Solution Threads

M T W T F S S
1 2 3 4 5 6 7
8 9 10 11 12

Visualisations Megathread

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 2 years ago
MODERATORS
 

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

you are viewing a single comment's thread
view the rest of the comments
[–] Pyro@programming.dev 4 points 2 weeks ago* (last edited 2 weeks ago) (2 children)

Python

You got me good, Eric.

hintThink 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_regions

[–] Deebster@programming.dev 4 points 2 weeks ago* (last edited 2 weeks ago) (1 children)

Mild 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.

[–] Pyro@programming.dev 2 points 2 weeks ago* (last edited 2 weeks ago) (1 children)

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.

[–] Deebster@programming.dev 2 points 2 weeks ago

Yeah, it's quite a mean trick really - kinda a big middle finger to anyone who does TDD

[–] CameronDev@programming.dev 2 points 2 weeks ago (1 children)

spoilerI 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.

[–] Pyro@programming.dev 2 points 2 weeks ago

Tap for spoilerThat's very interesting because that was one of my early approaches too, but it actually gave me the wrong answer for my input!