Nested List Weight Sum
trait NestedItem {
def getInt: Int
def getList: List[NestedItem]
}
class NestedInt(value: Int) extends NestedItem {
def getInt: Int = value
def getList: List[NestedItem] = throw new Error("get list from int")
}
class NestedList(value: List[NestedItem]) extends NestedItem {
def getInt: Int = throw new Error("get int from list")
def getList = value
}
def depthSum(nestedList: List[NestedItem], depth: Int = 1): Int = {
var sum = 0
for (item <- nestedList) {
item match {
case i: NestedInt => sum += i.getInt * depth
case lst: NestedList => sum += depthSum(lst.getList, depth + 1)
}
}
sum
}
def wrap(lst: List[Any]): NestedList = {
new NestedList(lst.map((item) => item match {
case i: Int => new NestedInt(i)
case l: List[Any] => wrap(l)
}))
}
val test1 = wrap(List(List(1, 1), 2, List(1, 1)))
depthSum(test1.getList)
val test2 = wrap(List(1, List(4, List(6))))
depthSum(test2.getList)Last updated