More optimizations
This commit is contained in:
parent
5ffebae101
commit
55271e210d
@ -4,9 +4,11 @@ import be.vandewalleh.aoc.utils.input.Day
|
|||||||
import be.vandewalleh.aoc.utils.input.Groups
|
import be.vandewalleh.aoc.utils.input.Groups
|
||||||
import be.vandewalleh.aoc.utils.input.Input
|
import be.vandewalleh.aoc.utils.input.Input
|
||||||
import be.vandewalleh.aoc.utils.input.createDay
|
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.list.MutableListMultimap
|
||||||
import org.eclipse.collections.api.multimap.set.MutableSetMultimap
|
import org.eclipse.collections.api.multimap.set.MutableSetMultimap
|
||||||
import org.eclipse.collections.impl.factory.Multimaps
|
import org.eclipse.collections.impl.factory.Multimaps
|
||||||
|
import org.eclipse.collections.impl.multimap.list.FastListMultimap
|
||||||
|
|
||||||
@Day(16)
|
@Day(16)
|
||||||
class Day16(@Groups val input: Input<List<List<String>>>) {
|
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]
|
mult *= myTicketValues[index]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mult
|
return mult
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
|
|||||||
val queue = ArrayDeque<Int>()
|
val queue = ArrayDeque<Int>()
|
||||||
|
|
||||||
indexesByCategory.multiValuesView()
|
indexesByCategory.multiValuesView()
|
||||||
.sortedBy { it.size() }
|
.toSortedListBy { it.size() }
|
||||||
.forEach { it.forEach { if (toBeRemoved.add(it)) queue.add(it) } }
|
.forEach { it.forEach { if (toBeRemoved.add(it)) queue.add(it) } }
|
||||||
|
|
||||||
queue.removeLast()
|
queue.removeLast()
|
||||||
@ -100,8 +101,8 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun indexesByCategory(
|
private fun indexesByCategory(
|
||||||
rangesByName: MutableListMultimap<String, IntRange>,
|
rangesByName: ListMultimap<String, IntRange>,
|
||||||
validTickets: MutableList<List<Int>>,
|
validTickets: List<List<Int>>,
|
||||||
): MutableSetMultimap<String, Int> {
|
): MutableSetMultimap<String, Int> {
|
||||||
val indexesByCategory = Multimaps.mutable.set.empty<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()
|
val ranges = entry.two.toList()
|
||||||
|
|
||||||
for (i in validTickets.first().indices) {
|
for (i in validTickets.first().indices) {
|
||||||
val allInRange = validTickets
|
var allInRange = true
|
||||||
.asSequence()
|
for(ticket in validTickets){
|
||||||
.map { it[i] }
|
val current = ticket[i]
|
||||||
.all { inRanges(it, ranges) }
|
if(!inRanges(current, ranges)){
|
||||||
|
allInRange = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
if (allInRange) indexesByCategory.put(category, i)
|
if (allInRange) indexesByCategory.put(category, i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return indexesByCategory
|
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 validTickets = mutableListOf<List<Int>>()
|
||||||
|
val ranges = rangesByName.valuesView().toList()
|
||||||
for (line in nearbyTicketsGroup) {
|
for (line in nearbyTicketsGroup) {
|
||||||
val ticket = line.splitToSequence(",").map { it.toInt() }.toList()
|
val ticket = line.split(",").map { it.toInt() }
|
||||||
if (isTicketValid(ticket, rangesByName.valuesView().toList())) {
|
if (isTicketValid(ticket, ranges)) {
|
||||||
validTickets.add(ticket)
|
validTickets.add(ticket)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,7 +138,7 @@ class Day16(@Groups val input: Input<List<List<String>>>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun namedRanges(): MutableListMultimap<String, IntRange> {
|
private fun namedRanges(): MutableListMultimap<String, IntRange> {
|
||||||
val rangesByName = Multimaps.mutable.list.empty<String, IntRange>()
|
val rangesByName = FastListMultimap<String, IntRange>()
|
||||||
for (line in rangesGroup) {
|
for (line in rangesGroup) {
|
||||||
val name = line.substringBefore(":")
|
val name = line.substringBefore(":")
|
||||||
extractRanges(line).forEach {
|
extractRanges(line).forEach {
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import org.openjdk.jmh.runner.options.OptionsBuilder
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Benchmark Mode Cnt Score Error Units
|
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)
|
@BenchmarkMode(Mode.AverageTime)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user