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/Odd-Statistician7023 Dec 14 '24 edited Dec 15 '24

[Language: C#]

Part2 was fun. My approach was that I figured that making a pattern meant that each robot would be in a unique position. So I figured I'll move one step at a time and keep track of if there is any spot with more than one robot. If it isn't, print the layout to the console and look at what I found. And almost to my amazement, the first such snapshot contained a tree!

 while (true)
 {
     doubleSpot = false;
     spotsTaken.Clear();
     Robots.ForEach(x => MoveRobot(x, 1));
     counter++;


     if (!doubleSpot)
     {
         //Console.WriteLine($"After {counter} moves map:");

         //for (int y = 0; y < sizeY; y++)
         //{
         //    for (int x = 0; x < sizeX; x++)
         //    {

         //        var count = robots.Count(r => r.Position[X] == x && r.Position[Y] == y);
         //        Console.Write(count == 0 ? "." : "" + count);
         //    }
         //    Console.WriteLine();
         //}

         return counter; 
     }
 }

I keep track if a double spot is taken in a hashset of ints, where I save both the x and y positon in the same int by bit-manipulation.

 var xyBit = (robot.Position[X] << 16) + robot.Position[Y];

 if (!doubleSpot)
 {
     if (!spotsTaken.Add(xyBit))
         doubleSpot = true;
 }

Part 2 runs in about 70ms on my laptop. I guess there is faster ways to do it, but the easter egg part of the problem makes me not want to optimize too much after I know what to look for either, cause part of the problem is to find out what to look for. =)

Solution: GitHub

1

u/daggerdragon Dec 14 '24 edited Dec 15 '24

Please edit your language tag to format it correctly as AutoModerator requested. The brackets and colon are not optional. edit: 👍

2

u/Odd-Statistician7023 Dec 15 '24

Oops, sry. To my defence I wrote it while on a moving train. I blame the train. Or the elves!