From 1b085d1492e37d7c44084826df6edb6277452cb0 Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 11:57:50 -0500 Subject: [PATCH 1/7] Pass first test --- StringsAndTings.js | 22 +++++++++++++++------- StringsAndTings.test.js | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index 4fdca47..be4954e 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -1,27 +1,35 @@ class StringsAndTings { - + // @return string with identical content, and the first character capitalized - camelCase(str){ - return null; + camelCase(str) { + let result = ""; + for (let i = 0; i < str.length; i++) { + if (i == 0 || str[i - 1] == " ") { + result += str[i].toUpperCase(); + } else { + result += str[i]; + } + } + return result; } //@return string with identical contents, with each word individually in reverse order - reverseString(str){ + reverseString(str) { return null; } // @return string with identical contents, in reverse order, with first character capitalized - reverseThenCamelCase(str){ + reverseThenCamelCase(str) { return null; } // @return string with identical contents excluding first and last character - removeFirstAndLastCharacter(str){ + removeFirstAndLastCharacter(str) { return null; } // @return string with identical characters, each with opposite casing - invertCasing(str){ + invertCasing(str) { return null; } } diff --git a/StringsAndTings.test.js b/StringsAndTings.test.js index 689b63d..9329031 100644 --- a/StringsAndTings.test.js +++ b/StringsAndTings.test.js @@ -8,7 +8,7 @@ test("camelCaseTest", () => { let input = "she sells sea shells"; let expected = "She Sells Sea Shells"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.camelCase(input); expect(actual).toEqual(expected); }); From 91e96d7f613252acf4c4bdfa6fe24f07b9ae0025 Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:02:48 -0500 Subject: [PATCH 2/7] Fix all tests --- StringsAndTings.js | 6 +++++- StringsAndTings.test.js | 10 +++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index be4954e..fda5254 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -14,7 +14,11 @@ class StringsAndTings { } //@return string with identical contents, with each word individually in reverse order - reverseString(str) { + reverseString() { + return null; + } + + reverseWords(str) { return null; } diff --git a/StringsAndTings.test.js b/StringsAndTings.test.js index 9329031..a5d4a75 100644 --- a/StringsAndTings.test.js +++ b/StringsAndTings.test.js @@ -19,7 +19,7 @@ test("reverseTest", () => { let input = "she sells sea shells"; let expected = "sllehs aes slles ehs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.reverseString(input); expect(actual).toEqual(expected); }); @@ -30,7 +30,7 @@ test("reverseWordsTest", () => { let input = "she sells sea shells"; let expected = "ehs slles aes sllehs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.camelCase(input); expect(actual).toEqual(expected); }); @@ -41,7 +41,7 @@ test("reverseThenCamelCaseTest", () => { let input = "she sells sea shells"; let expected = "Sllehs Aes Slles Ehs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.reverseThenCamelCase(input); expect(actual).toEqual(expected); }); @@ -52,7 +52,7 @@ test("removeFirstAndLastCharacterTest", () => { let input = "she sells sea shells"; let expected = "he sells sea shell"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.removeFirstAndLastCharacter(input); expect(actual).toEqual(expected); }); @@ -64,7 +64,7 @@ test("invertCasingTest1", () => { let input = "shE sells SEA sHeLlS"; let expected = "SHe SELLS sea ShElLs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.invertCasing(input); expect(actual).toEqual(expected); }); From 0255bbbe942cbee541e3c67c2ddcf59b9204f8a4 Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:30:30 -0500 Subject: [PATCH 3/7] Complete reverseString() and fix one more test --- StringsAndTings.js | 16 +++++++++++++--- StringsAndTings.test.js | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index fda5254..e0d37bf 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -13,9 +13,19 @@ class StringsAndTings { return result; } - //@return string with identical contents, with each word individually in reverse order - reverseString() { - return null; + reverseString(str) { + // Strings in js are immutable. Need to split it into a new array to modify it. + let result = str.split(""); + let length = result.length; + // You would think you'd need to do -1 here, but that does not work. This method seems to work for even and odd lengthed inputs. + const halfIndex = Math.floor(length / 2); + for (let i = 0; i < halfIndex; i++) { + let rightLetter = result[length - i - 1]; + result[length - i - 1] = result[i]; + result[i] = rightLetter; + } + result = result.join(""); + return result.toString(); } reverseWords(str) { diff --git a/StringsAndTings.test.js b/StringsAndTings.test.js index a5d4a75..31948d2 100644 --- a/StringsAndTings.test.js +++ b/StringsAndTings.test.js @@ -30,7 +30,7 @@ test("reverseWordsTest", () => { let input = "she sells sea shells"; let expected = "ehs slles aes sllehs"; - let actual = stringsAndTings.camelCase(input); + let actual = stringsAndTings.reverseWords(input); expect(actual).toEqual(expected); }); From 2b01e1e613e26fa37fb414961db2b51a857b5e6c Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:37:16 -0500 Subject: [PATCH 4/7] Complete reverseWords() --- StringsAndTings.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index e0d37bf..5e34457 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -17,9 +17,9 @@ class StringsAndTings { // Strings in js are immutable. Need to split it into a new array to modify it. let result = str.split(""); let length = result.length; - // You would think you'd need to do -1 here, but that does not work. This method seems to work for even and odd lengthed inputs. - const halfIndex = Math.floor(length / 2); - for (let i = 0; i < halfIndex; i++) { + // You would think you'd need to subtract 1 from here, but that does not work. This method seems to work for even and odd lengthed inputs. + const halfLength = Math.floor(length / 2); + for (let i = 0; i < halfLength; i++) { let rightLetter = result[length - i - 1]; result[length - i - 1] = result[i]; result[i] = rightLetter; @@ -29,7 +29,13 @@ class StringsAndTings { } reverseWords(str) { - return null; + let words = str.split(" "); + let result = ""; + for (let word of words) { + word = this.reverseString(word); + result += `${word} `; + } + return result.trim(); } // @return string with identical contents, in reverse order, with first character capitalized From 9335adb18c78d7ec251ad325a135b26173c3195e Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:46:16 -0500 Subject: [PATCH 5/7] Complete removeFirstAndLastCharacter() --- StringsAndTings.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index 5e34457..4304b08 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -29,8 +29,8 @@ class StringsAndTings { } reverseWords(str) { - let words = str.split(" "); let result = ""; + let words = str.split(" "); for (let word of words) { word = this.reverseString(word); result += `${word} `; @@ -40,12 +40,14 @@ class StringsAndTings { // @return string with identical contents, in reverse order, with first character capitalized reverseThenCamelCase(str) { - return null; + const reversedStr = this.reverseString(str); + return this.camelCase(reversedStr); } // @return string with identical contents excluding first and last character removeFirstAndLastCharacter(str) { - return null; + // Use str.length - 1 because it returns the value *up to* that index, not *at* that index. So return value up to the very last index. + return str.substring(1, str.length - 1) } // @return string with identical characters, each with opposite casing From ca5294bfd43c31d801bc3dfad049a2df97eb34b4 Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:50:14 -0500 Subject: [PATCH 6/7] Complete all functions and pass all tests --- StringsAndTings.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index 4304b08..8c18b04 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -52,7 +52,15 @@ class StringsAndTings { // @return string with identical characters, each with opposite casing invertCasing(str) { - return null; + let result = ""; + for (let c of str) { + if (c == c.toUpperCase()) { + result += c.toLowerCase(); + } else { + result += c.toUpperCase(); + } + } + return result; } } From fd7800e828868fbc2417e9fc90ee22513bdb42be Mon Sep 17 00:00:00 2001 From: michael-mcmasters Date: Wed, 16 Dec 2020 12:54:06 -0500 Subject: [PATCH 7/7] Clean up reverseString() method --- StringsAndTings.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/StringsAndTings.js b/StringsAndTings.js index 8c18b04..47e45e6 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -24,8 +24,7 @@ class StringsAndTings { result[length - i - 1] = result[i]; result[i] = rightLetter; } - result = result.join(""); - return result.toString(); + return result.join("").toString(); } reverseWords(str) {