Skip to content

Instantly share code, notes, and snippets.

@scottashipp
Last active May 31, 2016 23:17
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 scottashipp/78a396da4a219bc09d470d6a054811af to your computer and use it in GitHub Desktop.
Save scottashipp/78a396da4a219bc09d470d6a054811af to your computer and use it in GitHub Desktop.
Scala app that prints the English words for the numbers 1 to 99 without ever using any number type
object CountTo99WithoutNumbers extends App {
object PrimaryNumber extends Enumeration {
val zero, one, two, three, four, five, six, seven, eight, nine = Value
}
object StrangeNumber extends Enumeration {
val eleven, twelve, thirteen = Value
}
object Prefixes extends Enumeration {
val zero, ten, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety = Value
}
def teens(x: PrimaryNumber.Value): String = {
x match {
case PrimaryNumber.one => StrangeNumber.eleven.toString
case PrimaryNumber.two => StrangeNumber.twelve.toString
case PrimaryNumber.three => StrangeNumber.thirteen.toString
case _ => s"${x}teen"
}
}
def print(x: Prefixes.Value, y: PrimaryNumber.Value): Unit = {
(x, y) match {
case (_, PrimaryNumber.zero) => println(x.toString)
case (Prefixes.zero, _) => println(y.toString)
case (Prefixes.ten, _) => println(teens(y))
case _ => println(s"$x-$y")
}
}
for {
x <- Prefixes.values
y <- PrimaryNumber.values
} yield print(x, y)
}
@scottashipp
Copy link
Author

Observed output:

[ bin ]> ./scala CountTo99WithoutNumbers
zero
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fiveteen
sixteen
seventeen
eightteen
nineteen
twenty
twenty-one
twenty-two
twenty-three
twenty-four
twenty-five
twenty-six
twenty-seven
twenty-eight
twenty-nine
thirty
thirty-one
thirty-two
thirty-three
thirty-four
thirty-five
thirty-six
thirty-seven
thirty-eight
thirty-nine
forty
forty-one
forty-two
forty-three
forty-four
forty-five
forty-six
forty-seven
forty-eight
forty-nine
fifty
fifty-one
fifty-two
fifty-three
fifty-four
fifty-five
fifty-six
fifty-seven
fifty-eight
fifty-nine
sixty
sixty-one
sixty-two
sixty-three
sixty-four
sixty-five
sixty-six
sixty-seven
sixty-eight
sixty-nine
seventy
seventy-one
seventy-two
seventy-three
seventy-four
seventy-five
seventy-six
seventy-seven
seventy-eight
seventy-nine
eighty
eighty-one
eighty-two
eighty-three
eighty-four
eighty-five
eighty-six
eighty-seven
eighty-eight
eighty-nine
ninety
ninety-one
ninety-two
ninety-three
ninety-four
ninety-five
ninety-six
ninety-seven
ninety-eight
ninety-nine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment