Scala解答例

練習問題

解答例は次の環境でテストしています

  • Scala 2.10.2
  • Java 1.7.0_21 32bit

ほとんどの解答例はideone.comでそのまま実行できます

ループ練習

問1

object Main extends App {
  for (i <- 1 to 5) {
    println("Hello World!")
  }
}

別解

object Main extends App {
  (1 to 5) foreach { _ =>
    println("Hello World!")
  }
}

問2

object Main extends App {
  val j = args(0).toInt

  for (i <- 1 to j) {
    println("Hello World! " + i)
  }
}

別解

object Main extends App {
  val j = args(0).toInt

  (1 to j) foreach { i =>
    println("Hello World! " + i)
  }
}

FizzBuzz

object Main extends App {
  def fizzBuzz(n: Int) =
    if (n % 15 == 0) {
      "FizzBuzz"
    } else if (n % 5 == 0) {
      "Buzz"
    } else if (n % 3 == 0) {
      "Fizz"
    } else {
      n.toString
    }

  (1 to 100).map(fizzBuzz).foreach(println)
}

素数判定

判定

object Main extends App {
  def prime(n: Int) =
    2 <= n && !(2 until (math.sqrt(n) + 1.0).toInt).exists(n % _ == 0)

  val n = args(0).toInt

  println(n.toString + "は" + (if (prime(n)) "素数" else "非素数"))
}

列挙

object Main extends App {
  def primes(xs: Stream[Int] = Stream.from(2)): Stream[Int] =
    xs.head #:: primes(xs.tail.filter(_ % xs.head != 0))

  primes() takeWhile {
    _ <= 100
  } foreach {
    println
  }
}

うるう年測定

import java.util.GregorianCalendar

object Main extends App {
  val cal = new GregorianCalendar()

  while (true) {
    print("西暦を入力してください> ")
    val y = readInt()
    if (y <= 0) sys.exit()

    printf("%dはうるう年%s\n", y,
      if (cal.isLeapYear(y)) "です" else "ではありません")
  }
}