お題:FizzBuzz(Nパターン) を Scala で解いてみた
1から100までの数をプリントするプログラムを書け。
ただし、[3, "Fizz", 5, "Buzz", 7, "Hoge"] のような
“<数値>と<文字列>”が対となった、要素が偶数個のリストを受け取り、
数が<数値>の倍数のときは、対となる<文字列>をプリントすること。
数が複数の<数値>の倍数となっている場合、リストに指定された順で、<文字列>を結合しプリントすること。
数がすべての<数値>の倍数でない場合、数をプリントすること。
FizzBuzz はよくある問題。
それの応用問題といったところ。
勉強中の Scala を使って解いてみました。
解けてはいるんだけども、関数型っぽいかどうかと言われるとよくわからない。
以下解答(関数部分、コメントとかは略)
def fizbuzN(lst: List[Tuple2[Int, String]]): Unit = { Range(1, 100).toList.foreach( i => if (lst.forall(i%_._1!=0)) { println(i) } else { lst.foreach(a => if (i%a._1 == 0) print(a._2)) println } ) }
もうちょい上手く書けそうなんだけどだめだったorz