diff --git a/01_helloWorld/helloWorld.js b/01_helloWorld/helloWorld.js index df27036..46569e0 100644 --- a/01_helloWorld/helloWorld.js +++ b/01_helloWorld/helloWorld.js @@ -1,5 +1,5 @@ -const helloWorld = function() { - return '' +const helloWorld = function () { + return "Hello, World!"; }; module.exports = helloWorld; diff --git a/02_repeatString/repeatString.js b/02_repeatString/repeatString.js index 4359bbe..ac87629 100644 --- a/02_repeatString/repeatString.js +++ b/02_repeatString/repeatString.js @@ -1,6 +1,14 @@ -const repeatString = function() { - +const repeatString = function (word, times) { + if (times < 0) return "ERROR"; + let myWord = ""; + if (times > 0) { + for (let i = 0; i < times; i++) { + myWord += word; + } + } + return myWord; }; +repeatString("hey", 0); // Do not edit below this line module.exports = repeatString; diff --git a/02_repeatString/repeatString.spec.js b/02_repeatString/repeatString.spec.js index 912ac20..8aee0f3 100644 --- a/02_repeatString/repeatString.spec.js +++ b/02_repeatString/repeatString.spec.js @@ -1,37 +1,39 @@ -const repeatString = require('./repeatString') +const repeatString = require("./repeatString"); -describe('repeatString', () => { - test('repeats the string', () => { - expect(repeatString('hey', 3)).toEqual('heyheyhey'); +describe("repeatString", () => { + test("repeats the string", () => { + expect(repeatString("hey", 3)).toEqual("heyheyhey"); }); - test.skip('repeats the string many times', () => { - expect(repeatString('hey', 10)).toEqual('heyheyheyheyheyheyheyheyheyhey'); + test("repeats the string many times", () => { + expect(repeatString("hey", 10)).toEqual("heyheyheyheyheyheyheyheyheyhey"); }); - test.skip('repeats the string 1 times', () => { - expect(repeatString('hey', 1)).toEqual('hey'); + test("repeats the string 1 times", () => { + expect(repeatString("hey", 1)).toEqual("hey"); }); - test.skip('repeats the string 0 times', () => { - expect(repeatString('hey', 0)).toEqual(''); + test("repeats the string 0 times", () => { + expect(repeatString("hey", 0)).toEqual(""); }); - test.skip('returns ERROR with negative numbers', () => { - expect(repeatString('hey', -1)).toEqual('ERROR'); + test("returns ERROR with negative numbers", () => { + expect(repeatString("hey", -1)).toEqual("ERROR"); }); - test.skip('repeats the string a random amount of times', function () { + test("repeats the string a random amount of times", function () { /*The number is generated by using Math.random to get a value from between 0 to 1, when this is multiplied by 1000 and rounded down with Math.floor it equals a number between 0 to 999 (this number will change everytime you run the test).*/ - // DO NOT use Math.floor(Math.random() * 1000) in your code, + // DO NOT use Math.floor(Math.random() * 1000) in your code, // this test generates a random number, then passes it into your code with a function parameter. // If this doesn't make sense, you should go read about functions here: https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/fundamentals-part-3 - const number = Math.floor(Math.random() * 1000) + const number = Math.floor(Math.random() * 1000); /*The .match(/((hey))/g).length is a regex that will count the number of heys in the result, which if your function works correctly will equal the number that was randomly generated. */ - expect(repeatString('hey', number).match(/((hey))/g).length).toEqual(number); + expect(repeatString("hey", number).match(/((hey))/g).length).toEqual( + number + ); }); - test.skip('works with blank strings', () => { - expect(repeatString('', 10)).toEqual(''); + test("works with blank strings", () => { + expect(repeatString("", 10)).toEqual(""); }); }); diff --git a/03_reverseString/reverseString.js b/03_reverseString/reverseString.js index f6790f0..2270495 100644 --- a/03_reverseString/reverseString.js +++ b/03_reverseString/reverseString.js @@ -1,5 +1,6 @@ -const reverseString = function() { - +const reverseString = function (word) { + const string = word.split("").reverse().join(""); + return string; }; // Do not edit below this line diff --git a/03_reverseString/reverseString.spec.js b/03_reverseString/reverseString.spec.js index 8adb887..0a39e16 100644 --- a/03_reverseString/reverseString.spec.js +++ b/03_reverseString/reverseString.spec.js @@ -1,18 +1,18 @@ -const reverseString = require('./reverseString') +const reverseString = require("./reverseString"); -describe('reverseString', () => { - test('reverses single word', () => { - expect(reverseString('hello')).toEqual('olleh'); +describe("reverseString", () => { + test("reverses single word", () => { + expect(reverseString("hello")).toEqual("olleh"); }); - test.skip('reverses multiple words', () => { - expect(reverseString('hello there')).toEqual('ereht olleh') - }) + test("reverses multiple words", () => { + expect(reverseString("hello there")).toEqual("ereht olleh"); + }); - test.skip('works with numbers and punctuation', () => { - expect(reverseString('123! abc!')).toEqual('!cba !321') - }) - test.skip('works with blank strings', () => { - expect(reverseString('')).toEqual('') - }) + test("works with numbers and punctuation", () => { + expect(reverseString("123! abc!")).toEqual("!cba !321"); + }); + test("works with blank strings", () => { + expect(reverseString("")).toEqual(""); + }); }); diff --git a/04_removeFromArray/removeFromArray.js b/04_removeFromArray/removeFromArray.js index 1bedeb0..6cccb82 100644 --- a/04_removeFromArray/removeFromArray.js +++ b/04_removeFromArray/removeFromArray.js @@ -1,5 +1,11 @@ -const removeFromArray = function() { - +const removeFromArray = function (array, ...members) { + let result = array; + members.map((member) => { + result = result.filter((i) => { + return member !== i; + }); + }); + return result; }; // Do not edit below this line diff --git a/04_removeFromArray/removeFromArray.spec.js b/04_removeFromArray/removeFromArray.spec.js index 21f34cf..ebce2bf 100644 --- a/04_removeFromArray/removeFromArray.spec.js +++ b/04_removeFromArray/removeFromArray.spec.js @@ -1,25 +1,25 @@ -const removeFromArray = require('./removeFromArray') +const removeFromArray = require("./removeFromArray"); -describe('removeFromArray', () => { - test('removes a single value', () => { +describe("removeFromArray", () => { + test("removes a single value", () => { expect(removeFromArray([1, 2, 3, 4], 3)).toEqual([1, 2, 4]); }); - test.skip('removes multiple values', () => { + test("removes multiple values", () => { expect(removeFromArray([1, 2, 3, 4], 3, 2)).toEqual([1, 4]); }); - test.skip('ignores non present values', () => { + test("ignores non present values", () => { expect(removeFromArray([1, 2, 3, 4], 7, "tacos")).toEqual([1, 2, 3, 4]); }); - test.skip('ignores non present values, but still works', () => { + test("ignores non present values, but still works", () => { expect(removeFromArray([1, 2, 3, 4], 7, 2)).toEqual([1, 3, 4]); }); - test.skip('can remove all values', () => { + test("can remove all values", () => { expect(removeFromArray([1, 2, 3, 4], 1, 2, 3, 4)).toEqual([]); }); - test.skip('works with strings', () => { + test("works with strings", () => { expect(removeFromArray(["hey", 2, 3, "ho"], "hey", 3)).toEqual([2, "ho"]); }); - test.skip('only removes same type', () => { + test("only removes same type", () => { expect(removeFromArray([1, 2, 3], "1", 3)).toEqual([1, 2]); }); }); diff --git a/05_sumAll/sumAll.js b/05_sumAll/sumAll.js index 00880c7..f0f37f3 100644 --- a/05_sumAll/sumAll.js +++ b/05_sumAll/sumAll.js @@ -1,5 +1,21 @@ -const sumAll = function() { +const sumAll = function (num1, num2) { + let result = 0; + // if (num1.typeof !== "number" || num2.typeof !== "number") return "ERROR"; + if (!Number.isInteger(num1) || !Number.isInteger(num2)) return "ERROR"; + if (num1 < 0 || num2 < 0) { + result = "ERROR"; + } else if (num1 > num2) { + for (let i = num2; i <= num1; i++) { + result += i; + } + } else if (num1 < num2) { + for (let i = num1; i <= num2; i++) { + result += i; + } + } + + return result; }; // Do not edit below this line diff --git a/05_sumAll/sumAll.spec.js b/05_sumAll/sumAll.spec.js index 1a9fb7c..91d5a27 100644 --- a/05_sumAll/sumAll.spec.js +++ b/05_sumAll/sumAll.spec.js @@ -1,22 +1,22 @@ -const sumAll = require('./sumAll') +const sumAll = require("./sumAll"); -describe('sumAll', () => { - test('sums numbers within the range', () => { +describe("sumAll", () => { + test("sums numbers within the range", () => { expect(sumAll(1, 4)).toEqual(10); }); - test.skip('works with large numbers', () => { + test("works with large numbers", () => { expect(sumAll(1, 4000)).toEqual(8002000); }); - test.skip('works with larger number first', () => { + test("works with larger number first", () => { expect(sumAll(123, 1)).toEqual(7626); }); - test.skip('returns ERROR with negative numbers', () => { - expect(sumAll(-10, 4)).toEqual('ERROR'); + test("returns ERROR with negative numbers", () => { + expect(sumAll(-10, 4)).toEqual("ERROR"); }); - test.skip('returns ERROR with non-number parameters', () => { - expect(sumAll(10, "90")).toEqual('ERROR'); + test("returns ERROR with non-number parameters", () => { + expect(sumAll(10, "90")).toEqual("ERROR"); }); - test.skip('returns ERROR with non-number parameters', () => { - expect(sumAll(10, [90, 1])).toEqual('ERROR'); + test("returns ERROR with non-number parameters", () => { + expect(sumAll(10, [90, 1])).toEqual("ERROR"); }); }); diff --git a/06_leapYears/leapYears.js b/06_leapYears/leapYears.js index 681eeef..88efa7e 100644 --- a/06_leapYears/leapYears.js +++ b/06_leapYears/leapYears.js @@ -1,5 +1,12 @@ -const leapYears = function() { - +const leapYears = function (year) { + if (year % 4 === 0 || year % 400 === 0) { + if (year % 100 === 0 && year % 400 !== 0) { + return false; + } + return true; + } else { + return false; + } }; // Do not edit below this line diff --git a/06_leapYears/leapYears.spec.js b/06_leapYears/leapYears.spec.js index 6fdaba9..d608639 100644 --- a/06_leapYears/leapYears.spec.js +++ b/06_leapYears/leapYears.spec.js @@ -1,22 +1,22 @@ -const leapYears = require('./leapYears') +const leapYears = require("./leapYears"); -describe('leapYears', () => { - test('works with non century years', () => { +describe("leapYears", () => { + test("works with non century years", () => { expect(leapYears(1996)).toBe(true); }); - test.skip('works with non century years', () => { + test("works with non century years", () => { expect(leapYears(1997)).toBe(false); }); - test.skip('works with ridiculously futuristic non century years', () => { + test("works with ridiculously futuristic non century years", () => { expect(leapYears(34992)).toBe(true); }); - test.skip('works with century years', () => { + test("works with century years", () => { expect(leapYears(1900)).toBe(false); }); - test.skip('works with century years', () => { + test("works with century years", () => { expect(leapYears(1600)).toBe(true); }); - test.skip('works with century years', () => { + test("works with century years", () => { expect(leapYears(700)).toBe(false); }); }); diff --git a/07_tempConversion/tempConversion.js b/07_tempConversion/tempConversion.js index 14153e0..79a9aaa 100644 --- a/07_tempConversion/tempConversion.js +++ b/07_tempConversion/tempConversion.js @@ -1,11 +1,17 @@ -const convertToCelsius = function() { +const convertToCelsius = function (fahrenheit) { + let result = (fahrenheit - 32) * (5 / 9); + result = Math.round(result * 10) / 10; + return result; }; -const convertToFahrenheit = function() { +const convertToFahrenheit = function (celsius) { + let result = celsius * (9 / 5) + 32; + result = Math.round(result * 10) / 10; + return result; }; // Do not edit below this line module.exports = { convertToCelsius, - convertToFahrenheit + convertToFahrenheit, }; diff --git a/07_tempConversion/tempConversion.spec.js b/07_tempConversion/tempConversion.spec.js index c4f9742..027b698 100644 --- a/07_tempConversion/tempConversion.spec.js +++ b/07_tempConversion/tempConversion.spec.js @@ -1,25 +1,25 @@ -const {convertToCelsius, convertToFahrenheit} = require('./tempConversion') +const { convertToCelsius, convertToFahrenheit } = require("./tempConversion"); -describe('convertToCelsius', () => { - test('works', () => { +describe("convertToCelsius", () => { + test("works", () => { expect(convertToCelsius(32)).toEqual(0); }); - test.skip('rounds to 1 decimal', () => { + test("rounds to 1 decimal", () => { expect(convertToCelsius(100)).toEqual(37.8); }); - test.skip('works with negatives', () => { + test("works with negatives", () => { expect(convertToCelsius(-100)).toEqual(-73.3); }); }); -describe('convertToFahrenheit', () => { - test.skip('works', () => { +describe("convertToFahrenheit", () => { + test("works", () => { expect(convertToFahrenheit(0)).toEqual(32); }); - test.skip('rounds to 1 decimal', () => { + test("rounds to 1 decimal", () => { expect(convertToFahrenheit(73.2)).toEqual(163.8); }); - test.skip('works with negatives', () => { + test("works with negatives", () => { expect(convertToFahrenheit(-10)).toEqual(14); }); }); diff --git a/08_calculator/calculator.js b/08_calculator/calculator.js index c22e8d2..591da6f 100644 --- a/08_calculator/calculator.js +++ b/08_calculator/calculator.js @@ -1,25 +1,39 @@ -const add = function() { - +const add = function (num1, num2) { + return num1 + num2; }; -const subtract = function() { - +const subtract = function (num1, num2) { + return num1 - num2; }; -const sum = function() { - +const sum = function (array) { + let result = 0; + array.map((i) => { + result += i; + }); + return result; }; -const multiply = function() { - +const multiply = function (array) { + let result = 0; + array.reduce((acc, val) => { + return (result = acc * val); + }); + return result; }; -const power = function() { - +const power = function (num1, num2) { + return Math.pow(num1, num2); }; -const factorial = function() { - +const factorial = function (number) { + if (number === 0) { + return 1; + } else if (number === 1) { + return 1; + } else { + return number * factorial(number - 1); + } }; // Do not edit below this line @@ -29,5 +43,5 @@ module.exports = { sum, multiply, power, - factorial + factorial, }; diff --git a/08_calculator/calculator.spec.js b/08_calculator/calculator.spec.js index 48b08c9..d7c0d63 100644 --- a/08_calculator/calculator.spec.js +++ b/08_calculator/calculator.spec.js @@ -1,77 +1,77 @@ -const calculator = require('./calculator'); +const calculator = require("./calculator"); -describe('add', () => { - test('adds 0 and 0', () => { +describe("add", () => { + test("adds 0 and 0", () => { expect(calculator.add(0, 0)).toBe(0); }); - test.skip('adds 2 and 2', () => { + test("adds 2 and 2", () => { expect(calculator.add(2, 2)).toBe(4); }); - test.skip('adds positive numbers', () => { + test("adds positive numbers", () => { expect(calculator.add(2, 6)).toBe(8); }); }); -describe('subtract', () => { - test.skip('subtracts numbers', () => { +describe("subtract", () => { + test("subtracts numbers", () => { expect(calculator.subtract(10, 4)).toBe(6); }); }); -describe('sum', () => { - test.skip('computes the sum of an empty array', () => { +describe("sum", () => { + test("computes the sum of an empty array", () => { expect(calculator.sum([])).toBe(0); }); - test.skip('computes the sum of an array of one number', () => { + test("computes the sum of an array of one number", () => { expect(calculator.sum([7])).toBe(7); }); - test.skip('computes the sum of an array of two numbers', () => { + test("computes the sum of an array of two numbers", () => { expect(calculator.sum([7, 11])).toBe(18); }); - test.skip('computes the sum of an array of many numbers', () => { + test("computes the sum of an array of many numbers", () => { expect(calculator.sum([1, 3, 5, 7, 9])).toBe(25); }); }); -describe('multiply', () => { - test.skip('multiplies two numbers', () => { +describe("multiply", () => { + test("multiplies two numbers", () => { expect(calculator.multiply([2, 4])).toBe(8); }); - test.skip('multiplies several numbers', () => { + test("multiplies several numbers", () => { expect(calculator.multiply([2, 4, 6, 8, 10, 12, 14])).toBe(645120); }); }); -describe('power', () => { - test.skip('raises one number to the power of another number', () => { +describe("power", () => { + test("raises one number to the power of another number", () => { expect(calculator.power(4, 3)).toBe(64); // 4 to third power is 64 }); }); -describe('factorial', () => { - test.skip('computes the factorial of 0', () => { +describe("factorial", () => { + test("computes the factorial of 0", () => { expect(calculator.factorial(0)).toBe(1); // 0! = 1 }); - test.skip('computes the factorial of 1', () => { + test("computes the factorial of 1", () => { expect(calculator.factorial(1)).toBe(1); }); - test.skip('computes the factorial of 2', () => { + test("computes the factorial of 2", () => { expect(calculator.factorial(2)).toBe(2); }); - test.skip('computes the factorial of 5', () => { + test("computes the factorial of 5", () => { expect(calculator.factorial(5)).toBe(120); }); - test.skip('computes the factorial of 10', () => { + test("computes the factorial of 10", () => { expect(calculator.factorial(10)).toBe(3628800); }); }); diff --git a/09_palindromes/palindromes.js b/09_palindromes/palindromes.js index 8d21018..43a84e9 100644 --- a/09_palindromes/palindromes.js +++ b/09_palindromes/palindromes.js @@ -1,5 +1,24 @@ -const palindromes = function () { - +const palindromes = function (string) { + let result = string + .toUpperCase() + .replace(/[_\W]+/g, "") + .split(" ") + .join("") + .split("") + .join(""); + let reverseResult = string + .toUpperCase() + .replace(/[_\W]+/g, "") + .split(" ") + .join("") + .split("") + .reverse() + .join(""); + if (result === reverseResult) { + return true; + } else { + return false; + } }; // Do not edit below this line diff --git a/09_palindromes/palindromes.spec.js b/09_palindromes/palindromes.spec.js index 90d53e4..d5cf1be 100644 --- a/09_palindromes/palindromes.spec.js +++ b/09_palindromes/palindromes.spec.js @@ -1,28 +1,30 @@ -const palindromes = require('./palindromes') +const palindromes = require("./palindromes"); -describe('palindromes', () => { - test('works with single words', () => { - expect(palindromes('racecar')).toBe(true); +describe("palindromes", () => { + test("works with single words", () => { + expect(palindromes("racecar")).toBe(true); }); - test.skip('works with punctuation ', () => { - expect(palindromes('racecar!')).toBe(true); + test("works with punctuation ", () => { + expect(palindromes("racecar!")).toBe(true); }); - test.skip('works with upper-case letters ', () => { - expect(palindromes('Racecar!')).toBe(true); + test("works with upper-case letters ", () => { + expect(palindromes("Racecar!")).toBe(true); }); - test.skip('works with multiple words', () => { - expect(palindromes('A car, a man, a maraca.')).toBe(true); + test("works with multiple words", () => { + expect(palindromes("A car, a man, a maraca.")).toBe(true); }); - test.skip('works with multiple words', () => { - expect(palindromes('Animal loots foliated detail of stool lamina.')).toBe(true); + test("works with multiple words", () => { + expect(palindromes("Animal loots foliated detail of stool lamina.")).toBe( + true + ); }); - test.skip('doesn\'t just always return true', () => { - expect(palindromes('ZZZZ car, a man, a maracaz.')).toBe(false); + test("doesn't just always return true", () => { + expect(palindromes("ZZZZ car, a man, a maracaz.")).toBe(false); }); - test.skip('works with numbers in a string', () => { - expect(palindromes('rac3e3car')).toBe(true); + test("works with numbers in a string", () => { + expect(palindromes("rac3e3car")).toBe(true); }); - test.skip('works with unevenly spaced numbers in a string', () => { - expect(palindromes('r3ace3car')).toBe(false); + test("works with unevenly spaced numbers in a string", () => { + expect(palindromes("r3ace3car")).toBe(false); }); }); diff --git a/11_getTheTitles/getTheTitles.js b/11_getTheTitles/getTheTitles.js index 74b04df..6c1b3b1 100644 --- a/11_getTheTitles/getTheTitles.js +++ b/11_getTheTitles/getTheTitles.js @@ -1,5 +1,9 @@ -const getTheTitles = function() { - +const getTheTitles = function (array) { + let result = []; + array.map((obj) => { + result.push(obj.title); + }); + return result; }; // Do not edit below this line diff --git a/11_getTheTitles/getTheTitles.spec.js b/11_getTheTitles/getTheTitles.spec.js index 945d9f0..e6a00f7 100644 --- a/11_getTheTitles/getTheTitles.spec.js +++ b/11_getTheTitles/getTheTitles.spec.js @@ -1,18 +1,18 @@ -const getTheTitles = require('./getTheTitles') +const getTheTitles = require("./getTheTitles"); -describe('getTheTitles', () => { - const books = [ - { - title: 'Book', - author: 'Name' - }, - { - title: 'Book2', - author: 'Name2' - } - ] +describe("getTheTitles", () => { + const books = [ + { + title: "Book", + author: "Name", + }, + { + title: "Book2", + author: "Name2", + }, + ]; - test('gets titles', () => { - expect(getTheTitles(books)).toEqual(['Book','Book2']); + test("gets titles", () => { + expect(getTheTitles(books)).toEqual(["Book", "Book2"]); }); }); diff --git a/12_findTheOldest/findTheOldest.js b/12_findTheOldest/findTheOldest.js index 366856a..3e3cc0f 100644 --- a/12_findTheOldest/findTheOldest.js +++ b/12_findTheOldest/findTheOldest.js @@ -1,5 +1,16 @@ -const findTheOldest = function() { +const findTheOldest = function (array) { + return array.reduce((prev, curr) => { + const prevAge = getAge(prev.yearOfBirth, prev.yearOfDeath); + const currentAge = getAge(curr.yearOfBirth, curr.yearOfDeath); + return prevAge < currentAge ? curr : prev; + }); +}; +const getAge = function (birth, death) { + if (!death) { + death = new Date().getFullYear(); + } + return death - birth; }; // Do not edit below this line diff --git a/12_findTheOldest/findTheOldest.spec.js b/12_findTheOldest/findTheOldest.spec.js index 732faaa..0d511d5 100644 --- a/12_findTheOldest/findTheOldest.spec.js +++ b/12_findTheOldest/findTheOldest.spec.js @@ -1,7 +1,7 @@ -const findTheOldest = require('./findTheOldest') +const findTheOldest = require("./findTheOldest"); -describe('findTheOldest', () => { - test('finds the person with the greatest age!', () => { +describe("findTheOldest", () => { + test("finds the person with the greatest age!", () => { const people = [ { name: "Carly", @@ -18,10 +18,10 @@ describe('findTheOldest', () => { yearOfBirth: 1912, yearOfDeath: 1941, }, - ] - expect(findTheOldest(people).name).toBe('Ray'); + ]; + expect(findTheOldest(people).name).toBe("Ray"); }); - test.skip('finds the person with the greatest age if someone is still living', () => { + test("finds the person with the greatest age if someone is still living", () => { const people = [ { name: "Carly", @@ -37,10 +37,10 @@ describe('findTheOldest', () => { yearOfBirth: 1912, yearOfDeath: 1941, }, - ] - expect(findTheOldest(people).name).toBe('Ray'); + ]; + expect(findTheOldest(people).name).toBe("Ray"); }); - test.skip('finds the person with the greatest age if the OLDEST is still living', () => { + test("finds the person with the greatest age if the OLDEST is still living", () => { const people = [ { name: "Carly", @@ -56,7 +56,7 @@ describe('findTheOldest', () => { yearOfBirth: 1912, yearOfDeath: 1941, }, - ] - expect(findTheOldest(people).name).toBe('Carly'); + ]; + expect(findTheOldest(people).name).toBe("Carly"); }); });