[Scala] FizzBuzz

ScalaFizzBuzzを解いてみました。

object FizzBuzz {

  def fizzbuzz(n: int): List[String] = {
    def fizzbuzz_internal(n: int, l: List[String]): List[String] = {
      if (n == 0) {
        l
      }
      else {
        val s = if (n % 15 == 0) {
          "FizzBuzz"
        }
        else if (n % 3 == 0) {
          "Fizz"
        }
        else if (n % 5 == 0) {
          "Buzz"
        }
        else {
          n.toString()
        }
        fizzbuzz_internal(n - 1, s :: l);
      }
    }
    fizzbuzz_internal(n, List());
  }

  def main(args: Array[String]): Unit = {
    Console.println(fizzbuzz(100));
  }
}

結果は、以下の通りです。

$ scalac FizzBuzz.scala
$ scala FizzBuzz
List(1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,31,32,Fizz,34,Buzz,Fizz,37,38,Fizz,Buzz,41,Fizz,43,44,FizzBuzz,46,47,Fizz,49,Buzz,Fizz,52,53,Fizz,Buzz,56,Fizz,58,59,FizzBuzz,61,62,Fizz,64,Buzz,Fizz,67,68,Fizz,Buzz,71,Fizz,73,74,FizzBuzz,76,77,Fizz,79,Buzz,Fizz,82,83,Fizz,Buzz,86,Fizz,88,89,FizzBuzz,91,92,Fizz,94,Buzz,Fizz,97,98,Fizz,Buzz)