diff --git a/days/src/main/kotlin/Day16.kt b/days/src/main/kotlin/Day16.kt index a2c9814..268cede 100644 --- a/days/src/main/kotlin/Day16.kt +++ b/days/src/main/kotlin/Day16.kt @@ -4,9 +4,11 @@ import be.vandewalleh.aoc.utils.input.Day import be.vandewalleh.aoc.utils.input.Groups import be.vandewalleh.aoc.utils.input.Input import be.vandewalleh.aoc.utils.input.createDay +import org.eclipse.collections.api.multimap.list.ListMultimap import org.eclipse.collections.api.multimap.list.MutableListMultimap import org.eclipse.collections.api.multimap.set.MutableSetMultimap import org.eclipse.collections.impl.factory.Multimaps +import org.eclipse.collections.impl.multimap.list.FastListMultimap @Day(16) class Day16(@Groups val input: Input>>) { @@ -67,7 +69,6 @@ class Day16(@Groups val input: Input>>) { mult *= myTicketValues[index] } } - return mult } @@ -76,7 +77,7 @@ class Day16(@Groups val input: Input>>) { val queue = ArrayDeque() indexesByCategory.multiValuesView() - .sortedBy { it.size() } + .toSortedListBy { it.size() } .forEach { it.forEach { if (toBeRemoved.add(it)) queue.add(it) } } queue.removeLast() @@ -100,8 +101,8 @@ class Day16(@Groups val input: Input>>) { } private fun indexesByCategory( - rangesByName: MutableListMultimap, - validTickets: MutableList>, + rangesByName: ListMultimap, + validTickets: List>, ): MutableSetMultimap { val indexesByCategory = Multimaps.mutable.set.empty() @@ -110,21 +111,26 @@ class Day16(@Groups val input: Input>>) { val ranges = entry.two.toList() for (i in validTickets.first().indices) { - val allInRange = validTickets - .asSequence() - .map { it[i] } - .all { inRanges(it, ranges) } + var allInRange = true + for(ticket in validTickets){ + val current = ticket[i] + if(!inRanges(current, ranges)){ + allInRange = false + break + } + } if (allInRange) indexesByCategory.put(category, i) } } return indexesByCategory } - private fun validTickets(rangesByName: MutableListMultimap): MutableList> { + private fun validTickets(rangesByName: MutableListMultimap): List> { val validTickets = mutableListOf>() + val ranges = rangesByName.valuesView().toList() for (line in nearbyTicketsGroup) { - val ticket = line.splitToSequence(",").map { it.toInt() }.toList() - if (isTicketValid(ticket, rangesByName.valuesView().toList())) { + val ticket = line.split(",").map { it.toInt() } + if (isTicketValid(ticket, ranges)) { validTickets.add(ticket) } } @@ -132,7 +138,7 @@ class Day16(@Groups val input: Input>>) { } private fun namedRanges(): MutableListMultimap { - val rangesByName = Multimaps.mutable.list.empty() + val rangesByName = FastListMultimap() for (line in rangesGroup) { val name = line.substringBefore(":") extractRanges(line).forEach { diff --git a/days/src/test/kotlin/Day16Benchmark.kt b/days/src/test/kotlin/Day16Benchmark.kt index ac60bf0..41288d8 100644 --- a/days/src/test/kotlin/Day16Benchmark.kt +++ b/days/src/test/kotlin/Day16Benchmark.kt @@ -10,7 +10,7 @@ import org.openjdk.jmh.runner.options.OptionsBuilder /* Benchmark Mode Cnt Score Error Units -Day16Benchmark.part2 avgt 5 1.748 ± 0.047 ms/op +Day16Benchmark.part2 avgt 5 0.697 ± 0.026 ms/op */ @BenchmarkMode(Mode.AverageTime)