🎉 Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io 🎉 # SergiiVlasiuk's solution

## to Raindrops in the Scala Track

Published at Aug 23 2019 · 0 comments
Instructions
Test suite
Solution

Convert a number to a string, the contents of which depend on the number's factors.

• If the number has 3 as a factor, output 'Pling'.
• If the number has 5 as a factor, output 'Plang'.
• If the number has 7 as a factor, output 'Plong'.
• If the number does not have 3, 5, or 7 as a factor, just pass the number's digits straight through.

## Examples

• 28's factors are 1, 2, 4, 7, 14, 28.
• In raindrop-speak, this would be a simple "Plong".
• 30's factors are 1, 2, 3, 5, 6, 10, 15, 30.
• In raindrop-speak, this would be a "PlingPlang".
• 34 has four factors: 1, 2, 17, and 34.
• In raindrop-speak, this would be "34".

The Scala exercises assume an SBT project scheme. The exercise solution source should be placed within the exercise directory/src/main/scala. The exercise unit tests can be found within the exercise directory/src/test/scala.

To run the tests simply run the command `sbt test` in the exercise directory.

For more detailed info about the Scala track see the help page.

## Source

A variation on a famous interview question intended to weed out potential candidates. http://jumpstartlab.com

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### RaindropsTest.scala

``````import org.scalatest.{Matchers, FunSuite}

/** @version 1.1.0 */
class RaindropsTest extends FunSuite with Matchers {

test("the sound for 1 is 1") {
Raindrops.convert(1) should be ("1")
}

test("the sound for 3 is Pling") {
pending
Raindrops.convert(3) should be ("Pling")
}

test("the sound for 5 is Plang") {
pending
Raindrops.convert(5) should be ("Plang")
}

test("the sound for 7 is Plong") {
pending
Raindrops.convert(7) should be ("Plong")
}

test("the sound for 6 is Pling as it has a factor 3") {
pending
Raindrops.convert(6) should be ("Pling")
}

test("2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base") {
pending
Raindrops.convert(8) should be ("8")
}

test("the sound for 9 is Pling as it has a factor 3") {
pending
Raindrops.convert(9) should be ("Pling")
}

test("the sound for 10 is Plang as it has a factor 5") {
pending
Raindrops.convert(10) should be ("Plang")
}

test("the sound for 14 is Plong as it has a factor of 7") {
pending
Raindrops.convert(14) should be ("Plong")
}

test("the sound for 15 is PlingPlang as it has factors 3 and 5") {
pending
Raindrops.convert(15) should be ("PlingPlang")
}

test("the sound for 21 is PlingPlong as it has factors 3 and 7") {
pending
Raindrops.convert(21) should be ("PlingPlong")
}

test("the sound for 25 is Plang as it has a factor 5") {
pending
Raindrops.convert(25) should be ("Plang")
}

test("the sound for 27 is Pling as it has a factor 3") {
pending
Raindrops.convert(27) should be ("Pling")
}

test("the sound for 35 is PlangPlong as it has factors 5 and 7") {
pending
Raindrops.convert(35) should be ("PlangPlong")
}

test("the sound for 49 is Plong as it has a factor 7") {
pending
Raindrops.convert(49) should be ("Plong")
}

test("the sound for 52 is 52") {
pending
Raindrops.convert(52) should be ("52")
}

test("the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7") {
pending
Raindrops.convert(105) should be ("PlingPlangPlong")
}

test("the sound for 3125 is Plang as it has a factor 5") {
pending
Raindrops.convert(3125) should be ("Plang")
}
}``````
``````object Raindrops {

val factors = Map(
3 -> "Pling",
5 -> "Plang",
7 -> "Plong"
)

def convert(n: Int): String = factors.filterKeys(n % _ == 0).values match {
case ls if ls.isEmpty => n toString
case ls => ls mkString
}
}``````