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

  • Pyro@programming.dev
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    1 month ago

    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_regions
    
    • Deebster@programming.dev
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      1 month ago

      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
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        1 month ago

        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.

    • CameronDev@programming.devOPM
      link
      fedilink
      arrow-up
      2
      ·
      1 month ago
      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.

      • Pyro@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        1 month ago
        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!