-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
229 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
*.beam | ||
*.ez | ||
build | ||
erl_crash.dump |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Help | ||
|
||
## Running the tests | ||
|
||
To run the tests, run the command `gleam test` from within the exercise directory. | ||
|
||
## Submitting your solution | ||
|
||
You can submit your solution using the `exercism submit src/raindrops.gleam` command. | ||
This command will upload your solution to the Exercism website and print the solution page's URL. | ||
|
||
It's possible to submit an incomplete solution which allows you to: | ||
|
||
- See how others have completed the exercise | ||
- Request help from a mentor | ||
|
||
## Need to get help? | ||
|
||
If you'd like help solving the exercise, check the following pages: | ||
|
||
- The [Gleam track's documentation](https://exercism.org/docs/tracks/gleam) | ||
- The [Gleam track's programming category on the forum](https://forum.exercism.org/c/programming/gleam) | ||
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5) | ||
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs) | ||
|
||
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring. | ||
|
||
To get help if you're having trouble, you can use one of the following resources: | ||
|
||
- [gleam.run](https://gleam.run/documentation/) is the gleam official documentation. | ||
- [Discord](https://discord.gg/Fm8Pwmy) is the discord channel. | ||
- [StackOverflow](https://stackoverflow.com/questions/tagged/gleam) can be used to search for your problem and see if it has been answered already. You can also ask and answer questions. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Raindrops | ||
|
||
Welcome to Raindrops on Exercism's Gleam Track. | ||
If you need help running the tests or submitting your code, check out `HELP.md`. | ||
|
||
## Introduction | ||
|
||
Raindrops is a slightly more complex version of the FizzBuzz challenge, a classic interview question. | ||
|
||
## 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 | ||
~~~~ | ||
|
||
## Source | ||
|
||
### Created by | ||
|
||
- @lpil | ||
|
||
### Based on | ||
|
||
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. - https://en.wikipedia.org/wiki/Fizz_buzz |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
name = "raindrops" | ||
version = "0.1.0" | ||
|
||
[dependencies] | ||
gleam_bitwise = "~> 1.2" | ||
gleam_otp = "~> 0.7 or ~> 1.0" | ||
gleam_stdlib = "~> 0.32 or ~> 1.0" | ||
simplifile = "~> 1.0" | ||
|
||
[dev-dependencies] | ||
exercism_test_runner = "~> 1.4" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# This file was generated by Gleam | ||
# You typically do not need to edit this file | ||
|
||
packages = [ | ||
{ name = "argv", version = "1.0.1", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "A6E9009E50BBE863EB37D963E4315398D41A3D87D0075480FC244125808F964A" }, | ||
{ name = "exercism_test_runner", version = "1.7.0", build_tools = ["gleam"], requirements = ["argv", "gap", "glance", "gleam_community_ansi", "gleam_erlang", "gleam_json", "gleam_stdlib", "simplifile"], otp_app = "exercism_test_runner", source = "hex", outer_checksum = "2FC1BADB19BEC2AE77BFD2D3A606A014C85412A7B874CAFC4BA8CF04B0B257CD" }, | ||
{ name = "gap", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_stdlib"], otp_app = "gap", source = "hex", outer_checksum = "2EE1B0A17E85CF73A0C1D29DA315A2699117A8F549C8E8D89FA8261BE41EDEB1" }, | ||
{ name = "glance", version = "0.8.2", build_tools = ["gleam"], requirements = ["gleam_stdlib", "glexer"], otp_app = "glance", source = "hex", outer_checksum = "ACF09457E8B564AD7A0D823DAFDD326F58263C01ACB0D432A9BEFDEDD1DA8E73" }, | ||
{ name = "gleam_bitwise", version = "1.3.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_bitwise", source = "hex", outer_checksum = "B36E1D3188D7F594C7FD4F43D0D2CE17561DE896202017548578B16FE1FE9EFC" }, | ||
{ name = "gleam_community_ansi", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "FE79E08BF97009729259B6357EC058315B6FBB916FAD1C2FF9355115FEB0D3A4" }, | ||
{ name = "gleam_community_colour", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "A49A5E3AE8B637A5ACBA80ECB9B1AFE89FD3D5351FF6410A42B84F666D40D7D5" }, | ||
{ name = "gleam_erlang", version = "0.24.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "26BDB52E61889F56A291CB34167315780EE4AA20961917314446542C90D1C1A0" }, | ||
{ name = "gleam_json", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "thoas"], otp_app = "gleam_json", source = "hex", outer_checksum = "8B197DD5D578EA6AC2C0D4BDC634C71A5BCA8E7DB5F47091C263ECB411A60DF3" }, | ||
{ name = "gleam_otp", version = "0.10.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "0B04FE915ACECE539B317F9652CAADBBC0F000184D586AAAF2D94C100945D72B" }, | ||
{ name = "gleam_stdlib", version = "0.36.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "C0D14D807FEC6F8A08A7C9EF8DFDE6AE5C10E40E21325B2B29365965D82EB3D4" }, | ||
{ name = "glexer", version = "0.7.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glexer", source = "hex", outer_checksum = "4484942A465482A0A100936E1E5F12314DB4B5AC0D87575A7B9E9062090B96BE" }, | ||
{ name = "simplifile", version = "1.5.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "EB9AA8E65E5C1E3E0FDCFC81BC363FD433CB122D7D062750FFDF24DE4AC40116" }, | ||
{ name = "thoas", version = "0.4.1", build_tools = ["rebar3"], requirements = [], otp_app = "thoas", source = "hex", outer_checksum = "4918D50026C073C4AB1388437132C77A6F6F7C8AC43C60C13758CC0ADCE2134E" }, | ||
] | ||
|
||
[requirements] | ||
exercism_test_runner = { version = "~> 1.4" } | ||
gleam_bitwise = { version = "~> 1.2" } | ||
gleam_otp = { version = "~> 0.7 or ~> 1.0" } | ||
gleam_stdlib = { version = "~> 0.32 or ~> 1.0" } | ||
simplifile = { version = "~> 1.0" } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import gleam/int | ||
import gleam/list | ||
import gleam/string | ||
|
||
pub fn convert(number: Int) -> String { | ||
let sounds = | ||
[#(3, "Pling"), #(5, "Plang"), #(7, "Plong")] | ||
|> list.filter(fn(pair) { number % pair.0 == 0 }) | ||
|> list.map(fn(pair) { pair.1 }) | ||
|> string.concat | ||
|
||
case sounds { | ||
"" -> int.to_string(number) | ||
_ -> sounds | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
import exercism/should | ||
import exercism/test_runner | ||
import raindrops | ||
|
||
pub fn main() { | ||
test_runner.main() | ||
} | ||
|
||
pub fn the_sound_for_1_is_1_test() { | ||
raindrops.convert(1) | ||
|> should.equal("1") | ||
} | ||
|
||
pub fn the_sound_for_3_is_pling_test() { | ||
raindrops.convert(3) | ||
|> should.equal("Pling") | ||
} | ||
|
||
pub fn the_sound_for_5_is_plang_test() { | ||
raindrops.convert(5) | ||
|> should.equal("Plang") | ||
} | ||
|
||
pub fn the_sound_for_7_is_plong_test() { | ||
raindrops.convert(7) | ||
|> should.equal("Plong") | ||
} | ||
|
||
pub fn the_sound_for_6_is_pling_as_it_has_a_factor_3_test() { | ||
raindrops.convert(6) | ||
|> should.equal("Pling") | ||
} | ||
|
||
pub fn two_to_the_power_3_does_not_make_a_raindrop_sound_as_3_is_the_exponent_not_the_base_test() { | ||
raindrops.convert(8) | ||
|> should.equal("8") | ||
} | ||
|
||
pub fn the_sound_for_9_is_pling_as_it_has_a_factor_3_test() { | ||
raindrops.convert(9) | ||
|> should.equal("Pling") | ||
} | ||
|
||
pub fn the_sound_for_10_is_plang_as_it_has_a_factor_5_test() { | ||
raindrops.convert(10) | ||
|> should.equal("Plang") | ||
} | ||
|
||
pub fn the_sound_for_14_is_plong_as_it_has_a_factor_of_7_test() { | ||
raindrops.convert(14) | ||
|> should.equal("Plong") | ||
} | ||
|
||
pub fn the_sound_for_15_is_plingplang_as_it_has_factors_3_and_5_test() { | ||
raindrops.convert(15) | ||
|> should.equal("PlingPlang") | ||
} | ||
|
||
pub fn the_sound_for_21_is_plingplong_as_it_has_factors_3_and_7_test() { | ||
raindrops.convert(21) | ||
|> should.equal("PlingPlong") | ||
} | ||
|
||
pub fn the_sound_for_25_is_plang_as_it_has_a_factor_5_test() { | ||
raindrops.convert(25) | ||
|> should.equal("Plang") | ||
} | ||
|
||
pub fn the_sound_for_27_is_pling_as_it_has_a_factor_3_test() { | ||
raindrops.convert(27) | ||
|> should.equal("Pling") | ||
} | ||
|
||
pub fn the_sound_for_35_is_plangplong_as_it_has_factors_5_and_7_test() { | ||
raindrops.convert(35) | ||
|> should.equal("PlangPlong") | ||
} | ||
|
||
pub fn the_sound_for_49_is_plong_as_it_has_a_factor_7_test() { | ||
raindrops.convert(49) | ||
|> should.equal("Plong") | ||
} | ||
|
||
pub fn the_sound_for_52_is_52_test() { | ||
raindrops.convert(52) | ||
|> should.equal("52") | ||
} | ||
|
||
pub fn the_sound_for_105_is_plingplangplong_as_it_has_factors_3_5_and_7_test() { | ||
raindrops.convert(105) | ||
|> should.equal("PlingPlangPlong") | ||
} | ||
|
||
pub fn the_sound_for_3125_is_plang_as_it_has_a_factor_5_test() { | ||
raindrops.convert(3125) | ||
|> should.equal("Plang") | ||
} |