5 ms·
I was being intentionally verbose so that readers not familiar with Scala or the collections types/methods used would have an easier time following it. I also
by AdieuToLogic 10y ago
I was being intentionally verbose so that readers not familiar with Scala or the collections types/methods used would have an easier time following it. I also was avoiding use of pattern matching as they are cousins to conditionals IMHO.
However, below is another version which employs idioms more commonly found:
object Fizzbuzz
{
val fizzes = None :: None :: Some ("Fizz") :: Nil;
val buzzes = None :: None :: None :: None :: Some ("Buzz") :: Nil;
def apply (amount : Int) : TraversableOnce[String] =
{
val alternates = Stream.continually (fizzes).flatten
.zip (Stream.continually (buzzes).flatten)
.take (amount)
.toArray;
0.until (amount).map { n =>
alternates (n) match {
case (Some (f), Some (b)) => f + b;
case (Some (f), None) => f;
case (None, Some (b)) => b;
case _ => (n + 1).toString
}
}
}
}
Fizzbuzz (100).foreach (println);
- viebel 10y agoOh! I see. It's much more concise and clean now. But still I prefer the clojure version using pattern matching over the scala one: http://blog.klipse.tech/clojure/2016/10/25/core-match.html#fizzbuzz http://blog.klipse.tech/clojure/2016/10/25/core-match.html#f...
- AdieuToLogic 10y agoGotcha. Then here's a translation into Scala from the link you provided which I believe maintains the spirit of the clojure version: object Fizzbuzz { def apply (amount : Int) : TraversableOnce[String] = 1.to (amount).map { n => (n % 3, n % 5) match { case (0, 0) => "FizzBuzz"; case (0, _) => "Fizz"; case (_, 0) => "Buzz"; case _ => n.toString } } } Fizzbuzz (100).foreach (println); EDIT: When I said "Gotcha", I meant that as in "understood" and not in an adversarial manner. Quite the opposite, actually, as this is a respectful thread which I believe both parties have enjoyed.