Jim Infield
3 years ago
commit
99a09f09c4
4 changed files with 132 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
{"track":"bash","exercise":"two-fer","id":"0bea95a330fe4689830308cd0e5b3182","url":"https://exercism.io/my/solutions/0bea95a330fe4689830308cd0e5b3182","handle":"jinfield","is_requester":true,"auto_approve":false} |
@ -0,0 +1,72 @@ |
|||||
|
# Two Fer |
||||
|
|
||||
|
`Two-fer` or `2-fer` is short for two for one. One for you and one for me. |
||||
|
|
||||
|
Given a name, return a string with the message: |
||||
|
|
||||
|
```text |
||||
|
One for name, one for me. |
||||
|
``` |
||||
|
|
||||
|
Where "name" is the given name. |
||||
|
|
||||
|
However, if the name is missing, return the string: |
||||
|
|
||||
|
```text |
||||
|
One for you, one for me. |
||||
|
``` |
||||
|
|
||||
|
Here are some examples: |
||||
|
|
||||
|
|Name |String to return |
||||
|
|:-------|:------------------ |
||||
|
|Alice |One for Alice, one for me. |
||||
|
|Bob |One for Bob, one for me. |
||||
|
| |One for you, one for me. |
||||
|
|Zaphod |One for Zaphod, one for me. |
||||
|
|
||||
|
|
||||
|
Run the tests with: |
||||
|
|
||||
|
```bash |
||||
|
bats two_fer_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 two_fer_test.sh |
||||
|
``` |
||||
|
|
||||
|
## Source |
||||
|
|
||||
|
[https://github.com/exercism/problem-specifications/issues/757](https://github.com/exercism/problem-specifications/issues/757) |
||||
|
|
||||
|
|
||||
|
## 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. |
@ -0,0 +1,3 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
echo "One for ${1:-you}, one for me." |
@ -0,0 +1,56 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
# local version: 1.2.0.1 |
||||
|
|
||||
|
@test "no name given" { |
||||
|
#[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
||||
|
|
||||
|
# The above line controls whether to skip the test. |
||||
|
# Normally, we skip every test except for the first one |
||||
|
# (the first one is always commented out). This allows for |
||||
|
# a person to focus on solving a test at a time: you can |
||||
|
# comment out or delete the |
||||
|
# `[[ $BATS_RUN_SKIPPED == "true" ]] || skip` |
||||
|
# line to run the test when you are ready. |
||||
|
# |
||||
|
# You can also run all the tests by setting the |
||||
|
# `$BATS_RUN_SKIPPED` environment variable, like this: |
||||
|
# |
||||
|
# $ BATS_RUN_SKIPPED=true bats two_fer_test.sh |
||||
|
|
||||
|
run bash two_fer.sh |
||||
|
(( status == 0 )) |
||||
|
[[ $output == "One for you, one for me." ]] |
||||
|
} |
||||
|
|
||||
|
@test "a name given" { |
||||
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
||||
|
run bash two_fer.sh Alice |
||||
|
(( status == 0 )) |
||||
|
[[ $output == "One for Alice, one for me." ]] |
||||
|
} |
||||
|
|
||||
|
@test "another name given" { |
||||
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
||||
|
run bash two_fer.sh Bob |
||||
|
(( status == 0 )) |
||||
|
[[ $output == "One for Bob, one for me." ]] |
||||
|
} |
||||
|
|
||||
|
# bash-specific test: Focus the student's attention on the effects of |
||||
|
# word splitting and filename expansion: |
||||
|
# https://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions |
||||
|
|
||||
|
@test "handle arg with spaces" { |
||||
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
||||
|
run bash two_fer.sh "John Smith" "Mary Ann" |
||||
|
(( status == 0 )) |
||||
|
[[ $output == "One for John Smith, one for me." ]] |
||||
|
} |
||||
|
|
||||
|
@test "handle arg with glob char" { |
||||
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip |
||||
|
run bash two_fer.sh "* " |
||||
|
(( status == 0 )) |
||||
|
[[ $output == "One for * , one for me." ]] |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue