ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# hyphenrf's solution

## to Raindrops in the OCaml Track

Published at Apr 29 2020 · 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".

## Getting Started

1. For library documentation, follow Useful OCaml resources.

## Running Tests

A `Makefile` is provided with a default target to compile your solution and run the tests. At the command line, type:

``````make
``````

## Submitting Incomplete Solutions

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

## Feedback, Issues, Pull Requests

The exercism/ocaml repository on GitHub is the home for all of the Ocaml exercises.

If you have feedback about an exercise, or want to help implementing a new one, head over there and create an issue or submit a PR. We welcome new contributors!

## Source

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

### test.ml

``````(* raindrops - 1.1.0 *)
open OUnit2
open Raindrops

let ae exp got _test_ctxt = assert_equal ~printer:(fun x -> x) exp got

let tests = [
"the sound for 1 is 1" >::
ae "1" (raindrop 1);
"the sound for 3 is Pling" >::
ae "Pling" (raindrop 3);
"the sound for 5 is Plang" >::
ae "Plang" (raindrop 5);
"the sound for 7 is Plong" >::
ae "Plong" (raindrop 7);
"the sound for 6 is Pling as it has a factor 3" >::
ae "Pling" (raindrop 6);
"2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base" >::
ae "8" (raindrop 8);
"the sound for 9 is Pling as it has a factor 3" >::
ae "Pling" (raindrop 9);
"the sound for 10 is Plang as it has a factor 5" >::
ae "Plang" (raindrop 10);
"the sound for 14 is Plong as it has a factor of 7" >::
ae "Plong" (raindrop 14);
"the sound for 15 is PlingPlang as it has factors 3 and 5" >::
ae "PlingPlang" (raindrop 15);
"the sound for 21 is PlingPlong as it has factors 3 and 7" >::
ae "PlingPlong" (raindrop 21);
"the sound for 25 is Plang as it has a factor 5" >::
ae "Plang" (raindrop 25);
"the sound for 27 is Pling as it has a factor 3" >::
ae "Pling" (raindrop 27);
"the sound for 35 is PlangPlong as it has factors 5 and 7" >::
ae "PlangPlong" (raindrop 35);
"the sound for 49 is Plong as it has a factor 7" >::
ae "Plong" (raindrop 49);
"the sound for 52 is 52" >::
ae "52" (raindrop 52);
"the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7" >::
ae "PlingPlangPlong" (raindrop 105);
"the sound for 3125 is Plang as it has a factor 5" >::
ae "Plang" (raindrop 3125);
]

let () =
run_test_tt_main ("raindrops tests" >::: tests)``````
``````let raindrop n =
match
(if n mod 3 == 0 then "Pling" else "") ^
(if n mod 5 == 0 then "Plang" else "") ^
(if n mod 7 == 0 then "Plong" else "")
with
| ""   -> string_of_int n
| rain -> rain``````