diff --git a/config.json b/config.json index 9ed56070..2f315b0f 100644 --- a/config.json +++ b/config.json @@ -112,6 +112,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "raindrops", + "name": "Raindrops", + "uuid": "d2cc23d5-2ed1-4115-9b9a-4b62993e750c", + "practices": ["strings"], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "square-root", "name": "Square Root", diff --git a/exercises/practice/raindrops/.docs/instructions.md b/exercises/practice/raindrops/.docs/instructions.md new file mode 100644 index 00000000..df644107 --- /dev/null +++ b/exercises/practice/raindrops/.docs/instructions.md @@ -0,0 +1,24 @@ +# Instructions + +Your task is to convert a number into its corresponding raindrop sounds. + +If a given number: + +- is divisible by 3, add "Pling" to the result. +- is divisible by 5, add "Plang" to the result. +- is divisible by 7, add "Plong" to the result. +- **is not** divisible by 3, 5, or 7, the result should be the number as a string. + +## Examples + +- 28 is divisible by 7, but not 3 or 5, so the result would be `"Plong"`. +- 30 is divisible by 3 and 5, but not 7, so the result would be `"PlingPlang"`. +- 34 is not divisible by 3, 5, or 7, so the result would be `"34"`. + +~~~~exercism/note +A common way to test if one number is evenly divisible by another is to compare the [remainder][remainder] or [modulus][modulo] to zero. +Most languages provide operators or functions for one (or both) of these. + +[remainder]: https://exercism.org/docs/programming/operators/remainder +[modulo]: https://en.wikipedia.org/wiki/Modulo_operation +~~~~ diff --git a/exercises/practice/raindrops/.docs/introduction.md b/exercises/practice/raindrops/.docs/introduction.md new file mode 100644 index 00000000..ba12100f --- /dev/null +++ b/exercises/practice/raindrops/.docs/introduction.md @@ -0,0 +1,3 @@ +# Introduction + +Raindrops is a slightly more complex version of the FizzBuzz challenge, a classic interview question. diff --git a/exercises/practice/raindrops/.meta/config.json b/exercises/practice/raindrops/.meta/config.json new file mode 100644 index 00000000..5830f966 --- /dev/null +++ b/exercises/practice/raindrops/.meta/config.json @@ -0,0 +1,22 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "src/lib.cairo" + ], + "test": [ + "tests/raindrops.cairo" + ], + "example": [ + ".meta/example.cairo" + ], + "invalidator": [ + "Scarb.toml" + ] + }, + "blurb": "Convert a number into its corresponding raindrop sounds - Pling, Plang and Plong.", + "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" +} diff --git a/exercises/practice/raindrops/.meta/example.cairo b/exercises/practice/raindrops/.meta/example.cairo new file mode 100644 index 00000000..f9fe259b --- /dev/null +++ b/exercises/practice/raindrops/.meta/example.cairo @@ -0,0 +1,21 @@ +pub fn convert(x: u64) -> ByteArray { + let mut result = ""; + + if x % 3 == 0 { + result += "Pling"; + } + + if x % 5 == 0 { + result += "Plang"; + } + + if x % 7 == 0 { + result += "Plong"; + } + + if result == "" { + result = format!("{x}"); + } + + return result; +} diff --git a/exercises/practice/raindrops/.meta/tests.toml b/exercises/practice/raindrops/.meta/tests.toml new file mode 100644 index 00000000..756d16ca --- /dev/null +++ b/exercises/practice/raindrops/.meta/tests.toml @@ -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" diff --git a/exercises/practice/raindrops/Scarb.toml b/exercises/practice/raindrops/Scarb.toml new file mode 100644 index 00000000..3ab628b0 --- /dev/null +++ b/exercises/practice/raindrops/Scarb.toml @@ -0,0 +1,4 @@ +[package] +name = "raindrops" +version = "0.1.0" +edition = "2023_11" diff --git a/exercises/practice/raindrops/src/lib.cairo b/exercises/practice/raindrops/src/lib.cairo new file mode 100644 index 00000000..7bc32946 --- /dev/null +++ b/exercises/practice/raindrops/src/lib.cairo @@ -0,0 +1,3 @@ +pub fn convert(x: u64) -> ByteArray { + panic!("implement `convert`") +} diff --git a/exercises/practice/raindrops/tests/raindrops.cairo b/exercises/practice/raindrops/tests/raindrops.cairo new file mode 100644 index 00000000..331093ee --- /dev/null +++ b/exercises/practice/raindrops/tests/raindrops.cairo @@ -0,0 +1,108 @@ +use raindrops::convert; + +#[test] +fn the_sound_for_1_is_1() { + assert_eq!(convert(1), "1"); +} + +#[test] +#[ignore] +fn the_sound_for_3_is_pling() { + assert_eq!(convert(3), "Pling"); +} + +#[test] +#[ignore] +fn the_sound_for_5_is_plang() { + assert_eq!(convert(5), "Plang"); +} + +#[test] +#[ignore] +fn the_sound_for_7_is_plong() { + assert_eq!(convert(7), "Plong"); +} + +#[test] +#[ignore] +fn the_sound_for_6_is_pling_as_it_has_a_factor_3() { + assert_eq!(convert(6), "Pling"); +} + +#[test] +#[ignore] +fn the_sound_for_8_is_8() { + assert_eq!(convert(8), "8"); +} + +#[test] +#[ignore] +fn the_sound_for_9_is_pling_as_it_has_a_factor_3() { + assert_eq!(convert(9), "Pling"); +} + +#[test] +#[ignore] +fn the_sound_for_10_is_plang_as_it_has_a_factor_5() { + assert_eq!(convert(10), "Plang"); +} + +#[test] +#[ignore] +fn the_sound_for_14_is_plong_as_it_has_a_factor_7() { + assert_eq!(convert(14), "Plong"); +} + +#[test] +#[ignore] +fn the_sound_for_15_is_plingplang_as_it_has_factors_3_and_5() { + assert_eq!(convert(15), "PlingPlang"); +} + +#[test] +#[ignore] +fn the_sound_for_21_is_plingplong_as_it_has_factors_3_and_7() { + assert_eq!(convert(21), "PlingPlong"); +} + +#[test] +#[ignore] +fn the_sound_for_25_is_plang_as_it_has_a_factor_5() { + assert_eq!(convert(25), "Plang"); +} + +#[test] +#[ignore] +fn the_sound_for_27_is_pling_as_it_has_a_factor_3() { + assert_eq!(convert(27), "Pling"); +} + +#[test] +#[ignore] +fn the_sound_for_35_is_plangplong_as_it_has_factors_5_and_7() { + assert_eq!(convert(35), "PlangPlong"); +} + +#[test] +#[ignore] +fn the_sound_for_49_is_plong_as_it_has_a_factor_7() { + assert_eq!(convert(49), "Plong"); +} + +#[test] +#[ignore] +fn the_sound_for_52_is_52() { + assert_eq!(convert(52), "52"); +} + +#[test] +#[ignore] +fn the_sound_for_105_is_plingplangplong_as_it_has_factors_3_5_and_7() { + assert_eq!(convert(105), "PlingPlangPlong"); +} + +#[test] +#[ignore] +fn the_sound_for_3125_is_plang_as_it_has_a_factor_5() { + assert_eq!(convert(3125), "Plang"); +}