65 lines
2.9 KiB
Markdown
65 lines
2.9 KiB
Markdown
# Darts
|
|
|
|
Write a function that returns the earned points in a single toss of a Darts game.
|
|
|
|
[Darts](https://en.wikipedia.org/wiki/Darts) is a game where players
|
|
throw darts to a [target](https://en.wikipedia.org/wiki/Darts#/media/File:Darts_in_a_dartboard.jpg).
|
|
|
|
In our particular instance of the game, the target rewards with 4 different amounts of points, depending on where the dart lands:
|
|
|
|
* If the dart lands outside the target, player earns no points (0 points).
|
|
* If the dart lands in the outer circle of the target, player earns 1 point.
|
|
* If the dart lands in the middle circle of the target, player earns 5 points.
|
|
* If the dart lands in the inner circle of the target, player earns 10 points.
|
|
|
|
The outer circle has a radius of 10 units (This is equivalent to the total radius for the entire target), the middle circle a radius of 5 units, and the inner circle a radius of 1. Of course, they are all centered to the same point (That is, the circles are [concentric](http://mathworld.wolfram.com/ConcentricCircles.html)) defined by the coordinates (0, 0).
|
|
|
|
Write a function that given a point in the target (defined by its `real` cartesian coordinates `x` and `y`), returns the correct amount earned by a dart landing in that point.
|
|
|
|
This particular exercise, since it deals with floating point arithmetic, is natural to rely on external tools (see below). As an extra challenging challenge, find a way to implement this with plain bash.
|
|
|
|
Run the tests with:
|
|
|
|
```bash
|
|
bats darts_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 darts_test.sh
|
|
```
|
|
|
|
## Source
|
|
|
|
Inspired by an exercise created by a professor Della Paolera in Argentina
|
|
|
|
|
|
## 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.
|