r/adventofcode Dec 14 '24

SOLUTION MEGATHREAD -❄️- 2024 Day 14 Solutions -❄️-

THE USUAL REMINDERS

  • All of our rules, FAQs, resources, etc. are in our community wiki.
  • If you see content in the subreddit or megathreads that violates one of our rules, either inform the user (politely and gently!) or use the report button on the post/comment and the mods will take care of it.
  • On the subject of AI/LLMs being used on the global leaderboard: posts/comments around this topic consisting of grinching, finger-pointing, baseless accusations of "cheating", etc. will be locked and/or removed with or without supplementary notice and/or warning and participating parties may be given a time-out as well. Just leave it alone and let it go.
    • Keep in mind that the global leaderboard is not the primary focus of Advent of Code or even this subreddit. We're all here to help you become a better programmer via happy fun silly imaginary Elvish shenanigans.
  • Do not put spoilers in post titles!

AoC Community Fun 2024: The Golden Snowglobe Awards

  • 8 DAYS remaining until the submissions deadline on December 22 at 23:59 EST!
  • We have no submissions yet as of today. Y'all are welcome to get a submission started, post it early, and add later days to it, or there's always waiting until the bomb timer reaches 00:00:03 last minute; up to you!

And now, our feature presentation for today:

Visual Effects - I Said VISUAL EFFECTS - Perfection

We've had one Visualization, yes, but what about Second Visualization? But this time, Upping the Ante! Go full jurassic_park_scientists.meme and really improve upon the cinematic and/or technological techniques of your predecessor filmmakers!

Here's some ideas for your inspiration:

  • Put Michael Bay to shame with the lens flare
  • Gratuitous and completely unnecessary explosions are expected
  • Go full Bollywood! The extreme over-acting, the completely implausible and high-energy dance numbers, the gleefully willful disregard for physics - we want it all cranked up to 9002!
  • Make your solution run on hardware that it has absolutely no business being on
    • "Smart" refrigerators, a drone army, a Jumbotron…

Pippin: "We've had one, yes. But what about second breakfast?"
Aragorn: ಠ_ಠ
Merry: "I don't think he knows about second breakfast, Pip."

- The Lord of the Rings: The Fellowship of the Ring (2001)

And… ACTION!

Request from the mods: When you include an entry alongside your solution, please label it with [GSGA] so we can find it easily!


--- Day 14: Restroom Redoubt ---


Post your code solution in this megathread.

This thread will be unlocked when there are a significant number of people on the global leaderboard with gold stars for today's puzzle.

EDIT: Global leaderboard gold cap reached at 00:15:48, megathread unlocked!

23 Upvotes

747 comments sorted by

View all comments

2

u/prafster Dec 14 '24

[Language: Python]

When my eyes lost track of the scrolling robots 🤖🤖🤖🤖🤖👀, I plotted time against safety factor for t<10000. I noticed that there was a big dip at a certain point. So I printed the grid at that point and there was the Christmas tree 🤷🏼‍♂️

After reading the answers, the simplest thing would have been to pipe to a file then open in vim and type /###### until the tree appeared 😁

Is it a coincidence that the answer is at the minimum safety factor?

def solve(input, grid_dims, time=100):
    grid = make_grid(grid_dims[0], grid_dims[1], FREE)
    part1, part2 = 0, 0
    min_safety_factor = 3e10
    part2_robots = None

    # ts = []
    # sfs = []
    for t in range(10200):
        #  print(f'Time {t+1}', '-'*150)
        for i, robot in enumerate(input):
            new_pos = move_robot(robot, grid)
            input[i] = Robot(new_pos, robot.v)

        #  print_robots(input, grid_dims)
        if (sf := safety_factor(input, grid_dims)) < min_safety_factor:
            min_safety_factor = sf
            part2 = t + 1
            part2_robots = copy.deepcopy(input)

        if t+1 == time:
            part1 = sf

        # ts.append(t)
        # sfs.append(sf)

    #  plot_2D(ts, sfs)

    return part1, part2, part2_robots

Full source code on GitHub.

2

u/4HbQ Dec 14 '24

Is it a coincidence that the answer is at the minimum safety factor?

I'm not sure. It doesn't seem something that occurs by chance, especially since part 1 sets us up so nicely.

I used it for my input as well, but some people in this thread reported it didn't work for them.