第9回なごやかscalaで話題になった、逆FizzbuzzのScalaコードを自分なりに見やすくした。根本的なアルゴリズムは変えていない。
InverseFizzbuzz.scala
def fizzbuzzes(range : Seq[Int]) =
range.map(x => (x%3, x%5)).collect {
case (0, 0) => "fizzbuzz"
case (0, _) => "fizz"
case (_, 0) => "buzz"
}
val all = for {
a <- (1 to 100)
b <- (a to 100)
} yield (a to b)
val io = all.map (input => (input, fizzbuzzes(input)))
def answer(expected : Seq[String]) = io.
filter { case (i, o) => o == expected }.
minBy { case (i, _) => i.length }.
_1
参考: