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