Skip to content

Commit

Permalink
Add raindrops exercise (#242)
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras authored Jan 10, 2024
1 parent 4721221 commit e3a3ff7
Show file tree
Hide file tree
Showing 7 changed files with 239 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,14 @@
"math"
]
},
{
"slug": "raindrops",
"name": "Raindrops",
"uuid": "7a07c4ae-608f-48d6-8641-c7ceba849dd6",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "resistor-color",
"name": "Resistor Color",
Expand Down
20 changes: 20 additions & 0 deletions exercises/practice/raindrops/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Instructions

Your task is to convert a number into a string that contains raindrop sounds corresponding to certain potential factors.
A factor is a number that evenly divides into another number, leaving no remainder.
The simplest way to test if one number is a factor of another is to use the [modulo operation][modulo].

The rules of `raindrops` are that if a given number:

- has 3 as a factor, add 'Pling' to the result.
- has 5 as a factor, add 'Plang' to the result.
- has 7 as a factor, add 'Plong' to the result.
- _does not_ have any of 3, 5, or 7 as a factor, the result should be the digits of the number.

## Examples

- 28 has 7 as a factor, but not 3 or 5, so the result would be "Plong".
- 30 has both 3 and 5 as factors, but not 7, so the result would be "PlingPlang".
- 34 is not factored by 3, 5, or 7, so the result would be "34".

[modulo]: https://en.wikipedia.org/wiki/Modulo_operation
19 changes: 19 additions & 0 deletions exercises/practice/raindrops/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"BNAndras"
],
"files": {
"solution": [
"raindrops.coffee"
],
"test": [
"raindrops.spec.coffee"
],
"example": [
".meta/example.coffee"
]
},
"blurb": "Convert a number to a string, the content of which depends on the number's factors.",
"source": "A variation on FizzBuzz, a famous technical interview question that is intended to weed out potential candidates. That question is itself derived from Fizz Buzz, a popular children's game for teaching division.",
"source_url": "https://en.wikipedia.org/wiki/Fizz_buzz"
}
13 changes: 13 additions & 0 deletions exercises/practice/raindrops/.meta/example.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Raindrops
@convert: (number) ->
results = ''
if number % 3 == 0
results += 'Pling'
if number % 5 == 0
results += 'Plang'
if number % 7 == 0
results += 'Plong'

if !!results then results else number.toString()

module.exports = Raindrops
64 changes: 64 additions & 0 deletions exercises/practice/raindrops/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[1575d549-e502-46d4-a8e1-6b7bec6123d8]
description = "the sound for 1 is 1"

[1f51a9f9-4895-4539-b182-d7b0a5ab2913]
description = "the sound for 3 is Pling"

[2d9bfae5-2b21-4bcd-9629-c8c0e388f3e0]
description = "the sound for 5 is Plang"

[d7e60daa-32ef-4c23-b688-2abff46c4806]
description = "the sound for 7 is Plong"

[6bb4947b-a724-430c-923f-f0dc3d62e56a]
description = "the sound for 6 is Pling as it has a factor 3"

[ce51e0e8-d9d4-446d-9949-96eac4458c2d]
description = "2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base"

[0dd66175-e3e2-47fc-8750-d01739856671]
description = "the sound for 9 is Pling as it has a factor 3"

[022c44d3-2182-4471-95d7-c575af225c96]
description = "the sound for 10 is Plang as it has a factor 5"

[37ab74db-fed3-40ff-b7b9-04acdfea8edf]
description = "the sound for 14 is Plong as it has a factor of 7"

[31f92999-6afb-40ee-9aa4-6d15e3334d0f]
description = "the sound for 15 is PlingPlang as it has factors 3 and 5"

[ff9bb95d-6361-4602-be2c-653fe5239b54]
description = "the sound for 21 is PlingPlong as it has factors 3 and 7"

[d2e75317-b72e-40ab-8a64-6734a21dece1]
description = "the sound for 25 is Plang as it has a factor 5"

[a09c4c58-c662-4e32-97fe-f1501ef7125c]
description = "the sound for 27 is Pling as it has a factor 3"

[bdf061de-8564-4899-a843-14b48b722789]
description = "the sound for 35 is PlangPlong as it has factors 5 and 7"

[c4680bee-69ba-439d-99b5-70c5fd1a7a83]
description = "the sound for 49 is Plong as it has a factor 7"

[17f2bc9a-b65a-4d23-8ccd-266e8c271444]
description = "the sound for 52 is 52"

[e46677ed-ff1a-419f-a740-5c713d2830e4]
description = "the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7"

[13c6837a-0fcd-4b86-a0eb-20572f7deb0b]
description = "the sound for 3125 is Plang as it has a factor 5"
4 changes: 4 additions & 0 deletions exercises/practice/raindrops/raindrops.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Raindrops
@convert: (number) ->

module.exports = Raindrops
111 changes: 111 additions & 0 deletions exercises/practice/raindrops/raindrops.spec.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@

Raindrops = require './raindrops'

describe 'Raindrops', ->
it 'the sound for 1 is 1', ->
number = 1
results = Raindrops.convert(number)
expected = '1'
expect(results).toEqual expected

xit 'the sound for 3 is Pling', ->
number = 3
results = Raindrops.convert(number)
expected = 'Pling'
expect(results).toEqual expected

xit 'the sound for 5 is Plang', ->
number = 5
results = Raindrops.convert(number)
expected = 'Plang'
expect(results).toEqual expected

xit 'the sound for 7 is Plong', ->
number = 7
results = Raindrops.convert(number)
expected = 'Plong'
expect(results).toEqual expected

xit 'the sound for 6 is Pling as it has a factor 3', ->
number = 6
results = Raindrops.convert(number)
expected = 'Pling'
expect(results).toEqual expected

xit '2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base', ->
number = 8
results = Raindrops.convert(number)
expected = '8'
expect(results).toEqual expected

xit 'the sound for 9 is Pling as it has a factor 3', ->
number = 9
results = Raindrops.convert(number)
expected = 'Pling'
expect(results).toEqual expected

xit 'the sound for 10 is Plang as it has a factor 5', ->
number = 10
results = Raindrops.convert(number)
expected = 'Plang'
expect(results).toEqual expected

xit 'the sound for 14 is Plong as it has a factor of 7', ->
number = 14
results = Raindrops.convert(number)
expected = 'Plong'
expect(results).toEqual expected

xit 'the sound for 15 is PlingPlang as it has factors 3 and 5', ->
number = 15
results = Raindrops.convert(number)
expected = 'PlingPlang'
expect(results).toEqual expected

xit 'the sound for 21 is PlingPlong as it has factors 3 and 7', ->
number = 21
results = Raindrops.convert(number)
expected = 'PlingPlong'
expect(results).toEqual expected

xit 'the sound for 25 is Plang as it has a factor 5', ->
number = 25
results = Raindrops.convert(number)
expected = 'Plang'
expect(results).toEqual expected

xit 'the sound for 27 is Pling as it has a factor 3', ->
number = 27
results = Raindrops.convert(number)
expected = 'Pling'
expect(results).toEqual expected

xit 'the sound for 35 is PlangPlong as it has factors 5 and 7', ->
number = 35
results = Raindrops.convert(number)
expected = 'PlangPlong'
expect(results).toEqual expected

xit 'the sound for 49 is Plong as it has a factor 7', ->
number = 49
results = Raindrops.convert(number)
expected = 'Plong'
expect(results).toEqual expected

xit 'the sound for 52 is 52', ->
number = 52
results = Raindrops.convert(number)
expected = '52'
expect(results).toEqual expected

xit 'the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7', ->
number = 105
results = Raindrops.convert(number)
expected = 'PlingPlangPlong'
expect(results).toEqual expected

xit 'the sound for 3125 is Plang as it has a factor 5', ->
number = 3125
results = Raindrops.convert(number)
expected = 'Plang'
expect(results).toEqual expected

0 comments on commit e3a3ff7

Please sign in to comment.