initial commit
This commit is contained in:
107
bash/bowling/README.md
Normal file
107
bash/bowling/README.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Bowling
|
||||
|
||||
Score a bowling game.
|
||||
|
||||
Bowling is a game where players roll a heavy ball to knock down pins
|
||||
arranged in a triangle. Write code to keep track of the score
|
||||
of a game of bowling.
|
||||
|
||||
## Scoring Bowling
|
||||
|
||||
The game consists of 10 frames. A frame is composed of one or two ball
|
||||
throws with 10 pins standing at frame initialization. There are three
|
||||
cases for the tabulation of a frame.
|
||||
|
||||
* An open frame is where a score of less than 10 is recorded for the
|
||||
frame. In this case the score for the frame is the number of pins
|
||||
knocked down.
|
||||
|
||||
* A spare is where all ten pins are knocked down by the second
|
||||
throw. The total value of a spare is 10 plus the number of pins
|
||||
knocked down in their next throw.
|
||||
|
||||
* A strike is where all ten pins are knocked down by the first
|
||||
throw. The total value of a strike is 10 plus the number of pins
|
||||
knocked down in the next two throws. If a strike is immediately
|
||||
followed by a second strike, then the value of the first strike
|
||||
cannot be determined until the ball is thrown one more time.
|
||||
|
||||
Here is a three frame example:
|
||||
|
||||
| Frame 1 | Frame 2 | Frame 3 |
|
||||
| :-------------: |:-------------:| :---------------------:|
|
||||
| X (strike) | 5/ (spare) | 9 0 (open frame) |
|
||||
|
||||
Frame 1 is (10 + 5 + 5) = 20
|
||||
|
||||
Frame 2 is (5 + 5 + 9) = 19
|
||||
|
||||
Frame 3 is (9 + 0) = 9
|
||||
|
||||
This means the current running total is 48.
|
||||
|
||||
The tenth frame in the game is a special case. If someone throws a
|
||||
strike or a spare then they get a fill ball. Fill balls exist to
|
||||
calculate the total of the 10th frame. Scoring a strike or spare on
|
||||
the fill ball does not give the player more fill balls. The total
|
||||
value of the 10th frame is the total number of pins knocked down.
|
||||
|
||||
For a tenth frame of X1/ (strike and a spare), the total value is 20.
|
||||
|
||||
For a tenth frame of XXX (three strikes), the total value is 30.
|
||||
|
||||
## Requirements
|
||||
|
||||
Write code to keep track of the score of a game of bowling. It should
|
||||
support two operations:
|
||||
|
||||
* `roll(pins : int)` is called each time the player rolls a ball. The
|
||||
argument is the number of pins knocked down.
|
||||
* `score() : int` is called only at the very end of the game. It
|
||||
returns the total score for that game.
|
||||
|
||||
|
||||
Run the tests with:
|
||||
|
||||
```bash
|
||||
bats bowling_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 bowling_test.sh
|
||||
```
|
||||
|
||||
## Source
|
||||
|
||||
The Bowling Game Kata at but UncleBob [http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata](http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata)
|
||||
|
||||
|
||||
## 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.
|
Reference in New Issue
Block a user