Предположим, у меня есть последовательность целых чисел, и мне нужно разделить ее на подпоследовательность, подобную этой:
def splitBySeq(xs: Seq[Int], ys: Seq[Int]): (Seq[Int], Seq[Int]) = ???
val xs = List(1, 2, 3, 4, 5)
splitBySeq(xs, Nil) // (List(1, 2, 3, 4, 5), Nil)
splitBySeq(xs, List(1)) // (Nil, List(2, 3, 4, 5))
splitBySeq(xs, List(5)) // (List(1, 2, 3, 4), Nil)
splitBySeq(xs, List(3, 4)) // (List(1, 2), List(5))
splitBySeq(xs, List(11, 12)) // (List(1, 2, 3, 4, 5), Nil)
splitBySeq(xs, List(1, 2, 3, 4, 5)) // (Nil, Nil)
Если ys
является подпоследовательностью xs
, то функция должна вернуть пару последовательностей - xs1
и xs2
, так что xs1 ++ ys ++ xs2 == xs
. В противном случае функция возвращает xs
.
Как бы вы реализовали splitBySeq
?