From defa5453410fa2ac44bd234edebd520dd1ab9d60 Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa <46996545+kwanda9700@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:49:39 +0200 Subject: [PATCH 01/10] Update exercise.js --- 1-exercises/A-undefined/exercise.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/1-exercises/A-undefined/exercise.js b/1-exercises/A-undefined/exercise.js index 0acfc78d..bf462353 100644 --- a/1-exercises/A-undefined/exercise.js +++ b/1-exercises/A-undefined/exercise.js @@ -12,6 +12,7 @@ // Example 1 let a; console.log(a); +// a is declared but has no value given to it // Example 2 @@ -22,6 +23,8 @@ function sayHello() { let hello = sayHello(); console.log(hello); +// the function sayHello() is not returning anything + // Example 3 function sayHelloToUser(user) { @@ -29,8 +32,10 @@ function sayHelloToUser(user) { } sayHelloToUser(); +// the sayHelloUser() function is expecting 1 argument to be passed and none is passed. // Example 4 let arr = [1,2,3]; console.log(arr[3]); +// the array index passed on the console log is non existent because the array has indexes of 0,1 and 2 not 3 From 5e71cb87e5ea6e9237703e5a4dcfa78d108c4e1f Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa <46996545+kwanda9700@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:52:32 +0200 Subject: [PATCH 02/10] Update exercise.js --- 1-exercises/B-while-loop/exercise.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index b459888f..fe511b70 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -7,6 +7,8 @@ function evenNumbers(n) { // TODO +if(n % 2 === 0){ +console.log(n); } evenNumbers(3); // should output 0,2,4 From 472beb083ad361818c17c44f46fe535b201b5aa1 Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Tue, 5 Jul 2022 19:47:16 +0200 Subject: [PATCH 03/10] update --- 1-exercises/B-while-loop/exercise.js | 16 ++++++++--- .../C-while-loop-with-array/exercise.js | 27 ++++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index fe511b70..a26ca5d4 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -6,11 +6,19 @@ */ function evenNumbers(n) { - // TODO -if(n % 2 === 0){ -console.log(n); + let i = 0; + let numList = []; + while (numList.length < n) { + if (n > 0) { + if (i % 2 === 0) { + numList.push(i); + } + } + i++; + } + return numList.toString(); } evenNumbers(3); // should output 0,2,4 evenNumbers(0); // should output nothing -evenNumbers(10); // should output 0,2,4,6,8,10,12,14,16,18 +evenNumbers(-10); // should output 0,2,4,6,8,10,12,14,16,18 diff --git a/1-exercises/C-while-loop-with-array/exercise.js b/1-exercises/C-while-loop-with-array/exercise.js index d584cd75..1ddca431 100644 --- a/1-exercises/C-while-loop-with-array/exercise.js +++ b/1-exercises/C-while-loop-with-array/exercise.js @@ -5,19 +5,26 @@ */ const BIRTHDAYS = [ - "January 7th", - "February 12th", - "April 3rd", - "April 5th", - "May 3rd", - "July 11th", - "July 17th", - "September 28th", - "November 15th" + "January 7th", + "February 12th", + "April 3rd", + "April 5th", + "May 3rd", + "July 11th", + "July 17th", + "September 28th", + "November 15th", ]; function findFirstJulyBDay(birthdays) { - // TODO + arrayLength = birthdays.length; + i = 0; + while (i < arrayLength) { + if (birthdays[i].includes("July")) { + return birthdays[i]; + } + i++; + } } console.log(findFirstJulyBDay(BIRTHDAYS)); // should output "July 11th" From cb3f9340e5b2420960c9e69d0fef852ef777faeb Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Tue, 5 Jul 2022 20:58:31 +0200 Subject: [PATCH 04/10] update --- 1-exercises/B-while-loop/exercise.js | 10 ++++------ 1-exercises/D-do-while/exercise.js | 13 +++++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index a26ca5d4..a087b3e9 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -9,16 +9,14 @@ function evenNumbers(n) { let i = 0; let numList = []; while (numList.length < n) { - if (n > 0) { - if (i % 2 === 0) { - numList.push(i); - } + if (i % 2 === 0) { + numList.push(i); } i++; } - return numList.toString(); + console.log(numList.toString()); } evenNumbers(3); // should output 0,2,4 evenNumbers(0); // should output nothing -evenNumbers(-10); // should output 0,2,4,6,8,10,12,14,16,18 +evenNumbers(10); // should output 0,2,4,6,8,10,12,14,16,18 diff --git a/1-exercises/D-do-while/exercise.js b/1-exercises/D-do-while/exercise.js index f10d0764..6186d4e9 100644 --- a/1-exercises/D-do-while/exercise.js +++ b/1-exercises/D-do-while/exercise.js @@ -7,9 +7,18 @@ */ function evenNumbersSum(n) { - // TODO + let i = 0; + let sum = 0; + let num = 0; + + do { + sum += num; + num += 2; + i += 1; + } while (i < n); + return sum; } console.log(evenNumbersSum(3)); // should output 6 console.log(evenNumbersSum(0)); // should output 0 -console.log(evenNumbersSum(10)); // should output 90 \ No newline at end of file +console.log(evenNumbersSum(10)); // should output 90 From 28d6be72ba0d345bc31985d79c229f482d7b9adf Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Sat, 16 Jul 2022 11:55:23 +0200 Subject: [PATCH 05/10] update --- 1-exercises/E-for-loop/exercise1.js | 11 ++-- 1-exercises/E-for-loop/exercise2.js | 23 ++++----- 1-exercises/F-for-of-loop/exercise.js | 17 +++++-- 2-mandatory/1-weather-report.js | 72 ++++++++++++++------------- 2-mandatory/execrise.js | 33 ++++++++++++ 5 files changed, 99 insertions(+), 57 deletions(-) create mode 100644 2-mandatory/execrise.js diff --git a/1-exercises/E-for-loop/exercise1.js b/1-exercises/E-for-loop/exercise1.js index db5fac64..5b431ac0 100644 --- a/1-exercises/E-for-loop/exercise1.js +++ b/1-exercises/E-for-loop/exercise1.js @@ -4,11 +4,14 @@ Change the while loop below into a for loop. */ - // Change the below code to use a for loop instead of a while loop. let i = 0; -while(i < 26) { - console.log(String.fromCharCode(97 + i)); - i++; +// while (i < 26) { +// console.log(String.fromCharCode(97 + i)); +// i++; +// } + +for (i; i < 26; i++) { + console.log(String.fromCharCode(97 + i)); } // The output shouldn't change. diff --git a/1-exercises/E-for-loop/exercise2.js b/1-exercises/E-for-loop/exercise2.js index 081002b2..f6a60029 100644 --- a/1-exercises/E-for-loop/exercise2.js +++ b/1-exercises/E-for-loop/exercise2.js @@ -11,22 +11,19 @@ */ const WRITERS = [ - "Virginia Woolf", - "Zadie Smith", - "Jane Austen", - "Bell Hooks", - "Yukiko Motoya" -] - -const AGES = [ - 59, - 40, - 41, - 63, - 49 + "Virginia Woolf", + "Zadie Smith", + "Jane Austen", + "Bell Hooks", + "Yukiko Motoya", ]; +const AGES = [59, 40, 41, 63, 49]; + // TODO - Write for loop code here +for (let i = 0; i < WRITERS.length; i++) { + console.log(`${WRITERS[i]} is ${AGES[i]} years old}`); +} /* The output should look something like this: diff --git a/1-exercises/F-for-of-loop/exercise.js b/1-exercises/F-for-of-loop/exercise.js index 65585c6a..22a58cd7 100644 --- a/1-exercises/F-for-of-loop/exercise.js +++ b/1-exercises/F-for-of-loop/exercise.js @@ -4,13 +4,20 @@ // TODO Use a for-of loop to output each of the tube stations below. let tubeStations = [ - "Aldgate", - "Baker Street", - "Picadilly Circus", - "Oxford Street", - "Tottenham Court Road" + "Aldgate", + "Baker Street", + "Picadilly Circus", + "Oxford Street", + "Tottenham Court Road", ]; +for (let i = 0; i < tubeStations.length; i++) { + console.log(tubeStations[i]); +} // TODO Use a for-of loop to capitalise and output each letter in the string seperately. let str = "codeyourfuture"; + +for (let i = 0; i < str.length; i++) { + console.log(str[i]); +} diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index dcc2bdb0..ebb740e3 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -11,53 +11,55 @@ - Hint: you can call the temperatureService function from your function */ +let temperatureReport = []; + function getTemperatureReport(cities) { - // TODO + // TODO + for (let i = 0; i < cities.length; i++) { + temperatureReport.push( + `The temperature in ${cities[i]} is ${temperatureService( + cities[i] + )} degrees` + ); + } + return temperatureReport; } - /* ======= TESTS - DO NOT MODIFY ===== */ function temperatureService(city) { - let temparatureMap = new Map(); - - temparatureMap.set('London', 10); - temparatureMap.set('Paris', 12); - temparatureMap.set('Barcelona', 17); - temparatureMap.set('Dubai', 27); - temparatureMap.set('Mumbai', 29); - temparatureMap.set('São Paulo', 23); - temparatureMap.set('Lagos', 33); - - return temparatureMap.get(city); + let temparatureMap = new Map(); + + temparatureMap.set("London", 10); + temparatureMap.set("Paris", 12); + temparatureMap.set("Barcelona", 17); + temparatureMap.set("Dubai", 27); + temparatureMap.set("Mumbai", 29); + temparatureMap.set("São Paulo", 23); + temparatureMap.set("Lagos", 33); + + return temparatureMap.get(city); } test("should return a temperature report for the user's cities", () => { - let usersCities = [ - "London", - "Paris", - "São Paulo" - ] - - expect(getTemperatureReport(usersCities)).toEqual([ - "The temperature in London is 10 degrees", - "The temperature in Paris is 12 degrees", - "The temperature in São Paulo is 23 degrees" - ]); + let usersCities = ["London", "Paris", "São Paulo"]; + + expect(getTemperatureReport(usersCities)).toEqual([ + "The temperature in London is 10 degrees", + "The temperature in Paris is 12 degrees", + "The temperature in São Paulo is 23 degrees", + ]); }); test("should return a temperature report for the user's cities (alternate input)", () => { - let usersCities = [ - "Barcelona", - "Dubai" - ] - - expect(getTemperatureReport(usersCities)).toEqual([ - "The temperature in Barcelona is 17 degrees", - "The temperature in Dubai is 27 degrees" - ]); + let usersCities = ["Barcelona", "Dubai"]; + + expect(getTemperatureReport(usersCities)).toEqual([ + "The temperature in Barcelona is 17 degrees", + "The temperature in Dubai is 27 degrees", + ]); }); test("should return an empty array if the user hasn't selected any cities", () => { - expect(getTemperatureReport([])).toEqual([]); -}); \ No newline at end of file + expect(getTemperatureReport([])).toEqual([]); +}); diff --git a/2-mandatory/execrise.js b/2-mandatory/execrise.js new file mode 100644 index 00000000..c75baeb1 --- /dev/null +++ b/2-mandatory/execrise.js @@ -0,0 +1,33 @@ +let temperatureReport = []; + +function getTemperatureReport(cities) { + // TODO + for (let i = 0; i < cities.length; i++) { + temperatureReport.push( + `The temperature in ${cities[i]} is ${temperatureService( + cities[i] + )} degrees` + ); + } + return temperatureReport; +} + +function temperatureService(city) { + let temparatureMap = new Map(); + + temparatureMap.set("London", 10); + temparatureMap.set("Paris", 12); + temparatureMap.set("Barcelona", 17); + temparatureMap.set("Dubai", 27); + temparatureMap.set("Mumbai", 29); + temparatureMap.set("São Paulo", 23); + temparatureMap.set("Lagos", 33); + + return temparatureMap.get(city); +} + +let usersCities = ["London", "Paris", "São Paulo"]; + +let output = getTemperatureReport(usersCities); + +console.log(output); From 43e6c73a007656ec9b870420c076cb112db48d30 Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Sat, 16 Jul 2022 11:55:41 +0200 Subject: [PATCH 06/10] Delete execrise.js --- 2-mandatory/execrise.js | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 2-mandatory/execrise.js diff --git a/2-mandatory/execrise.js b/2-mandatory/execrise.js deleted file mode 100644 index c75baeb1..00000000 --- a/2-mandatory/execrise.js +++ /dev/null @@ -1,33 +0,0 @@ -let temperatureReport = []; - -function getTemperatureReport(cities) { - // TODO - for (let i = 0; i < cities.length; i++) { - temperatureReport.push( - `The temperature in ${cities[i]} is ${temperatureService( - cities[i] - )} degrees` - ); - } - return temperatureReport; -} - -function temperatureService(city) { - let temparatureMap = new Map(); - - temparatureMap.set("London", 10); - temparatureMap.set("Paris", 12); - temparatureMap.set("Barcelona", 17); - temparatureMap.set("Dubai", 27); - temparatureMap.set("Mumbai", 29); - temparatureMap.set("São Paulo", 23); - temparatureMap.set("Lagos", 33); - - return temparatureMap.get(city); -} - -let usersCities = ["London", "Paris", "São Paulo"]; - -let output = getTemperatureReport(usersCities); - -console.log(output); From 363e9b413337991754d1e67d6fab3e131d272fe0 Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Thu, 21 Jul 2022 17:07:47 +0200 Subject: [PATCH 07/10] update --- 2-mandatory/1-weather-report.js | 10 +-- 2-mandatory/2-retrying-random-numbers.js | 21 +++--- 2-mandatory/3-financial-times.js | 87 ++++++++++++++++-------- 2-mandatory/4-stocks.js | 76 ++++++++++++++------- 4 files changed, 128 insertions(+), 66 deletions(-) diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index ebb740e3..e2b29d22 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -15,13 +15,13 @@ let temperatureReport = []; function getTemperatureReport(cities) { // TODO - for (let i = 0; i < cities.length; i++) { + let temperatureReport = []; + cities.forEach((cityName) => { + const cityTemp = temperatureService(cityName); temperatureReport.push( - `The temperature in ${cities[i]} is ${temperatureService( - cities[i] - )} degrees` + "The temperature in " + cityName + " is " + cityTemp + " degrees" ); - } + }); return temperatureReport; } diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 10aab37d..a6d004bc 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -5,20 +5,25 @@ // This function shouldn't be changed function generateRandomNumber() { - console.log("Generating number..."); - return Math.round(Math.random() * 100); + console.log("Generating number..."); + return Math.round(Math.random() * 100); } function getRandomNumberGreaterThan50() { - // TODO - implement using a do-while loop + // TODO - implement using a do-while loop + num = 0; + do { + num = generateRandomNumber(); + } while (num <= 50); + return num; } /* ======= TESTS - DO NOT MODIFY ===== */ test("Returned value should always be greater than 50", () => { - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); }); diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index 2ce6fb73..9ad4309a 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -5,7 +5,12 @@ Implement the function below, which will return a new array containing only article titles which will fit. */ function potentialHeadlines(allArticleTitles) { - // TODO + // TODO + let potentialArticles = allArticleTitles.filter( + (element) => element.length <= 65 + ); + + return potentialArticles; } /* @@ -14,7 +19,13 @@ function potentialHeadlines(allArticleTitles) { (you can assume words will always be seperated by a space) */ function titleWithFewestWords(allArticleTitles) { - // TODO + // TODO + for (let shortestTitle of allArticleTitles) { + let fewestWordTitle = shortestTitle.split(" "); + if (fewestWordTitle.length <= 7) { + return shortestTitle; + } + } } /* @@ -23,7 +34,15 @@ function titleWithFewestWords(allArticleTitles) { (Hint: remember that you can also loop through the characters of a string if you need to) */ function headlinesWithNumbers(allArticleTitles) { - // TODO + // TODO + let titleWithNumArr = []; + for (let title of allArticleTitles) { + let reg = /\d/; + if (reg.test(title)) { + titleWithNumArr.push(title); + } + } + return titleWithNumArr; } /* @@ -31,51 +50,61 @@ function headlinesWithNumbers(allArticleTitles) { Implement the function below to return this number - rounded to the nearest integer. */ function averageNumberOfCharacters(allArticleTitles) { - // TODO + // TODO + let total = 0; + allArticleTitles.forEach((title) => { + total += title.length; + }); + avgNumChar = Math.round(total / allArticleTitles.length); + return avgNumChar; } - - /* ======= List of Articles - DO NOT MODIFY ===== */ const ARTICLE_TITLES = [ - "Streaming wars drive media groups to spend more than $100bn on new content", - "Amazon Prime Video India country head: streaming is driving a TV revolution", - "Aerospace chiefs prepare for bumpy ride in recovery of long-haul flights", - "British companies look to muscle in on US retail investing boom", - "Libor to take firm step towards oblivion on New Year's Day", - "Audit profession unattractive to new recruits, says PwC boss", - "Chinese social media users blast Elon Musk over near miss in space", - "Companies raise over $12tn in 'blockbuster' year for global capital markets", - "The three questions that dominate investment", - "Brussels urges Chile's incoming president to endorse EU trade deal", + "Streaming wars drive media groups to spend more than $100bn on new content", + "Amazon Prime Video India country head: streaming is driving a TV revolution", + "Aerospace chiefs prepare for bumpy ride in recovery of long-haul flights", + "British companies look to muscle in on US retail investing boom", + "Libor to take firm step towards oblivion on New Year's Day", + "Audit profession unattractive to new recruits, says PwC boss", + "Chinese social media users blast Elon Musk over near miss in space", + "Companies raise over $12tn in 'blockbuster' year for global capital markets", + "The three questions that dominate investment", + "Brussels urges Chile's incoming president to endorse EU trade deal", ]; /* ======= TESTS - DO NOT MODIFY ===== */ test("should only return potential headlines", () => { - expect(new Set(potentialHeadlines(ARTICLE_TITLES))).toEqual(new Set([ - "British companies look to muscle in on US retail investing boom", - "Libor to take firm step towards oblivion on New Year's Day", - "Audit profession unattractive to new recruits, says PwC boss", - "The three questions that dominate investment" - ])); + expect(new Set(potentialHeadlines(ARTICLE_TITLES))).toEqual( + new Set([ + "British companies look to muscle in on US retail investing boom", + "Libor to take firm step towards oblivion on New Year's Day", + "Audit profession unattractive to new recruits, says PwC boss", + "The three questions that dominate investment", + ]) + ); }); test("should return an empty array for empty input", () => { - expect(potentialHeadlines([])).toEqual([]); + expect(potentialHeadlines([])).toEqual([]); }); test("should return the title with the fewest words", () => { - expect(titleWithFewestWords(ARTICLE_TITLES)).toEqual("The three questions that dominate investment"); + expect(titleWithFewestWords(ARTICLE_TITLES)).toEqual( + "The three questions that dominate investment" + ); }); test("should only return headlines containing numbers", () => { - expect(new Set(headlinesWithNumbers(ARTICLE_TITLES))).toEqual(new Set([ - "Streaming wars drive media groups to spend more than $100bn on new content", - "Companies raise over $12tn in 'blockbuster' year for global capital markets" - ])); + expect(new Set(headlinesWithNumbers(ARTICLE_TITLES))).toEqual( + new Set([ + "Streaming wars drive media groups to spend more than $100bn on new content", + "Companies raise over $12tn in 'blockbuster' year for global capital markets", + ]) + ); }); test("should return the average number of characters in a headline", () => { - expect(averageNumberOfCharacters(ARTICLE_TITLES)).toEqual(65); + expect(averageNumberOfCharacters(ARTICLE_TITLES)).toEqual(65); }); diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index 72d62f94..d4b8693a 100644 --- a/2-mandatory/4-stocks.js +++ b/2-mandatory/4-stocks.js @@ -11,11 +11,11 @@ const STOCKS = ["aapl", "msft", "amzn", "googl", "tsla"]; const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ - [179.19, 180.33, 176.28, 175.64, 172.99], // AAPL - [340.69, 342.45, 334.69, 333.20, 327.29], // MSFT - [3384.44, 3393.39, 3421.37, 3420.74, 3408.34], // AMZN - [2951.88, 2958.13, 2938.33, 2928.30, 2869.45], // GOOGL - [1101.30, 1093.94, 1067.00, 1008.87, 938.53] // TSLA + [179.19, 180.33, 176.28, 175.64, 172.99], // AAPL + [340.69, 342.45, 334.69, 333.2, 327.29], // MSFT + [3384.44, 3393.39, 3421.37, 3420.74, 3408.34], // AMZN + [2951.88, 2958.13, 2938.33, 2928.3, 2869.45], // GOOGL + [1101.3, 1093.94, 1067.0, 1008.87, 938.53], // TSLA ]; /* @@ -34,7 +34,17 @@ const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ Functions can help with this! */ function getAveragePrices(closingPricesForAllStocks) { - // TODO + // TODO + let result = []; + + for (let stockValue of closingPricesForAllStocks) { + let total = stockValue.reduce((oldPrice, newPrice) => { + return oldPrice + newPrice; + }); + let avgPrice = (total / 5).toFixed(2); + result.push(Number(avgPrice)); + } + return result; } /* @@ -48,7 +58,12 @@ function getAveragePrices(closingPricesForAllStocks) { The price change value should be rounded to 2 decimal places, and should be a number (not a string) */ function getPriceChanges(closingPricesForAllStocks) { - // TODO + // TODO + let result = []; + closingPricesForAllStocks.forEach((price) => { + result.push(Number((price[price.length - 1] - price[0]).toFixed(2))); + }); + return result; } /* @@ -64,31 +79,44 @@ function getPriceChanges(closingPricesForAllStocks) { The price should be shown with exactly 2 decimal places. */ function highestPriceDescriptions(closingPricesForAllStocks, stocks) { - // TODO + // TODO + let highest = []; + let financialReport = []; + let stockToUpper = []; + for (let i = 0; i < closingPricesForAllStocks.length; i++) { + highest.push(Math.max(...closingPricesForAllStocks[i])); + stockToUpper = stocks[i]; + financialReport.push( + "The highest price of " + + stockToUpper.toUpperCase() + + " in the last 5 days was " + + highest[i].toFixed(2) + ); + } + return financialReport; } - /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the average price for each stock", () => { - expect(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual( - [176.89, 335.66, 3405.66, 2929.22, 1041.93] - ); + expect(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual([ + 176.89, 335.66, 3405.66, 2929.22, 1041.93, + ]); }); test("should return the price change for each stock", () => { - expect(getPriceChanges(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual( - [-6.2, -13.4, 23.9, -82.43, -162.77] - ); + expect(getPriceChanges(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual([ + -6.2, -13.4, 23.9, -82.43, -162.77, + ]); }); test("should return a description of the highest price for each stock", () => { - expect(highestPriceDescriptions(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS, STOCKS)).toEqual( - [ - "The highest price of AAPL in the last 5 days was 180.33", - "The highest price of MSFT in the last 5 days was 342.45", - "The highest price of AMZN in the last 5 days was 3421.37", - "The highest price of GOOGL in the last 5 days was 2958.13", - "The highest price of TSLA in the last 5 days was 1101.30" - ] - ); + expect( + highestPriceDescriptions(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS, STOCKS) + ).toEqual([ + "The highest price of AAPL in the last 5 days was 180.33", + "The highest price of MSFT in the last 5 days was 342.45", + "The highest price of AMZN in the last 5 days was 3421.37", + "The highest price of GOOGL in the last 5 days was 2958.13", + "The highest price of TSLA in the last 5 days was 1101.30", + ]); }); From 55506c82c9a330fbad32fb0e3288325a646686bd Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Thu, 21 Jul 2022 18:31:50 +0200 Subject: [PATCH 08/10] update --- 3-extra/1-factorial.js | 13 ++- 3-extra/2-array-of-objects.js | 185 ++++++++++++++++++++++------------ 3-extra/exe.js | 124 +++++++++++++++++++++++ 3 files changed, 256 insertions(+), 66 deletions(-) create mode 100644 3-extra/exe.js diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 31f8052c..230a41dd 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -9,19 +9,24 @@ */ function factorial(input) { - // TODO + // TODO + let factor = 1; + for (let i = 1; i <= input; i++) { + factor *= i; + } + return factor; } /* ======= TESTS - DO NOT MODIFY ===== */ test("3! should be 6", () => { - expect(factorial(3)).toEqual(6); + expect(factorial(3)).toEqual(6); }); test("5! should be 120", () => { - expect(factorial(5)).toEqual(120); + expect(factorial(5)).toEqual(120); }); test("10! should be 3628800", () => { - expect(factorial(10)).toEqual(3628800); + expect(factorial(10)).toEqual(3628800); }); diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index ee57960f..dd27224c 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -11,72 +11,133 @@ */ function getHighestRatedInEachGenre(books) { - // TODO -} + // TODO + let children = []; + let cooking = []; + let nonFiction = []; + let rating = []; + let newRating = []; + for (let i = 0; i < books.length; i++) { + if (books[i].genre === "children") { + children.push(books[i]); + } else if (books[i].genre === "cooking") { + cooking.push(books[i]); + } else { + nonFiction.push(books[i]); + } + } + childrenRating = Object.keys(children).reduce( + (acc, curr) => + acc.rating + ? children[curr].rating > acc.rating + ? children[curr] + : acc + : children[curr], + {} + ); + cookingRating = Object.keys(cooking).reduce( + (acc, curr) => + acc.rating + ? cooking[curr].rating > acc.rating + ? cooking[curr] + : acc + : cooking[curr], + {} + ); + nonFictionRating = Object.keys(nonFiction).reduce( + (acc, curr) => + acc.rating + ? nonFiction[curr].rating > acc.rating + ? nonFiction[curr] + : acc + : nonFiction[curr], + {} + ); + + let newCookingRating = Object.keys(cookingRating).map(function (key) { + return cookingRating[key]; + }); + let newChildrenRating = Object.keys(childrenRating).map(function (key) { + return childrenRating[key]; + }); + let newNonFictionRating = Object.keys(nonFictionRating).map(function (key) { + return nonFictionRating[key]; + }); + + rating = newNonFictionRating[0].concat( + ",", + newChildrenRating[0], + ",", + newCookingRating[0] + ); + newRating = rating.split(","); + + return newRating; +} /* ======= Book data - DO NOT MODIFY ===== */ const BOOKS = [ - { - title: "The Lion, the Witch and the Wardrobe", - genre: "children", - rating: 4.7 - }, - { - title: "Sapiens: A Brief History of Humankind", - genre: "non-fiction", - rating: 4.7 - }, - { - title: "Nadiya's Fast Flavours", - genre: "cooking", - rating: 4.7 - }, - { - title: "Harry Potter and the Philosopher's Stone", - genre: "children", - rating: 4.8 - }, - { - title: "A Life on Our Planet", - genre: "non-fiction", - rating: 4.8 - }, - { - title: "Dishoom: The first ever cookbook from the much-loved Indian restaurant", - genre: "cooking", - rating: 4.85 - }, - { - title: "Gangsta Granny Strikes Again!", - genre: "children", - rating: 4.9 - }, - { - title: "Diary of a Wimpy Kid", - genre: "children", - rating: 4.6 - }, - { - title: "BOSH!: Simple recipes. Unbelievable results. All plants.", - genre: "cooking", - rating: 4.6 - }, - { - title: "The Book Your Dog Wishes You Would Read", - genre: "non-fiction", - rating: 4.85 - }, -] - + { + title: "The Lion, the Witch and the Wardrobe", + genre: "children", + rating: 4.7, + }, + { + title: "Sapiens: A Brief History of Humankind", + genre: "non-fiction", + rating: 4.7, + }, + { + title: "Nadiya's Fast Flavours", + genre: "cooking", + rating: 4.7, + }, + { + title: "Harry Potter and the Philosopher's Stone", + genre: "children", + rating: 4.8, + }, + { + title: "A Life on Our Planet", + genre: "non-fiction", + rating: 4.8, + }, + { + title: + "Dishoom: The first ever cookbook from the much-loved Indian restaurant", + genre: "cooking", + rating: 4.85, + }, + { + title: "Gangsta Granny Strikes Again!", + genre: "children", + rating: 4.9, + }, + { + title: "Diary of a Wimpy Kid", + genre: "children", + rating: 4.6, + }, + { + title: "BOSH!: Simple recipes. Unbelievable results. All plants.", + genre: "cooking", + rating: 4.6, + }, + { + title: "The Book Your Dog Wishes You Would Read", + genre: "non-fiction", + rating: 4.85, + }, +]; /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the highest rated book in each genre", () => { - expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual(new Set( - [ - "The Book Your Dog Wishes You Would Read", - "Gangsta Granny Strikes Again!", - "Dishoom: The first ever cookbook from the much-loved Indian restaurant" - ] - )); -}); \ No newline at end of file + expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual( + new Set([ + "The Book Your Dog Wishes You Would Read", + "Gangsta Granny Strikes Again!", + "Dishoom: The first ever cookbook from the much-loved Indian restaurant", + ]) + ); +}); diff --git a/3-extra/exe.js b/3-extra/exe.js new file mode 100644 index 00000000..26e626d7 --- /dev/null +++ b/3-extra/exe.js @@ -0,0 +1,124 @@ +/* ======= Book data - DO NOT MODIFY ===== */ +const BOOKS = [ + { + title: "The Lion, the Witch and the Wardrobe", + genre: "children", + rating: 4.7, + }, + { + title: "Sapiens: A Brief History of Humankind", + genre: "non-fiction", + rating: 4.7, + }, + { + title: "Nadiya's Fast Flavours", + genre: "cooking", + rating: 4.7, + }, + { + title: "Harry Potter and the Philosopher's Stone", + genre: "children", + rating: 4.8, + }, + { + title: "A Life on Our Planet", + genre: "non-fiction", + rating: 4.8, + }, + { + title: + "Dishoom: The first ever cookbook from the much-loved Indian restaurant", + genre: "cooking", + rating: 4.85, + }, + { + title: "Gangsta Granny Strikes Again!", + genre: "children", + rating: 4.9, + }, + { + title: "Diary of a Wimpy Kid", + genre: "children", + rating: 4.6, + }, + { + title: "BOSH!: Simple recipes. Unbelievable results. All plants.", + genre: "cooking", + rating: 4.6, + }, + { + title: "The Book Your Dog Wishes You Would Read", + genre: "non-fiction", + rating: 4.85, + }, +]; + +function getHighestRatedInEachGenre(books) { + // TODO + let children = []; + let cooking = []; + let nonFiction = []; + let rating = []; + let newRating = []; + for (let i = 0; i < books.length; i++) { + if (books[i].genre === "children") { + children.push(books[i]); + } else if (books[i].genre === "cooking") { + cooking.push(books[i]); + } else { + nonFiction.push(books[i]); + } + } + childrenRating = Object.keys(children).reduce( + (acc, curr) => + acc.rating + ? children[curr].rating > acc.rating + ? children[curr] + : acc + : children[curr], + {} + ); + cookingRating = Object.keys(cooking).reduce( + (acc, curr) => + acc.rating + ? cooking[curr].rating > acc.rating + ? cooking[curr] + : acc + : cooking[curr], + {} + ); + nonFictionRating = Object.keys(nonFiction).reduce( + (acc, curr) => + acc.rating + ? nonFiction[curr].rating > acc.rating + ? nonFiction[curr] + : acc + : nonFiction[curr], + {} + ); + + let newCookingRating = Object.keys(cookingRating).map(function (key) { + return cookingRating[key]; + }); + let newChildrenRating = Object.keys(childrenRating).map(function (key) { + return childrenRating[key]; + }); + let newNonFictionRating = Object.keys(nonFictionRating).map(function (key) { + return nonFictionRating[key]; + }); + + rating = newNonFictionRating[0].concat( + ",", + newChildrenRating[0], + ",", + newCookingRating[0] + ); + + newRating = rating.split(","); + + return newRating; +} + +arra = getHighestRatedInEachGenre(BOOKS); + +console.log(arra); From a3c5b3d2b053288188379abd251014d677806ee3 Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Thu, 21 Jul 2022 18:32:48 +0200 Subject: [PATCH 09/10] Delete exe.js --- 3-extra/exe.js | 124 ------------------------------------------------- 1 file changed, 124 deletions(-) delete mode 100644 3-extra/exe.js diff --git a/3-extra/exe.js b/3-extra/exe.js deleted file mode 100644 index 26e626d7..00000000 --- a/3-extra/exe.js +++ /dev/null @@ -1,124 +0,0 @@ -/* ======= Book data - DO NOT MODIFY ===== */ -const BOOKS = [ - { - title: "The Lion, the Witch and the Wardrobe", - genre: "children", - rating: 4.7, - }, - { - title: "Sapiens: A Brief History of Humankind", - genre: "non-fiction", - rating: 4.7, - }, - { - title: "Nadiya's Fast Flavours", - genre: "cooking", - rating: 4.7, - }, - { - title: "Harry Potter and the Philosopher's Stone", - genre: "children", - rating: 4.8, - }, - { - title: "A Life on Our Planet", - genre: "non-fiction", - rating: 4.8, - }, - { - title: - "Dishoom: The first ever cookbook from the much-loved Indian restaurant", - genre: "cooking", - rating: 4.85, - }, - { - title: "Gangsta Granny Strikes Again!", - genre: "children", - rating: 4.9, - }, - { - title: "Diary of a Wimpy Kid", - genre: "children", - rating: 4.6, - }, - { - title: "BOSH!: Simple recipes. Unbelievable results. All plants.", - genre: "cooking", - rating: 4.6, - }, - { - title: "The Book Your Dog Wishes You Would Read", - genre: "non-fiction", - rating: 4.85, - }, -]; - -function getHighestRatedInEachGenre(books) { - // TODO - let children = []; - let cooking = []; - let nonFiction = []; - let rating = []; - let newRating = []; - for (let i = 0; i < books.length; i++) { - if (books[i].genre === "children") { - children.push(books[i]); - } else if (books[i].genre === "cooking") { - cooking.push(books[i]); - } else { - nonFiction.push(books[i]); - } - } - childrenRating = Object.keys(children).reduce( - (acc, curr) => - acc.rating - ? children[curr].rating > acc.rating - ? children[curr] - : acc - : children[curr], - {} - ); - cookingRating = Object.keys(cooking).reduce( - (acc, curr) => - acc.rating - ? cooking[curr].rating > acc.rating - ? cooking[curr] - : acc - : cooking[curr], - {} - ); - nonFictionRating = Object.keys(nonFiction).reduce( - (acc, curr) => - acc.rating - ? nonFiction[curr].rating > acc.rating - ? nonFiction[curr] - : acc - : nonFiction[curr], - {} - ); - - let newCookingRating = Object.keys(cookingRating).map(function (key) { - return cookingRating[key]; - }); - let newChildrenRating = Object.keys(childrenRating).map(function (key) { - return childrenRating[key]; - }); - let newNonFictionRating = Object.keys(nonFictionRating).map(function (key) { - return nonFictionRating[key]; - }); - - rating = newNonFictionRating[0].concat( - ",", - newChildrenRating[0], - ",", - newCookingRating[0] - ); - - newRating = rating.split(","); - - return newRating; -} - -arra = getHighestRatedInEachGenre(BOOKS); - -console.log(arra); From 97d0be4aae985d8461f0fb338a631292a60902fe Mon Sep 17 00:00:00 2001 From: Kwanda Silekwa Date: Thu, 21 Jul 2022 19:05:30 +0200 Subject: [PATCH 10/10] Update 3-fibonacci.js --- 3-extra/3-fibonacci.js | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/3-extra/3-fibonacci.js b/3-extra/3-fibonacci.js index 9ef9aec7..dcbfa1f6 100644 --- a/3-extra/3-fibonacci.js +++ b/3-extra/3-fibonacci.js @@ -14,24 +14,31 @@ */ function generateFibonacciSequence(n) { - // TODO + // TODO + let fibonacci = [0, 1]; + let result = []; + + for (let i = 2; i < n; i++) { + result = fibonacci[i - 2] + fibonacci[i - 1]; + fibonacci.push(result); + } + + return fibonacci; } /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the first 10 numbers in the Fibonacci Sequence", () => { - expect(generateFibonacciSequence(10)).toEqual( - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] - ); + expect(generateFibonacciSequence(10)).toEqual([ + 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, + ]); }); test("should return the first 5 numbers in the Fibonacci Sequence", () => { - expect(generateFibonacciSequence(5)).toEqual( - [0, 1, 1, 2, 3] - ); + expect(generateFibonacciSequence(5)).toEqual([0, 1, 1, 2, 3]); }); test("should return the first 15 numbers in the Fibonacci Sequence", () => { - expect(generateFibonacciSequence(15)).toEqual( - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377] - ); -}); \ No newline at end of file + expect(generateFibonacciSequence(15)).toEqual([ + 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, + ]); +});