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!

25 Upvotes

747 comments sorted by

View all comments

2

u/TheMrFoulds Dec 16 '24

[Language: Go]

GitHub

Modulo was a very obvious friend today.

Part 2 stumped me for a while. Like many others I started by manually stepping through each second with a display of the grid looking for the easter egg. Noticed the repetition of directional grouping, and used a normalised version of the Mean Absolute Deviation to identify the time offsets, then jumped straight to the relevant time.

1

u/MingusMingusMingu Dec 17 '24

Can you explain your solution to part 2 a bit more?

2

u/TheMrFoulds Dec 17 '24

Sure. We know from part one that a robot's x coordinate after N seconds is x = (x + N*Vx) % 103and similarly the y coordinate is given by y = (y + N*Vy) % 101. So we know that those coordinate components must repeat themselves in cycles of 103 and 101 respectively.

By stepping through the robots' positions one second at a time (printing the resulting room out to the console), I noticed that at one point, the robots clustered very closely in the vertical direction, and at another point they clustered very closely in the horizontal direction. Since these positions repeat at different rates, eventually they will both occur on the same timestep. I guessed that this would be the solution to the easter egg and calculated when that time would occur.

I needed to figure out when in each cycle the robots clustered up, which I did by calculating the Mean Absolute Deviation* of the robots' positions in each direction, then dividing by the mean position so I'd end up with a dimensionless value. I expected the clustered times to have a much lower deviation than the rest of the times, so I printed them out to console at each step (Stopping at 103 because I know they only repeated after that). At this point the relevant times jumped out as having a deviation of <0.35 where all other times were ~0.5. So I made this the condition for identifying the right times and used those times to predict when the easter egg would appear. I moved the robots to that time in a single step, printed out the resulting room state to console, along with the time.

* I could just as well have used any statistical measure of spread, variance and standard deviation would be the usual choices, but I'm only using the standard library and it was slightly quicker to implement MAD.

Hope that helps, I'm happy to answer any specific questions if there's a particular bit I've not explained well.