List("apple banana", "orange apple mango", "kiwi papaya orange","mango orange muscat apple")
に含まれるフルーツの数を数える関数 countFruitsFromLines
を実装せよ。
val lines = List("apple banana", "orange apple mango", "kiwi papaya orange","mango orange muscat apple")
val fruitsCounts = countFruitsFromLines(lines)
if (fruitsCounts == Map("banana" -> 1, "muscat" -> 1, "orange" -> 3, "mango" -> 2, "apple" -> 3, "kiwi" -> 1, "papaya" -> 1)){
println("正解")
} else {
println("不正解")
}
def countFruitsFromLines(lines: List[String]): Map[String, Int]
次のフィボナッチ数列を扱う関数fib
を実装せよ。
fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
fib(5) = 5
fib(6) = 8
fib(7) = 13
fib(8) = 21
fib(9) = 34
fib(10) = 21
// ...
n = 2以上は
fib(n) = fib(n - 2) + fib(n - 2 +1)
に抽象化できる
def fib(n: Long): Long
以下のような階乗計算を行う関数fact
を実装せよ。
fact(0) = 1
fact(1) = 1
fact(2) = 2 * 1 = 2
fact(3) = 3 * 2 * 1 = 6
fact(4) = 4 * 3 * 2 * 1 = 24
fact(5) = 5 * 4 * 3 * 2 * 1 = 120
n = 2以上は
fact(n) = n * fact(n - 1)
に抽象化できる
- さらに
fact(10000)
でもスタックオーバーフローが起きないように工夫せよ。
scala> fact(10000)
java.lang.StackOverflowError
def fact(n: Int): Long
val numbers = (1 to 100).toList
のすべての要素を合計する関数getSum
を実装せよ。ただし、Iterable[T]#sum
メソッドを利用しないこと。
scala> val numbers = (1 to 100).toList
numbers: List[Int] = ...
scala> val sum = getSum(numbers)
sum: Int = 5050
- さらに
getSum((1 to 100000).toList)
でもスタックオーバーフローが起きないように工夫せよ。
scala> getSum((1 to 100000).toList)
java.lang.StackOverflowError
def getSum(numbers: List[Int]): Long