Skip to content

Instantly share code, notes, and snippets.

@j5ik2o
Last active December 26, 2015 20:39
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save j5ik2o/7210762 to your computer and use it in GitHub Desktop.
Save j5ik2o/7210762 to your computer and use it in GitHub Desktop.

Scalaプログラミング問題

ワードカウント問題

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

IDEAプロジェクトの作り方

$ g8 typesafehub/scala-sbt

Scala Project Using sbt

organization [org.example]: sample
name [Scala Project]: sample # 空白いれないでください
scala_version [2.10.2]:
version [0.1-SNAPSHOT]:

Template applied in ./sample

$ echo "addSbtPlugin(\"com.github.mpeltonen\" % \"sbt-idea\" % \"1.5.2\")" > sample/project/plugins.sbt

$ cd sample

$ sbt gen-idea
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment