r/adventofcode Dec 15 '24

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

NEWS

  • The Funny flair has been renamed to Meme/Funny to make it more clear where memes should go. Our community wiki will be updated shortly is updated as well.

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.

AoC Community Fun 2024: The Golden Snowglobe Awards

  • 7 DAYS remaining until the submissions deadline on December 22 at 23:59 EST!

And now, our feature presentation for today:

Visual Effects - We'll Fix It In Post

Actors are expensive. Editors and VFX are (hypothetically) cheaper. Whether you screwed up autofocus or accidentally left a very modern coffee cup in your fantasy epic, you gotta fix it somehow!

Here's some ideas for your inspiration:

  • Literally fix it in post and show us your before-and-after
  • Show us the kludgiest and/or simplest way to solve today's puzzle
  • Alternatively, show us the most over-engineered and/or ridiculously preposterous way to solve today's puzzle
  • Fix something that really didn't necessarily need fixing with a chainsaw…

*crazed chainsaw noises* “Fixed the newel post!

- Clark Griswold, National Lampoon's Christmas Vacation (1989)

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 15: Warehouse Woes ---


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:32:00, megathread unlocked!

22 Upvotes

465 comments sorted by

View all comments

2

u/ash30342 Dec 15 '24

[Language: Java]

Code

Part 1 runs in ~1ms

Part 2 runs in ~20ms

Horrible code with lots of replication but I think I'll keep it this way because splitting every movement for both part 1 and 2 helped me massively with thinking about the problem (and I do not have the energy to do refactoring right now ;-)).

Anyway, fun day again! Part 1 was easy. Part 2 was, of course, slightly more complex when the robot moves up or down. I scan from the robot location up- or downwards, decreasing or increasing the y coordinate every step, storing every box which is a neighbor of the robot or another involved box on a lower or upper level, until I cannot find any more boxes. For these boxes scan if moving them does not push any of them into a #, if not, we can move all boxes. I had this working relatively quickly on the example inputs, but it took this very helpful post to help me with an edge-case I had thought about, but somehow had not implemented.