Clone this repository, navigate to the root of the project, and run npm install. To run tests whenever a file
changes, run gulp tdd in the terminal.
Other tasks:
- To run a test once, run
gulp testin the terminal - To view unit test code coverage details, ruclearn
gulp coveragein the terminal
There are a number of exercises listed below for you to work through. Practice using test-driven development while solving these code katas. Write out the tests before fleshing out your solutions. Remember to use the minimum amount of code necessary to make all the tests pass, refactoring as necessary (Red-Green-Refactor).
For each of the examples, create a function solving the kata in it's own file inside the src/ directory.
Assign it to module.exports so it can used in your test suite, which should reside in it's own file inside
the test/ directory (don't forget the .spec suffix). Ex: src/test-name.js gets tested in test/test-name.spec.js.
Note: This has already been completed in src/prime-factors.js and test/prime-factors.spec.js files. It can be
used as a reference.
Write a function that will return an array of all the prime factors of any positive integer.
Remember that a prime factor is a positive integer that is only divisible by itself and 1.
Examples:
-
2is only divisible by itself and1. The function would return[2] -
3is only divisible by itself and1. The function would return[3] -
4is divisible by2and24 2 * 22 * 2 = 4. The function would return[2, 2] -
5is not divisible by2or3, but only by itself. The function would return[5] -
6is divisible by2and36 2 * 32 * 3 = 6. The function would return[2, 3] -
10is divisible by2and510 2 * 52 * 5 = 10. The function would return[2, 5] -
12is divisible by2and6.6is not a prime number, and is divisible by212 2 * 6 2 * 32 * 2 * 3 = 12. The function would return[2, 2, 3] -
100is divisible by2and50.50is divisible by2and25,25is divisible by5and5100 2 * 50 2 * 25 5 * 52 * 2 * 5 * 5 = 100. The function would return[2, 2, 5, 5]
Write a function that will determine if a string, phrase, or number passed in is a palindrome or not. Remember that a palindrome is a value that reads the same forwards and backgrounds.
- Function returns a boolean
- Function allows for multiple words and numbers
Write a function that will return Fizz if an integer entered is divisible by 3, Buzz if a number entered is
divisible by 5, FizzBuzz if a number entered is divisible by 3 and 5, and return the number if not divisible
by 3 nor 5.
Write a function that will convert a positive integer between 1 and 4999 into roman numerals.
| Number | Glyph |
|---|---|
| 1 | I |
| 2 | II |
| 3 | III |
| 4 | IV |
| 5 | V |
| 6 | VI |
| 7 | VII |
| 8 | VIII |
| 9 | IX |
| 10 | X |
| 11 | XI |
| 12 | XII |
| 15 | XV |
| 20 | XX |
| 30 | XXX |
| 40 | XL |
| 41 | XLI |
| 44 | XLIV |
| 50 | L |
| 90 | XC |
| 100 | C |
| 500 | D |
| 900 | CM |
| 1000 | M |
| 4000 | MMMM |
Write a class that will reproduce a scoring system for a game of bowling. Make two methods:
roll(pins: int)- called each time a player rolls the ball. The argument is the number of pins knocked downscore()- called only at the very end of the game and returns an integer of the total score for that game
Ex:
Bowling.roll(3);
Bowling.roll(5);
Bowling.roll(10);
...
Bowling.score();
Remember that a game of bowling consists of 10 frames (or rounds). In each frame, a player can take one or two rolls at knocking down the 10 pins, collecting a score of 1 point per pin knocked down. Assuming a player doesn't knock down all the pins on the first roll of the frame, the score for the frame is the number of pins from the first roll plus the number of pins from the second roll. Once all players roll 10 frames, the scores for each player are tallied up and the final score is computed.
Scoring caveats:
- Spares: A spare occurs when a player fails to knock down all of the pins in the first frame, but succeeds in
knocking down the remainder in the second frame. The points of that player's next roll are counted and then also added
onto the score of the frame where the spare occurred.
- Ex: Frame 3, roll 1: 8 points. Frame 3, roll 2: 2 points (spare!). Frame 4, roll 1: 8 points, Frame 4, roll 2: 1 point.
Score for those two frames would be
(10 + 8) + 8 + 1 = 27.
- Ex: Frame 3, roll 1: 8 points. Frame 3, roll 2: 2 points (spare!). Frame 4, roll 1: 8 points, Frame 4, roll 2: 1 point.
Score for those two frames would be
- Strikes: A strike happens when a player knocks down all 10 pins in the first (and only) roll of a frame. The next two
rolls are added to the score of the frame where the strike occurred.
- Ex: Frame 3, roll 1: 10 points (strike! no second roll). Frame 4, roll 1: 8 points. Frame 4 roll 2: 1 point. Score for those two
frames would be
(10 + 8 + 1) + 8 + 1 = 28.
- Ex: Frame 3, roll 1: 10 points (strike! no second roll). Frame 4, roll 1: 8 points. Frame 4 roll 2: 1 point. Score for those two
frames would be
- In the 10th frame, a player who rolls a spare or a strike may roll the ball extra times to complete the frame, though no more than rolls can occur.
Write a function that will accept a string of numbers and return an integer representing the sum of the numbers contained in the string.
Ex: stringCalc('2,3,4') would return 9
- An empty string passed in should be interpreted as
0 - Either comma or
\ncan be the delimeter - Numbers greater than 1000 should be ignored
- Numbers less than 0 are not allowed
Write a function that translates points to the proper tennis score.
Ex: tennisScore(0,2) would return Love-Thirty
The first player to win 4 points is the winner, unless the score is 3 points to 3 points. Whenever the points are equal (from 3, upwards), the score is called "deuce." If player one scores a point after "deuce," then it is player 1's advantage (a.k.a. "Advantage in"). If player two scores a point after "deuce," then it is "Advantage out". This can go on indefinitely until one player scores two points in a row.
| Points | Score |
|---|---|
| 0-0 | Love-All |
| 1-0 | Fifteen-Love |
| 1-1 | Fifteen-All |
| 2-0 | Thirty-Love |
| 2-1 | Thirty-Fifteen |
| 2-2 | Thirty-All |
| 0-3 | Love-Forty |
| 3-3 | Deuce |
| 4-0 | Winner |
| 4-1 | Winner |
| 4-2 | Winner |
| 4-3 | Advantage In |
| 4-4 | Deuce |
| 4-5 | Advantage Out |
| 5-5 | Deuce |
| 5-6 | Advantage Out |
| 6-6 | Deuce |
| 7-6 | Advantage In |
| 7-7 | Deuce |
| 7-8 | Advantage Out |
| 7-9 | Winner |