-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDay15.kt
More file actions
22 lines (18 loc) · 785 Bytes
/
Day15.kt
File metadata and controls
22 lines (18 loc) · 785 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package me.markrobbo
class Day15 {
fun solvePart1(input: List<Int>): Int = memoryGame(input).elementAt(2019)
fun solvePart2(input: List<Int>): Int = memoryGame(input).elementAt(29999999)
private fun memoryGame(startingNumbers: List<Int>): Sequence<Int> = sequence {
yieldAll(startingNumbers)
val lastSpokenIndex = startingNumbers.mapIndexed { i, value -> value to i }.toMap(mutableMapOf())
var currentIndex = startingNumbers.size
var nextNumber = 0
while (true) {
yield(nextNumber)
val lastNumber = nextNumber
nextNumber = currentIndex - lastSpokenIndex.getOrDefault(nextNumber, currentIndex)
lastSpokenIndex[lastNumber] = currentIndex
currentIndex++
}
}
}