2.

"abc".contains('c') // оригинальный метод

val containsFun1: (String, Char) => Boolean =
  (str: String, ch: Char) =>
    str.indexOf(ch) >= 0

containsFun1("abc", 'b') //Проверка 1, результат true
containsFun1("abc", 'd') //Проверка 2, результат false

3.

val containsFun2: (String, Char) => Boolean =
  (str: String, ch: Char) =>
    str.foldLeft(false)( (res, el) =>
      if (el == ch)
        true
      else
        res
    )

containsFun2("abc", 'b') //Проверка 1, результат true
containsFun2("abc", 'd') //Проверка 2, результат false

4.

val reverseFun: String => String =
  (str: String) =>
    str.foldLeft("")((acc, el) =>
      el + acc
    )

reverseFun("abc") //Проверка 1, результат cba
reverseFun("cba") //Проверка 2, результат abc

5.

val distinctFun: String => String =
  (str: String) =>
    str.foldLeft("")((acc, el) =>
    if (acc.contains(el)) acc
    else acc + el
    )

distinctFun("aaa") //Проверка 1, результат a
distinctFun("abcc") //Проверка 2, результат abc

6.

val isEmptyFun: String => Boolean =
  (str: String) =>
    str.foldLeft(true)( (_, _) =>
      false
    )

isEmptyFun("")   //Проверка 1, результат true
isEmptyFun("1")  //Проверка 2, результат false

7.

val lengthFun: String => Int =
  (str: String) =>
    str.foldLeft(0)( (acc, _) =>
      acc + 1
    )

lengthFun("abc")  //Проверка, результат 3

8.

val diffFun: (String, String) => String =
  (str: String, thanStr: String) =>
    str.filterNot(c => thanStr.contains(c))

diffFun("abc", "adef") //Проверка, результат bc

9.

val replaceFun: (String, Char, Char) => String =
  (str: String, oldChar: Char, newChar: Char) =>
    str.foldLeft("")( (acc, el) =>
      if (el == oldChar)
        acc + newChar
      else
        acc + el
    )
replaceFun("abc", 'b', 'd') //Проверка, результат adc

10.

val startsWithFun: (String, String) => Boolean =
  (str: String, pref: String) => {
    val prefLen = pref.length
    val origePref = str.take(prefLen)
    origePref == pref
  }
startsWithFun("abc", "ab" ) //Проверка 1, результат true
startsWithFun("abc", "b" )  //Проверка 2, результат false

11.

val endsWithFun: (String, String) => Boolean =
  (str: String, pref: String) => {
    startsWithFun(str.reverse, pref.reverse)
  }

endsWithFun("abc", "bc") //Проверка 1, результат true
endsWithFun("abc", "ab") //Проверка 2, результат false

12.

val sortFun: String => String =
  (str: String) =>
    str.foldLeft("")( (acc, el) =>
       acc.takeWhile(c => c < el) + el + acc.dropWhile(c => c < el)
    )
sortFun("sdfg")  //Проверка, результат dfgs