-
-
Notifications
You must be signed in to change notification settings - Fork 342
London | 26-ITP-May | Remi M. | Sprint 3 | 2-practice-tdd #1326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,22 @@ | ||
| /** | ||
| * Counts how many times a single character appears in a string. | ||
| * | ||
| * @param {string} stringOfCharacters - The string to search through. | ||
| * @param {string} findCharacter - The single character to count. | ||
| * @returns {number} The number of times findCharacter appears in stringOfCharacters. | ||
| * | ||
| * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of | ||
| */ | ||
|
|
||
| function countChar(stringOfCharacters, findCharacter) { | ||
| return 5 | ||
| let count = 0; | ||
| for (const char of stringOfCharacters) { | ||
| if (char === findCharacter) { | ||
| count++; // this means count = count + 1. This term is called | ||
| // "incrementing" the count variable. | ||
| } | ||
| } | ||
| return count; | ||
| } | ||
|
|
||
| module.exports = countChar; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,41 @@ | ||
| /** | ||
| * Converts a number into its ordinal string form (e.g. 1 → "1st", 2 → "2nd"). | ||
| * | ||
| * English ordinal rules: | ||
| * - Numbers ending in 11, 12, or 13 always use "th" (they are exceptions). | ||
| * - Numbers ending in 1 (but not 11) use "st". | ||
| * - Numbers ending in 2 (but not 12) use "nd". | ||
| * - Numbers ending in 3 (but not 13) use "rd". | ||
| * - Everything else uses "th". | ||
| * | ||
| * @param {number} num - A positive whole number (e.g. 1, 22, 113). | ||
| * @returns {string} The number with its ordinal suffix appended (e.g. "1st", "22nd"). | ||
| * | ||
| * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder | ||
| * @see https://www.freecodecamp.org/news/javascript-modulo-operator/ | ||
| */ | ||
| function getOrdinalNumber(num) { | ||
| return "1st"; | ||
| // % is the "remainder" operator (also called modulo). | ||
| // num % 100 gives the last two digits of any number. | ||
| // e.g. 113 % 100 = 13, so we catch the 11/12/13 exceptions correctly. | ||
| const lastTwoDigits = num % 100; | ||
|
|
||
| // num % 10 gives the last single digit of any number. | ||
| // e.g. 21 % 10 = 1, so we know it ends in 1 → "st". | ||
| const lastDigit = num % 10; | ||
|
|
||
| // Check the 11/12/13 exceptions FIRST. | ||
| // If we checked lastDigit first, 11 would wrongly get "st" instead of "th". | ||
| if (lastTwoDigits === 11 || lastTwoDigits === 12 || lastTwoDigits === 13) { | ||
| return num + "th"; | ||
| } | ||
|
|
||
| if (lastDigit === 1) return num + "st"; | ||
| if (lastDigit === 2) return num + "nd"; | ||
| if (lastDigit === 3) return num + "rd"; | ||
|
|
||
| // All remaining numbers (4–9, 0, and any not caught above) use "th". | ||
| return num + "th"; | ||
| } | ||
|
|
||
| module.exports = getOrdinalNumber; | ||
| module.exports = getOrdinalNumber; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -18,3 +18,43 @@ test("should append 'st' for numbers ending with 1, except those ending with 11" | |
| expect(getOrdinalNumber(21)).toEqual("21st"); | ||
| expect(getOrdinalNumber(131)).toEqual("131st"); | ||
| }); | ||
|
|
||
| // Case 2: Numbers ending with 2 (but not 12) | ||
| // When the number ends with 2, except those ending with 12, | ||
| // Then the function should return a string by appending "nd" to the number. | ||
| test("should append 'nd' for numbers ending with 2, except those ending with 12", () => { | ||
| expect(getOrdinalNumber(2)).toEqual("2nd"); | ||
| expect(getOrdinalNumber(22)).toEqual("22nd"); | ||
| expect(getOrdinalNumber(132)).toEqual("132nd"); | ||
| }); | ||
|
|
||
| // Case 3: Numbers ending with 3 (but not 13) | ||
| // When the number ends with 3, except those ending with 13, | ||
| // Then the function should return a string by appending "rd" to the number. | ||
| test("should append 'rd' for numbers ending with 3, except those ending with 13", () => { | ||
| expect(getOrdinalNumber(3)).toEqual("3rd"); | ||
| expect(getOrdinalNumber(23)).toEqual("23rd"); | ||
| expect(getOrdinalNumber(133)).toEqual("133rd"); | ||
| }); | ||
|
|
||
| // Case 4: Numbers ending with 11, 12, or 13 | ||
| // When the number ends with 11, 12, or 13, | ||
| // Then the function should return a string by appending "th" to the number. | ||
| test("should append 'th' for numbers ending with 11, 12, or 13", () => { | ||
| expect(getOrdinalNumber(11)).toEqual("11th"); | ||
| expect(getOrdinalNumber(12)).toEqual("12th"); | ||
| expect(getOrdinalNumber(13)).toEqual("13th"); | ||
| }); | ||
|
|
||
| // Case 5: All other numbers | ||
| // When the number does not end with 1, 2, or 3 (and is not an exception), | ||
| // Then the function should return a string by appending "th" to the number. | ||
| test("should append 'th' for all other numbers", () => { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When a test fails with the message "... all other numbers", it may be unclear what "other numbers" actually refers to. |
||
| expect(getOrdinalNumber(4)).toEqual("4th"); | ||
| expect(getOrdinalNumber(10)).toEqual("10th"); | ||
| expect(getOrdinalNumber(20)).toEqual("20th"); | ||
| expect(getOrdinalNumber(100)).toEqual("100th"); | ||
| expect(getOrdinalNumber(111)).toEqual("111th"); | ||
| }); | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,26 @@ | ||
| function repeatStr() { | ||
| // Your implementation of this function must *not* call String.prototype.repeat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat). | ||
| // The goal is to re-implement that function, not to use it. | ||
| return "hellohellohello"; | ||
| /** | ||
| * Repeats a string a given number of times. | ||
| * This re-implements String.prototype.repeat without using it. | ||
| * | ||
| * @param {string} str - The string to repeat. | ||
| * @param {number} count - How many times to repeat it. Must be 0 or greater. | ||
| * @returns {string} The string repeated count times, or "" if count is 0. | ||
| * @throws {Error} If count is negative. | ||
| * | ||
| * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for | ||
| */ | ||
| function repeatStr(str, count) { | ||
| if (count < 0) { | ||
| throw new Error("count must be 0 or greater"); | ||
| } | ||
|
|
||
| let result = ""; | ||
|
|
||
| for (let i = 1; i < count; i++) { | ||
| result = result + str; | ||
| } | ||
|
|
||
| return result; | ||
| } | ||
|
|
||
| module.exports = repeatStr; |
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Have you tried running this script to ensure everything works as expected? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent documentation work here!