1
0

More optimizations

This commit is contained in:
Hubert Van De Walle 2020-12-16 14:38:30 +01:00
parent 5ffebae101
commit 55271e210d
2 changed files with 19 additions and 13 deletions

View File

@ -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<List<List<String>>>) {
@ -67,7 +69,6 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
mult *= myTicketValues[index]
}
}
return mult
}
@ -76,7 +77,7 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
val queue = ArrayDeque<Int>()
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<List<List<String>>>) {
}
private fun indexesByCategory(
rangesByName: MutableListMultimap<String, IntRange>,
validTickets: MutableList<List<Int>>,
rangesByName: ListMultimap<String, IntRange>,
validTickets: List<List<Int>>,
): MutableSetMultimap<String, Int> {
val indexesByCategory = Multimaps.mutable.set.empty<String, Int>()
@ -110,21 +111,26 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
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<String, IntRange>): MutableList<List<Int>> {
private fun validTickets(rangesByName: MutableListMultimap<String, IntRange>): List<List<Int>> {
val validTickets = mutableListOf<List<Int>>()
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<List<List<String>>>) {
}
private fun namedRanges(): MutableListMultimap<String, IntRange> {
val rangesByName = Multimaps.mutable.list.empty<String, IntRange>()
val rangesByName = FastListMultimap<String, IntRange>()
for (line in rangesGroup) {
val name = line.substringBefore(":")
extractRanges(line).forEach {

View File

@ -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)