Хотя вопрос кажется немного расплывчатым (по крайней мере, придумайте более подходящие имена, чем "1 start"
& "2 start"
?), Вы можете использовать следующие код-фрагмент (ы)
Начиная с этих служебных методов
// Utility methods
def endIndexOf1Start(list: List[String], startIndex: Int = 0): Option[Int] = {
val firstIndex: Int = list.indexOf("A", from=startIndex)
if (firstIndex >= 0) Some(firstIndex) else None
}
def endIndexOf2Start(list: List[String], startIndex: Int = 0): Option[Int] = {
lazy val indexOfB: Int = list.indexOf("B", from=startIndex)
lazy val indexOfC: Int = list.indexOf("C", from=indexOfB)
if ((indexOfB >= 0) && (indexOfC > indexOfB)) Some(indexOfC) else None
}
def endIndexOfSomeStart(list: List[String], startIndexOpt: Option[Int] = None): Option[Int] = {
val startIndex: Int = startIndexOpt.getOrElse(0)
lazy val _endIndexOf1Start: Option[Int] = endIndexOf1Start(list, startIndex)
lazy val _endIndexOf2Start: Option[Int] = endIndexOf2Start(list, startIndex)
_endIndexOf1Start.orElse(_endIndexOf2Start)
}
Напишите метод, который дает Boolean
: есть ли 2 отдельных ( не перекрывающихся ) запускается или нет
// Final decider method
def containsTwoStarts(list: List[String]): Boolean = {
lazy val endIndexOfFirstStart: Option[Int] = endIndexOfSomeStart(list)
lazy val endIndexOfSecondStart: Option[Int] = endIndexOfSomeStart(list, endIndexOfFirstStart)
(endIndexOfFirstStart.nonEmpty && endIndexOfSecondStart.nonEmpty)
}
Данный пример ввода
// Sample input
val sampleInputs: List[List[String]] = List(
List("A", "B", "Z", "M", "A"),
List("A", "B", "Z", "C", "T"),
List("Z", "B", "C", "X", "A"),
List("B", "X", "C", "M", "B", "C")
)
Вот пример ввода-вывода
// invocation
sampleInputs.map(l => endIndexOf1Start(l, 0))
sampleInputs.map(l => endIndexOf2Start(l, 0))
sampleInputs.map(l => endIndexOfSomeStart(l, None))
sampleInputs.map(containsTwoStarts)
res0: List[Option[Int]] = List(Some(0), Some(0), Some(4), None)
res1: List[Option[Int]] = List(None, Some(3), Some(2), Some(2))
res2: List[Option[Int]] = List(Some(0), Some(0), Some(4), Some(2))
res3: List[Boolean] = List(true, true, true, true)