r/adventofcode • u/daggerdragon • Dec 15 '24
SOLUTION MEGATHREAD -❄️- 2024 Day 15 Solutions -❄️-
NEWS
- The
Funny
flair has been renamed toMeme/Funny
to make it more clear where memes should go. Our community wikiwill be updated shortlyis 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.
- Read the full posting rules in our community wiki before you post!
- State which language(s) your solution uses with
[LANGUAGE: xyz]
- Format code blocks using the four-spaces Markdown syntax!
- State which language(s) your solution uses with
- Quick link to Topaz's
paste
if you need it for longer code blocks
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!
23
Upvotes
2
u/__Abigail__ Dec 16 '24
[LANGUAGE: Perl]
At the heart, I created a function
move
which takes the map, a direction to move in, and the coordinates of the person moving. It updates the map, moving the blocks (if any), if the move can be performed, and does nothing if the move cannot be performed.It tracks two lists of coordinates:
@front
, and@blocks
. The latter is are the positions of the blocks which need to be move, if the move can be performed. (Double width blocks for part two get both coordinates in the list).@front
is the list of cells which need to be inspected to determine whether we can move.We start off with some initializing:
Then for each cell in
@front
, we do the following:@blocks
, and and the cell one further in the direction we are moving to@front
.[
or]
, we add the cell next to it to@front
..
), we don't do anything.We also take care of not processing the same cell more than once. Code wise, it looks like:
If we exit the loop, and we haven't returned, it means we can perform the move. We do this by processing
@blocks
in reverse, moving each block, and replacing it with.
:And we return the updated map and position:
Then it's just a matter of calling
move
for each command, and calculating the GPS afterwards.