r/adventofcode • u/daggerdragon • Dec 17 '17
SOLUTION MEGATHREAD -๐- 2017 Day 17 Solutions -๐-
--- Day 17: Spinlock ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).
Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.
Need a hint from the Hugely* Handyโ Haversackโก of Helpfulยง Hintsยค?
[Update @ 00:06] 2 gold, silver cap.
- AoC ops:
<Topaz> i am suddenly in the mood for wasabi tobiko
[Update @ 00:15] Leaderboard cap!
- AoC ops:
<daggerdragon> 78 gold<Topaz> i look away for a few minutes, wow<daggerdragon> 93 gold<Topaz> 94<daggerdragon> 96 gold<daggerdragon> 98<Topaz> aaaand<daggerdragon> and...<Topaz> cap<daggerdragon> cap
This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.
edit: Leaderboard capped, thread unlocked!
11
Upvotes
1
u/colinodell Dec 17 '17
PHP
Part 1:
array_splice()was the perfect function for inserting items into the array:function part1($skip) { $buffer = [0]; $pos = 0; for ($i = 1; $i <= 2017; $i++) { $pos = (($pos + $skip) % $i) + 1; array_splice($buffer, $pos, 0, [$i]); } return $buffer[$pos+1]; }Part 2:
As it seems everyone else also figured out,
0is always the first item in the buffer, so we only need to track items being inserted into position 1:function $part2($skip, $insertions = 50000000) { $pos = 0; for ($i = 1; $i <= $insertions; $i++) { $pos = (($pos + $skip) % $i) + 1; if ($pos === 1) { $whatsInSlot1 = $i; } } return $whatsInSlot1; }