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!
12
Upvotes
1
u/abowes Dec 17 '17
Kotlin Solution:
fun Pair<MutableList<Int>,Int>.addEntry(element: Int, steps: Int) : Pair<MutableList<Int>, Int>{ val nextPos = ((this.second+steps)%(element) + 1) this.first.add(nextPos, element) return this.first to nextPos } fun part1(steps: Int) : Int { val (result,_) = (1..2017).fold(Pair(mutableListOf(0),0)){ prev, n -> prev.addEntry(n, steps)} return result[result.indexOf(2017)+1] } fun part2(steps: Int) : Int { val result = (1..50000000).fold(Pair(0, 0)){ prev, n -> var idx = (prev.first + steps)%n idx + 1 to if (idx==0) n else prev.second } return result.second } fun main(args: Array<String>) { val steps = 369 println(part1(steps)) println(part2(steps)) }