From cc972f70b9a7336c20f68d6c752e62dca14a0688 Mon Sep 17 00:00:00 2001 From: Chidimma Date: Sat, 13 Aug 2022 23:06:43 +0100 Subject: [PATCH 1/4] mandatory exercises completed --- 2-mandatory/1-weather-report.js | 3 +- 2-mandatory/2-retrying-random-numbers.js | 5 +- 2-mandatory/3-financial-times.js | 74 +++++++++++++++--------- 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index dcc2bdb0..038294dc 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -12,7 +12,8 @@ */ function getTemperatureReport(cities) { - // TODO +let cityTemperatures = cities.map(city => `The temperature in ${city} is ${temperatureService(city)} degrees`) +return cityTemperatures } diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 10aab37d..8dff642f 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -10,7 +10,10 @@ function generateRandomNumber() { } function getRandomNumberGreaterThan50() { - // TODO - implement using a do-while loop + do { + value = generateRandomNumber() + } while( value <= 50) + return value } /* ======= TESTS - DO NOT MODIFY ===== */ diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index 2ce6fb73..b5471615 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -5,7 +5,8 @@ Implement the function below, which will return a new array containing only article titles which will fit. */ function potentialHeadlines(allArticleTitles) { - // TODO + let selectedHeadings = allArticleTitles.filter(article => article.length <= 65); + return selectedHeadings; } /* @@ -14,7 +15,8 @@ function potentialHeadlines(allArticleTitles) { (you can assume words will always be seperated by a space) */ function titleWithFewestWords(allArticleTitles) { - // TODO + let smallestArticle = allArticleTitles.reduce((initial, next) => (initial.length < next.length)? initial : next); + return smallestArticle; } /* @@ -23,7 +25,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 + let selectedHeadings = allArticleTitles.filter((element) => { + for (let i = 0; i < element.length; i++) { + if (parseInt(element[i])) { + return true; + } + } + return false; + }); + return selectedHeadings; } /* @@ -31,51 +41,59 @@ function headlinesWithNumbers(allArticleTitles) { Implement the function below to return this number - rounded to the nearest integer. */ function averageNumberOfCharacters(allArticleTitles) { - // TODO -} + let totalCharacters = allArticleTitles.reduce((acc, curr) => acc + (curr.length), 0); + let average = totalCharacters / (allArticleTitles.length) + return Math.round(average); +} /* ======= 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); }); From e746b3b952a634eb1a89d6891144f8bf8c55c3e3 Mon Sep 17 00:00:00 2001 From: Chidimma Date: Sun, 14 Aug 2022 03:11:50 +0100 Subject: [PATCH 2/4] mandatory + stock completed --- 2-mandatory/4-stocks.js | 73 +++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index 72d62f94..8ce0325c 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 ]; /* @@ -33,8 +33,15 @@ const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ Solve the smaller problems, and then build those solutions back up to solve the larger problem. Functions can help with this! */ + function getAveragePrices(closingPricesForAllStocks) { - // TODO + const average = closingPricesForAllStocks.map((arr) => + arr.reduce((acc, curr) => acc + curr / arr.length, 0) + ); + + const roundedStockPrices = average.map((element) => parseFloat(element.toFixed(2))); + + return roundedStockPrices; } /* @@ -48,7 +55,13 @@ 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 + let changeInStocks = closingPricesForAllStocks.map( + (arr) => arr[arr.length - 1] - arr[0] + ); + + changeInStocks = changeInStocks.map((element) => parseFloat(element.toFixed(2))); + + return changeInStocks; } /* @@ -64,31 +77,43 @@ function getPriceChanges(closingPricesForAllStocks) { The price should be shown with exactly 2 decimal places. */ function highestPriceDescriptions(closingPricesForAllStocks, stocks) { - // TODO -} + let arrayOfHighestPrices = closingPricesForAllStocks.map((arr) => + arr.reduce((acc, curr) => { + return acc > curr ? acc : curr; + }) + ); + + let stocksDescription = []; + for (let i = 0; i< arrayOfHighestPrices.length; i++){ + stocksDescription.push( + `The highest price of ${(stocks[i]).toUpperCase()} in the last 5 days was ${(arrayOfHighestPrices[i]).toFixed(2)}` + ); + } + return stocksDescription +} /* ======= 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 223a5cf2e60db2d3b683ecc7713a9a2ce2f213fe Mon Sep 17 00:00:00 2001 From: Chidimma Date: Sun, 14 Aug 2022 14:32:02 +0100 Subject: [PATCH 3/4] exercises completed --- 1-exercises/A-undefined/exercise.js | 10 +++---- 1-exercises/B-while-loop/exercise.js | 18 +++++++++---- .../C-while-loop-with-array/exercise.js | 27 ++++++++++++------- 1-exercises/D-do-while/exercise.js | 14 ++++++++-- 1-exercises/E-for-loop/exercise1.js | 4 +-- 1-exercises/E-for-loop/exercise2.js | 4 ++- 1-exercises/F-for-of-loop/exercise.js | 7 +++++ 7 files changed, 58 insertions(+), 26 deletions(-) diff --git a/1-exercises/A-undefined/exercise.js b/1-exercises/A-undefined/exercise.js index 0acfc78d..f551d9b4 100644 --- a/1-exercises/A-undefined/exercise.js +++ b/1-exercises/A-undefined/exercise.js @@ -11,16 +11,16 @@ // Example 1 let a; -console.log(a); +console.log(a); // a variable was declared but not assigned any value // Example 2 function sayHello() { - let message = "Hello"; + let message = "Hello"; // when a function doesn't return anything } let hello = sayHello(); -console.log(hello); +console.log(hello); // invoking a function that doesn't return anything // Example 3 @@ -28,9 +28,9 @@ function sayHelloToUser(user) { console.log(`Hello ${user}`); } -sayHelloToUser(); +sayHelloToUser(); // a function declared with a parameter but doesn't receive any argument // Example 4 let arr = [1,2,3]; -console.log(arr[3]); +console.log(arr[3]); // the index is not contained in the array diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index b459888f..5e758ca5 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -5,10 +5,18 @@ The list of numbers should start with 0. n is being passed in as a parameter. */ -function evenNumbers(n) { - // TODO -} + function evenNumbers(n) { + let arrayOfEvenNumbers = []; + let i = 0; + while (n > arrayOfEvenNumbers.length) { + if (i % 2 === 0) { + arrayOfEvenNumbers.push(i); + } + i++; + } + console.log(arrayOfEvenNumbers); + } 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(0); // should output nothing + 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..f1d19be3 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 + let i = 0; + while (i < birthdays.length) { + let month = birthdays[i].substr(0, 3); + if (month === "Jul") { + return birthdays[i]; + } + i++; + } } console.log(findFirstJulyBDay(BIRTHDAYS)); // should output "July 11th" diff --git a/1-exercises/D-do-while/exercise.js b/1-exercises/D-do-while/exercise.js index f10d0764..118da126 100644 --- a/1-exercises/D-do-while/exercise.js +++ b/1-exercises/D-do-while/exercise.js @@ -7,9 +7,19 @@ */ function evenNumbersSum(n) { - // TODO + let i = 0; + const arrayEven = []; + do { + if (i % 2 === 0) { + arrayEven.push(i); + } + i++ + } while (n > arrayEven.length) + + let sum = arrayEven.reduce((acc, curr) => acc + curr, 0); + 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 diff --git a/1-exercises/E-for-loop/exercise1.js b/1-exercises/E-for-loop/exercise1.js index db5fac64..1f81ac9d 100644 --- a/1-exercises/E-for-loop/exercise1.js +++ b/1-exercises/E-for-loop/exercise1.js @@ -6,9 +6,7 @@ // Change the below code to use a for loop instead of a while loop. -let i = 0; -while(i < 26) { +for (let i = 0; i < 26; i++) { console.log(String.fromCharCode(97 + i)); - 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..00c06065 100644 --- a/1-exercises/E-for-loop/exercise2.js +++ b/1-exercises/E-for-loop/exercise2.js @@ -27,7 +27,9 @@ const AGES = [ ]; // 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..51af7934 100644 --- a/1-exercises/F-for-of-loop/exercise.js +++ b/1-exercises/F-for-of-loop/exercise.js @@ -11,6 +11,13 @@ let tubeStations = [ "Tottenham Court Road" ]; +for (stations of tubeStations){ + console.log(stations) +} + // TODO Use a for-of loop to capitalise and output each letter in the string seperately. let str = "codeyourfuture"; +for (char of str){ + console.log(char.toUpperCase()) +} From 5058b1bdeb8efdbbe93971f783f5e01bdfec3d7a Mon Sep 17 00:00:00 2001 From: Chidimma Date: Sun, 14 Aug 2022 20:35:49 +0100 Subject: [PATCH 4/4] extra exercises completed --- 3-extra/1-factorial.js | 6 +++++- 3-extra/2-array-of-objects.js | 23 +++++++++++++++++++++-- 3-extra/3-fibonacci.js | 11 ++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 31f8052c..7e40d8d9 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -9,7 +9,11 @@ */ function factorial(input) { - // TODO + let product = 1 + for (let i = 1; i <= input; i++){ + product *= i + } + return product } /* ======= TESTS - DO NOT MODIFY ===== */ diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index ee57960f..09ad9dac 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -11,8 +11,27 @@ */ function getHighestRatedInEachGenre(books) { - // TODO -} + let allArray = []; + + let children = books.filter((obj) => obj.genre === "children"); + children = children.reduce((result, curr) => + result.rating > curr.rating ? result : curr + ); + + let nonFiction = books.filter((obj) => obj.genre === "non-fiction"); + nonFiction = nonFiction.reduce((result, curr) => + result.rating > curr.rating ? result : curr + ); + + let cooking = books.filter((obj) => obj.genre === "cooking"); + cooking = cooking.reduce((result, curr) => + result.rating > curr.rating ? result : curr + ); + + allArray.push(children.title, nonFiction.title, cooking.title); + return allArray; +} + /* ======= Book data - DO NOT MODIFY ===== */ diff --git a/3-extra/3-fibonacci.js b/3-extra/3-fibonacci.js index 9ef9aec7..e84cd8b9 100644 --- a/3-extra/3-fibonacci.js +++ b/3-extra/3-fibonacci.js @@ -13,8 +13,17 @@ - the input n will be passed in to the function as an argument, and will be a number greater than 2 */ + function generateFibonacciSequence(n) { - // TODO + let i = 0; + let arrOfSequence = [0, 1] + while (n > arrOfSequence.length){ + arrOfSequence.push( (arrOfSequence[arrOfSequence.length - 1]) + arrOfSequence[arrOfSequence.length - 2]) + i++ + } + + return arrOfSequence + } /* ======= TESTS - DO NOT MODIFY ===== */