ScalaでFizz Buzz

そのいち。一番素直に見える。

object FizzBuzz1{
  def main(args:Array[String]):Unit={
    1 to 50 map (n => n match {case n if (n % 5 == 0 && n % 3 ==0) => "fizzbuzz"
        case n if (n % 3 == 0) => "fizz"                                            
        case n if (n % 5 == 0) => "buzz"                                            
        case n => n}) foreach {println}
  }
}

そのに。手続き型伝統的。

object FizzBuzz2{
  def main(args:Array[String]):Unit={
    for (i<-1 to 50){
      if(i % 3 == 0 && i % 5 == 0){println("fizzbuzz")}
      else if(i % 5 ==0){println("buzz")} 
      else if(i % 3 ==0){println("fizz")}
      else{println(i)}
    }
  }
}

そのさん。再帰

object FizzBuzz3{
  def main(args:Array[String]):Unit={
    val result = fizzbuzz(1,50,List()).reverse
    result foreach {println}
  }
  def fizzbuzz(n:Int,max:Int,list:List[Any]):List[Any]={
    val v = (n match { 
      case n if (n % 3 == 0 && n % 5 == 0) => "fizzbuzz"
      case n if (n % 3 == 0) => "fizz"                                            
      case n if (n % 5 == 0) => "buzz"
      case n => n}) :: list
    if (n == max)  v 
    else fizzbuzz(n +1,max, v)
  }
}

参考:
FizzBuzz - SumiTomohikoの日記
2008-01-12 - ryugateの日記
Symfoware ScalaでFizzBuzz