Made Day10 more streamy

This commit is contained in:
2019-12-12 11:06:12 +01:00
parent a6daab87ab
commit f36344edbd

View File

@@ -2,6 +2,9 @@ package com.basdado.adventofcode.day10
import com.basdado.adventofcode.lines
import java.util.stream.Collectors
import java.util.stream.IntStream
import java.util.stream.Stream
import java.util.stream.StreamSupport
import kotlin.math.PI
import kotlin.math.abs
import kotlin.math.atan2
@@ -30,22 +33,17 @@ object Day10 {
.entries
.sortedBy { val angle = (it.key.angle() + 0.5 * PI); if (angle < 0) 2*PI + angle else angle }
.map { it.value.sortedBy( Vector2i::manhattan ) }
// And now we're gonna keep taking one of each list until we reach number 200
var listIndex = 0
val itemIndexPerList = IntArray(sortedAsteroidLists.size)
var i = 0
var curItem: Vector2i? = null
while (i < 200) {
val list = sortedAsteroidLists[listIndex]
if (itemIndexPerList[listIndex] < list.size) {
curItem = list[itemIndexPerList[listIndex]]
// println(optimalAsteroid.first + curItem)
itemIndexPerList[listIndex]++
i++
}
listIndex++
}
val asteroid200 = optimalAsteroid.first + curItem!!
val sortedAsteroidIterators = sortedAsteroidLists.map { it.iterator() }
val asteroid200 = optimalAsteroid.first + IntStream.range(0, 1000000)
.mapToObj { sortedAsteroidIterators[it % sortedAsteroidIterators.size] }
.sequential()
.filter { it.hasNext() }
.map { it.next() }
.skip(199)
.findFirst()
.get()
println(asteroid200.x * 100 + asteroid200.y)
}