Add bash/raindrops
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
# Raindrops
|
||||||
|
|
||||||
|
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".
|
||||||
|
|
||||||
|
|
||||||
|
Run the tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bats raindrops_test.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
After the first test(s) pass, continue by commenting out or removing the
|
||||||
|
`[[ $BATS_RUN_SKIPPED == true ]] || skip`
|
||||||
|
annotations prepending other tests.
|
||||||
|
|
||||||
|
To run all tests, including the ones with `skip` annotations, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BATS_RUN_SKIPPED=true bats raindrops_test.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
A variation on a famous interview question intended to weed out potential candidates. [http://jumpstartlab.com](http://jumpstartlab.com)
|
||||||
|
|
||||||
|
|
||||||
|
## External utilities
|
||||||
|
`Bash` is a language to write "scripts" -- programs that can call
|
||||||
|
external tools, such as
|
||||||
|
[`sed`](https://www.gnu.org/software/sed/),
|
||||||
|
[`awk`](https://www.gnu.org/software/gawk/),
|
||||||
|
[`date`](https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html)
|
||||||
|
and even programs written in other programming languages,
|
||||||
|
like [`Python`](https://www.python.org/).
|
||||||
|
This track does not restrict the usage of these utilities, and as long
|
||||||
|
as your solution is portable between systems and does not require
|
||||||
|
installation of third party applications, feel free to use them to solve
|
||||||
|
the exercise.
|
||||||
|
|
||||||
|
For an extra challenge, if you would like to have a better understanding
|
||||||
|
of the language, try to re-implement the solution in pure `Bash`,
|
||||||
|
without using any external tools. Note that there are some types of
|
||||||
|
problems that bash cannot solve, such as performing floating point
|
||||||
|
arithmetic and manipulating dates: for those, you must call out to an
|
||||||
|
external tool.
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
It's possible to submit an incomplete solution so you can see how others
|
||||||
|
have completed the exercise.
|
||||||
Executable
+25
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local name=""
|
||||||
|
|
||||||
|
if [ $(($1 % 3)) -eq 0 ]; then
|
||||||
|
name="Pling"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(($1 % 5)) -eq 0 ]; then
|
||||||
|
name="${name}Plang"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $(($1 % 7)) -eq 0 ]; then
|
||||||
|
name="${name}Plong"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$name" = "" ]; then
|
||||||
|
name="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $name
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
@test "the sound for 1 is 1" {
|
||||||
|
run bash raindrops.sh 1
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "1" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 3 is Pling" {
|
||||||
|
run bash raindrops.sh 3
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Pling" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 5 is Plang" {
|
||||||
|
run bash raindrops.sh 5
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plang" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 7 is Plong" {
|
||||||
|
run bash raindrops.sh 7
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 6 is Pling as it has a factor 3" {
|
||||||
|
run bash raindrops.sh 6
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Pling" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base" {
|
||||||
|
run bash raindrops.sh 8
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "8" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 9 is Pling as it has a factor 3" {
|
||||||
|
run bash raindrops.sh 9
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Pling" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 10 is Plang as it has a factor 5" {
|
||||||
|
run bash raindrops.sh 10
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plang" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 14 is Plong as it has a factor of 7" {
|
||||||
|
run bash raindrops.sh 14
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 15 is PlingPlang as it has factors 3 and 5" {
|
||||||
|
run bash raindrops.sh 15
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "PlingPlang" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 21 is PlingPlong as it has factors 3 and 7" {
|
||||||
|
run bash raindrops.sh 21
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "PlingPlong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 25 is Plang as it has a factor 5" {
|
||||||
|
run bash raindrops.sh 25
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plang" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 27 is Pling as it has a factor 3" {
|
||||||
|
run bash raindrops.sh 27
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Pling" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 35 is PlangPlong as it has factors 5 and 7" {
|
||||||
|
run bash raindrops.sh 35
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "PlangPlong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 49 is Plong as it has a factor 7" {
|
||||||
|
run bash raindrops.sh 49
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 52 is 52" {
|
||||||
|
run bash raindrops.sh 52
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "52" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7" {
|
||||||
|
run bash raindrops.sh 105
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "PlingPlangPlong" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "the sound for 3125 is Plang as it has a factor 5" {
|
||||||
|
run bash raindrops.sh 3125
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" == "Plang" ]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user