Программирование на языке Scala/Функции/Ответы
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