Программирование на языке Scala/Кортеж/Ответы

2.

val splitFun: (String, Char) => (String, String) =
  (str, char) => {
    val firstPart = str.takeWhile(c => c != char)
    val secondPart = str.dropWhile(c => c != char)
    firstPart -> secondPart.tail
  }

3.

val tailFun: String => String =
  str =>
    str.foldLeft(("", true))( (acc, el) => {
      val (res, isHead) = acc
      if (isHead)
        (res, false)
      else
        (res + el, false)
    })._1

4.

val takeFun: (String, Int) => String =
  (str, num) =>
    str.foldLeft(("", 0))((acc, el) => {
      val (res, strIndex) = acc
      if (strIndex < num)
        (res + el, strIndex + 1)
      else
        (res, strIndex + 1)

    })._1

5.

val dropFun: (String, Int) => String =
  (str, num) =>
    str.foldLeft(("", 0))((acc, el) => {
      val (res, strIndex) = acc
      if (strIndex < num)
        (res, strIndex + 1)
      else
        (res + el, strIndex + 1)

    })._1

6.

val initFun: String => String =
  str =>
    str.foldLeft(("", 0))((acc, el) => {
      val (res, strIndex) = acc
      if (strIndex < str.length - 1)
        (res + el, strIndex + 1)
      else
        (res, strIndex + 1)

    })._1

7.

    val indexOfFun: (String, String) => Int =
        (str, pattern) => {
            if (pattern.isEmpty || str.isEmpty || (pattern.length > str.length))
                -1
            else {
                val resTuple = str.foldLeft((0, 0, false))((acc, el) => {
                    val (strIndex, patternIndex, isSuccess) = acc
                    if (isSuccess)
                        (strIndex, patternIndex, true)
                    else
                        if (el == pattern(patternIndex)) {
                            if (patternIndex < pattern.length - 1)
                                (strIndex + 1, patternIndex + 1, false)
                            else
                                (strIndex - patternIndex, patternIndex, true)
                        }
                        else
                            (strIndex + 1, 0, false)
                })
                if (resTuple._3)
                    resTuple._1
                else
                    -1
            }
        }