I am new to Scala and I need a solution to my problem. Imagine I have these lists:
val list1 = List(1,2,3,4,5,6,7,8,9,10,11)
val list2 = List(6,5)
def foo[A](xs: List[A], ys: List[Int]): List[List[A]] = {
val (result, _) = ys.foldLeft((List.empty[List[A]], xs)) { case ((acc, remaining), i) =>
(remaining.take(i) :: acc, remaining.drop(i))
}
result.reverse
}
test("1") {
val list1 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
val list2 = List(6, 5)
val result = List(List(1, 2, 3, 4, 5, 6), List(7, 8, 9, 10, 11))
foo(list1, list2) shouldBe result
}
test("2") {
val list1 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
val list2 = List(4, 4, 3)
val result = List(List(1, 2, 3, 4), List(5, 6, 7, 8), List(9, 10, 11))
foo(list1, list2) shouldBe result
}