andyb
12/08/2018, 7:08 AMandyb
12/08/2018, 7:09 AMclass Node(iterator: Iterator<Int>){
val childCount = iterator.next()
val metaDataCount = iterator.next()
val childNodes = (0 until childCount).map { Node(iterator) }
val metadata = (0 until metaDataCount).map { iterator.next() }
val totalPart1 : Int by lazy{ metadata.sum() + childNodes.map { it.totalPart1 }.sum() }
val totalPart2 : Int by lazy{
when (childCount){
0 -> metadata.sum()
else -> metadata.filter { it in (1 .. childNodes.size) }.map{ childNodes[it-1].totalPart2 }.sum()
}
}
}
fun solve(input:List<Int>): Pair<Int,Int>{
val root = Node(input.listIterator())
return Pair(root.totalPart1, root.totalPart2)
}
Joris PZ
12/08/2018, 7:36 AMmap
and sum
with sumBy
for further brevityGerard Klijs
12/08/2018, 7:37 AMif(i == 0 || i > node.childCount) continue