Skip to content

Instantly share code, notes, and snippets.

@gustavofranke
Created November 8, 2019 12:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gustavofranke/aa43c26d362bd1a297fee525b1d391e7 to your computer and use it in GitHub Desktop.
Save gustavofranke/aa43c26d362bd1a297fee525b1d391e7 to your computer and use it in GitHub Desktop.
/**
* Write a program that prints the numbers from 1 to 100.
* But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz".
* For numbers which are multiples of both three and five print "FizzBuzz".
*/
object FizzBuzzApp extends App {
sealed trait Foo
case object Fizz extends Foo
case object Buzz extends Foo
case object FizzBuzz extends Foo
case class Neither(s: Int) extends Foo
object Foo {
val multOf3: Int => Boolean = (n: Int) => n % 3 == 0
val multOf5: Int => Boolean = (n: Int) => n % 5 == 0
val multOf5And5: Int => Boolean = (n: Int) => multOf3(n) && multOf5(n)
def apply(int: Int): Foo =
if (multOf5And5(int)) FizzBuzz
else if (multOf5(int)) Buzz
else if (multOf3(int)) Fizz
else Neither(int)
import cats.instances.int._
implicit val showFoo: Show[Foo] = Show.show[Foo] {
case Fizz => "Fizz"
case Buzz => "Buzz"
case FizzBuzz => "FizzBuzz"
case Neither(i) => i.show
}
}
def main: Unit =
(1 to 100)
.toList
.foreach { x => println(Foo(x).show) }
main
}
//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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment