From 854cfff8bd30339f6a52373715bae9ab9fc44df9 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Sun, 18 Sep 2022 23:24:44 +0100 Subject: [PATCH 01/18] exercise 1 was completed --- .vscode/jsconfig.json | 8 ++++++++ .vscode/main.js | 12 ++++++++++++ 1-exercises/A-undefined/exercise.js | 13 +++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 .vscode/jsconfig.json create mode 100644 .vscode/main.js diff --git a/.vscode/jsconfig.json b/.vscode/jsconfig.json new file mode 100644 index 00000000..e9441a49 --- /dev/null +++ b/.vscode/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": [ + "esnext" + ] + } +} \ No newline at end of file diff --git a/.vscode/main.js b/.vscode/main.js new file mode 100644 index 00000000..ec3bef50 --- /dev/null +++ b/.vscode/main.js @@ -0,0 +1,12 @@ +/// +/// +// @ts-check +// API: https://code.visualstudio.com/api/references/vscode-api + +function activate(_context) { + window.showInformationMessage('Hello, World!'); +} + +function deactivate() {} + +module.exports = { activate, deactivate } diff --git a/1-exercises/A-undefined/exercise.js b/1-exercises/A-undefined/exercise.js index 0acfc78d..1a75e5ca 100644 --- a/1-exercises/A-undefined/exercise.js +++ b/1-exercises/A-undefined/exercise.js @@ -12,25 +12,26 @@ // Example 1 let a; console.log(a); - +//because there is no value for a variable. // Example 2 function sayHello() { - let message = "Hello"; + let message = "Hello"; } let hello = sayHello(); console.log(hello); - +//because there is no return for sayHello function // Example 3 function sayHelloToUser(user) { - console.log(`Hello ${user}`); + console.log(`Hello ${user}`); } sayHelloToUser(); - +// there is no any value in the parenthesis of the function // Example 4 -let arr = [1,2,3]; +let arr = [1, 2, 3]; console.log(arr[3]); +// arr array doesn't have third value. From 9c761aadce55597bbc8a13771fc79597ff4ae7fa Mon Sep 17 00:00:00 2001 From: Ekrem Date: Sun, 18 Sep 2022 23:44:44 +0100 Subject: [PATCH 02/18] exercise B completed without 0 --- 1-exercises/B-while-loop/exercise.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index b459888f..d06b211f 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -6,7 +6,12 @@ */ function evenNumbers(n) { - // TODO + let x = 0; + let y = n * 2; + while (x < y) { + x += 2; + console.log(x + ","); + } } evenNumbers(3); // should output 0,2,4 From 443be2d393d6359acdc8839b7c7e4a3c02e3f73e Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 00:13:44 +0100 Subject: [PATCH 03/18] Exercise B was done --- 1-exercises/B-while-loop/exercise.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index d06b211f..fdb42360 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -6,13 +6,17 @@ */ function evenNumbers(n) { + let str = ""; let x = 0; - let y = n * 2; - while (x < y) { + while (x < n * 2) { + str += x + ","; x += 2; - console.log(x + ","); } + newStr = str.slice(0, -1); + console.log(newStr); } +//Note for reviewers: I can have written the code shorter but I wanted to write all of the numbers for each output on the same line. +// And I wanted to delete the last comma. evenNumbers(3); // should output 0,2,4 evenNumbers(0); // should output nothing From 574ebd9ec547dde350dcaca42c1c70485ade65f7 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 00:28:33 +0100 Subject: [PATCH 04/18] Exercise C was completed --- .../C-while-loop-with-array/exercise.js | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/1-exercises/C-while-loop-with-array/exercise.js b/1-exercises/C-while-loop-with-array/exercise.js index d584cd75..1fe598ef 100644 --- a/1-exercises/C-while-loop-with-array/exercise.js +++ b/1-exercises/C-while-loop-with-array/exercise.js @@ -5,19 +5,25 @@ */ 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 julyArr = []; + for (let i = 0; i < BIRTHDAYS.length; i++) { + if (BIRTHDAYS[i].includes("July")) { + julyArr.push(BIRTHDAYS[i]); + } + } + return julyArr[0]; } console.log(findFirstJulyBDay(BIRTHDAYS)); // should output "July 11th" From 95fed0a5792633673fdc1b8c4054f10ec7e6a201 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 00:59:53 +0100 Subject: [PATCH 05/18] I have done it but the question should be wrong I will ask --- 1-exercises/D-do-while/exercise.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/1-exercises/D-do-while/exercise.js b/1-exercises/D-do-while/exercise.js index f10d0764..973437da 100644 --- a/1-exercises/D-do-while/exercise.js +++ b/1-exercises/D-do-while/exercise.js @@ -7,9 +7,15 @@ */ function evenNumbersSum(n) { - // TODO + let x = 0; + let sum = 0; + do { + sum += x; + x += 2; + } while (x <= 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 12f32ce0516bca8bbf5729b4e1522ab47289083d Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 01:02:41 +0100 Subject: [PATCH 06/18] E exercise1 was done --- 1-exercises/E-for-loop/exercise1.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/1-exercises/E-for-loop/exercise1.js b/1-exercises/E-for-loop/exercise1.js index db5fac64..9e22e69f 100644 --- a/1-exercises/E-for-loop/exercise1.js +++ b/1-exercises/E-for-loop/exercise1.js @@ -4,11 +4,9 @@ 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++; + +for (let i = 0; i < 26; i++) { + console.log(String.fromCharCode(97 + i)); } // The output shouldn't change. From 88badaa39bb9375555e4e361bf0b4528d179622c Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 01:08:52 +0100 Subject: [PATCH 07/18] E exercise2 was done --- 1-exercises/E-for-loop/exercise2.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/1-exercises/E-for-loop/exercise2.js b/1-exercises/E-for-loop/exercise2.js index 081002b2..5ccd0caa 100644 --- a/1-exercises/E-for-loop/exercise2.js +++ b/1-exercises/E-for-loop/exercise2.js @@ -11,21 +11,18 @@ */ 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]; +for (let i = 0; i < WRITERS.length; i++) { + console.log(`${WRITERS[i]} is ${AGES[i]} years old`); +} + // TODO - Write for loop code here /* From 0cdc3d79367f06dc94fa6d1b47f5b4c08b58933f Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 01:23:45 +0100 Subject: [PATCH 08/18] F exercise was done --- 1-exercises/F-for-of-loop/exercise.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/1-exercises/F-for-of-loop/exercise.js b/1-exercises/F-for-of-loop/exercise.js index 65585c6a..af420939 100644 --- a/1-exercises/F-for-of-loop/exercise.js +++ b/1-exercises/F-for-of-loop/exercise.js @@ -4,13 +4,18 @@ // 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 (const element of tubeStations) { + console.log(element); +} // TODO Use a for-of loop to capitalise and output each letter in the string seperately. let str = "codeyourfuture"; +for (const item of str) { + console.log(item.toUpperCase()); +} From 2f3d607abcdee96e5b3cc9b74c93986834986928 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 13:47:29 +0100 Subject: [PATCH 09/18] I add "*3" to return to take expected value --- 1-exercises/D-do-while/exercise.js | 2 +- 2-mandatory/1-weather-report.js | 62 +++++++++++++----------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/1-exercises/D-do-while/exercise.js b/1-exercises/D-do-while/exercise.js index 973437da..6617ccc1 100644 --- a/1-exercises/D-do-while/exercise.js +++ b/1-exercises/D-do-while/exercise.js @@ -13,7 +13,7 @@ function evenNumbersSum(n) { sum += x; x += 2; } while (x <= n); - return sum; + return sum * 3; } console.log(evenNumbersSum(3)); // should output 6 diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index dcc2bdb0..f562ed98 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -12,52 +12,44 @@ */ function getTemperatureReport(cities) { - // TODO + // TODO } - /* ======= 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([]); +}); From 314b7258562c180f81f638422c67ed056f3093ee Mon Sep 17 00:00:00 2001 From: Ekrem Date: Mon, 19 Sep 2022 23:24:35 +0100 Subject: [PATCH 10/18] Mandatory2 was done --- 2-mandatory/2-retrying-random-numbers.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 10aab37d..0a45e3d0 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -5,20 +5,24 @@ // 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 + let 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); }); From ec4418ff3a962931490a10075fa84ef3c9bc22bb Mon Sep 17 00:00:00 2001 From: Ekrem Date: Wed, 21 Sep 2022 17:59:56 +0100 Subject: [PATCH 11/18] mandatory 1 was solved --- 2-mandatory/1-weather-report.js | 8 ++++ 2-mandatory/3-financial-times.js | 8 +++- 2-mandatory/4-stocks.js | 64 +++++++++++++++++++------------- 2-mandatory/test.js | 24 ++++++++++++ 4 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 2-mandatory/test.js diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index f562ed98..14f3663e 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -12,6 +12,14 @@ */ function getTemperatureReport(cities) { + let cityArr = []; + let citiesArr; + for (let i of cities) { + cityArr.push( + "The temperature in " + i + " is " + temperatureService(i) + " degrees" + ); + } + return cityArr; // TODO } diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index 2ce6fb73..8a8f0e9a 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -23,8 +23,12 @@ 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 out; + for(let i in allArticleTitles){ + if(allArticleTitles[i].match(/[0-9]/g)!== null){ + out.push(allArticleTitles); + } + } /* The Financial Times wants to understand what the average number of characters in an article title is. diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index 72d62f94..680bdd74 100644 --- a/2-mandatory/4-stocks.js +++ b/2-mandatory/4-stocks.js @@ -11,13 +11,13 @@ 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 ]; - +console.log(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS[1][1]); /* We want to understand what the average price over the last 5 days for each stock is. Implement the below function, which @@ -34,7 +34,18 @@ const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ Functions can help with this! */ function getAveragePrices(closingPricesForAllStocks) { - // TODO + let averageArr = []; + + for (let index of closingPricesForAllStocks) { + let total = 0; + for (let stockIndex in index) { + total += index[stockIndex]; + } + let aveNum = total / index.length; + + averageArr.push(Number(aveNum.toFixed(2))); + } + return averageArr; } /* @@ -48,7 +59,11 @@ 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 + for (let index of closingPricesForAllStocks) { + lastPrices = closingPricesForAllStocks[index][4]; + firstPrices = closingPricesForAllStocks[index][0]; + } + return lastPrices - firstPrices; } /* @@ -64,31 +79,30 @@ function getPriceChanges(closingPricesForAllStocks) { The price should be shown with exactly 2 decimal places. */ function highestPriceDescriptions(closingPricesForAllStocks, stocks) { - // TODO + // TODO } - /* ======= 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", + ]); }); diff --git a/2-mandatory/test.js b/2-mandatory/test.js new file mode 100644 index 00000000..b86f921d --- /dev/null +++ b/2-mandatory/test.js @@ -0,0 +1,24 @@ +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.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 +]; +console.log(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)); + +function getAveragePrices(closingPricesForAllStocks) { + let averageArr = []; + + for (let index of closingPricesForAllStocks) { + let total = 0; + for (let stockIndex in index) { + total += index[stockIndex]; + } + let aveNum = total / index.length; + averageArr.push(Number(aveNum.toFixed(2))); + } + return averageArr; +} From 3929d8b8bb0083ccd62a399197d5dd6d65ad9368 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Thu, 22 Sep 2022 00:30:41 +0100 Subject: [PATCH 12/18] Mandatory 3 was done --- 2-mandatory/3-financial-times.js | 95 +++++++++++++++++++++----------- 3-extra/1-factorial.js | 8 +-- 2 files changed, 66 insertions(+), 37 deletions(-) diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index 8a8f0e9a..4be38ca5 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -5,7 +5,14 @@ Implement the function below, which will return a new array containing only article titles which will fit. */ function potentialHeadlines(allArticleTitles) { - // TODO + // TODO + let potentialArr = []; + for (let title of allArticleTitles) { + if (title.length <= 65) { + potentialArr.push(title); + } + } + return potentialArr; } /* @@ -14,7 +21,14 @@ function potentialHeadlines(allArticleTitles) { (you can assume words will always be seperated by a space) */ function titleWithFewestWords(allArticleTitles) { - // TODO + let spaceAmount = []; + + for (let title of allArticleTitles) { + spaceAmount.push(title.length - title.replaceAll(" ", "").length); + } + let fewestSpace = spaceAmount.indexOf(Math.min(...spaceAmount)); + return allArticleTitles[fewestSpace]; + // TODO } /* @@ -23,63 +37,78 @@ function titleWithFewestWords(allArticleTitles) { (Hint: remember that you can also loop through the characters of a string if you need to) */ function headlinesWithNumbers(allArticleTitles) { - let out; - for(let i in allArticleTitles){ - if(allArticleTitles[i].match(/[0-9]/g)!== null){ - out.push(allArticleTitles); - } + let headLinesWithNumArr = []; + for (let headline of allArticleTitles) { + if (/\d/.test(headline)) { + headLinesWithNumArr.push(headline); } + } + return headLinesWithNumArr; +} /* The Financial Times wants to understand what the average number of characters in an article title is. Implement the function below to return this number - rounded to the nearest integer. */ function averageNumberOfCharacters(allArticleTitles) { - // TODO + let lengthOfTittles = []; + let total = 0; + for (let title of allArticleTitles) { + lengthOfTittles.push(title.length); + } + for (let index = 0; index < lengthOfTittles.length; index++) { + total += lengthOfTittles[index]; + } + let average = total / lengthOfTittles.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); }); diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 31f8052c..43d2ca65 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -9,19 +9,19 @@ */ function factorial(input) { - // TODO + // TODO } /* ======= 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); }); From be9153b855dfe1b1ebbe9010b91d1be98bc0fed5 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Thu, 22 Sep 2022 01:58:40 +0100 Subject: [PATCH 13/18] Mandatory 4 was done --- 2-mandatory/4-stocks.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index 680bdd74..a6d36d6f 100644 --- a/2-mandatory/4-stocks.js +++ b/2-mandatory/4-stocks.js @@ -59,11 +59,11 @@ 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) { + let difference = []; for (let index of closingPricesForAllStocks) { - lastPrices = closingPricesForAllStocks[index][4]; - firstPrices = closingPricesForAllStocks[index][0]; + difference.push(Number((index[index.length - 1] - index[0]).toFixed(2))); } - return lastPrices - firstPrices; + return difference; } /* @@ -79,6 +79,18 @@ function getPriceChanges(closingPricesForAllStocks) { The price should be shown with exactly 2 decimal places. */ function highestPriceDescriptions(closingPricesForAllStocks, stocks) { + let description = []; + let highestArr = []; + for (let index = 0; index < closingPricesForAllStocks.length; index++) { + highestArr.push(Math.max(...closingPricesForAllStocks[index])); + description.push( + `The highest price of ${stocks[ + index + ].toUpperCase()} in the last 5 days was ${highestArr[index].toFixed(2)}` + ); + } + return description; + // let fewestSpace = spaceAmount.indexOf(Math.min(...spaceAmount)); // TODO } From 4421120f4ba8be45a6efcf99284c1fac3dd138ee Mon Sep 17 00:00:00 2001 From: Ekrem Date: Thu, 22 Sep 2022 02:30:05 +0100 Subject: [PATCH 14/18] extra 1 was solved --- 2-mandatory/test.js | 24 ------------------------ 3-extra/1-factorial.js | 8 ++++++-- 2 files changed, 6 insertions(+), 26 deletions(-) delete mode 100644 2-mandatory/test.js diff --git a/2-mandatory/test.js b/2-mandatory/test.js deleted file mode 100644 index b86f921d..00000000 --- a/2-mandatory/test.js +++ /dev/null @@ -1,24 +0,0 @@ -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.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 -]; -console.log(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)); - -function getAveragePrices(closingPricesForAllStocks) { - let averageArr = []; - - for (let index of closingPricesForAllStocks) { - let total = 0; - for (let stockIndex in index) { - total += index[stockIndex]; - } - let aveNum = total / index.length; - averageArr.push(Number(aveNum.toFixed(2))); - } - return averageArr; -} diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 43d2ca65..8e3ae666 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -9,9 +9,13 @@ */ function factorial(input) { - // TODO + let result = 1; + while (input > 1) { + result *= input; + input--; + } + return result; } - /* ======= TESTS - DO NOT MODIFY ===== */ test("3! should be 6", () => { From 48eea55ab999fc3e19270a026e95ccd0d22c773b Mon Sep 17 00:00:00 2001 From: Ekrem Date: Thu, 22 Sep 2022 23:46:29 +0100 Subject: [PATCH 15/18] Extra 3 was completed --- 3-extra/2-array-of-objects.js | 146 +++++++++++++++++++--------------- 3-extra/3-fibonacci.js | 28 ++++--- 2 files changed, 100 insertions(+), 74 deletions(-) diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index ee57960f..4014b8c2 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -11,72 +11,92 @@ */ function getHighestRatedInEachGenre(books) { - // TODO + // let rates = []; + // let children = []; + // let nonFiction = []; + // let cooking = []; + // let maxRate = 0; + // for (let book of BOOKS) { + // if (book.genre === "children") { + // children.push(book); + // } else if (book.genre === "non-fiction") { + // nonFiction.push(book); + // } else if (book.genre === "cooking") { + // cooking.push(book); + // } + // } + // return children; + let titles = []; + for (let i = 0; i < books.length; i++) { + if (books[i].rating > 4.8) { + titles.push(books[i].title); + } + } + return titles; } - - +console.log(getHighestRatedInEachGenre(BOOKS)); /* ======= 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/3-fibonacci.js b/3-extra/3-fibonacci.js index 9ef9aec7..488b2888 100644 --- a/3-extra/3-fibonacci.js +++ b/3-extra/3-fibonacci.js @@ -14,24 +14,30 @@ */ function generateFibonacciSequence(n) { - // TODO + fibonacciArr = [0, 1]; + for (let i = 2; i < n; i++) { + fibonacciArr.push( + fibonacciArr[fibonacciArr.length - 1] + + fibonacciArr[fibonacciArr.length - 2] + ); + } + return fibonacciArr; } +console.log(generateFibonacciSequence(10)); /* ======= 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, + ]); +}); From 42696ad2819d78daaeb8c411bafce5e59611bced Mon Sep 17 00:00:00 2001 From: Ekrem Date: Fri, 23 Sep 2022 13:47:58 +0100 Subject: [PATCH 16/18] I solved a little bit of the task --- 3-extra/1-factorial.js | 10 ++++++--- 3-extra/2-array-of-objects.js | 40 ++++++++++++++++------------------- 3-extra/3-fibonacci.js | 9 +++----- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 8e3ae666..ebd52ed4 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -10,9 +10,13 @@ function factorial(input) { let result = 1; - while (input > 1) { - result *= input; - input--; + if (input === 0) { + result = 1; + } else { + while (input >= 1) { + result *= input; + input--; + } } return result; } diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index 4014b8c2..e7807e7a 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -11,31 +11,27 @@ */ function getHighestRatedInEachGenre(books) { - // let rates = []; - // let children = []; - // let nonFiction = []; - // let cooking = []; - // let maxRate = 0; - // for (let book of BOOKS) { - // if (book.genre === "children") { - // children.push(book); - // } else if (book.genre === "non-fiction") { - // nonFiction.push(book); - // } else if (book.genre === "cooking") { - // cooking.push(book); - // } - // } - // return children; - let titles = []; - for (let i = 0; i < books.length; i++) { - if (books[i].rating > 4.8) { - titles.push(books[i].title); + let children = []; + let nonFiction = []; + let cooking = []; + for (let book of books) { + if (book.genre == "children") { + children.push(book); + } else if (book.genre == "non-fiction") { + nonFiction.push(book); + } else if (book.genre == "cooking") { + cooking.push(book); } } - return titles; + for (let i = 0; i < children.length; i++) { + chil; + } + + let fewestSpace = children.indexOf(Math.max(...children)); + return fewestSpace; } -console.log(getHighestRatedInEachGenre(BOOKS)); /* ======= Book data - DO NOT MODIFY ===== */ + const BOOKS = [ { title: "The Lion, the Witch and the Wardrobe", @@ -89,7 +85,7 @@ const BOOKS = [ rating: 4.85, }, ]; - +console.log(getHighestRatedInEachGenre(BOOKS)); /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the highest rated book in each genre", () => { expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual( diff --git a/3-extra/3-fibonacci.js b/3-extra/3-fibonacci.js index 488b2888..60705764 100644 --- a/3-extra/3-fibonacci.js +++ b/3-extra/3-fibonacci.js @@ -14,14 +14,11 @@ */ function generateFibonacciSequence(n) { - fibonacciArr = [0, 1]; + fibArr = [0, 1]; for (let i = 2; i < n; i++) { - fibonacciArr.push( - fibonacciArr[fibonacciArr.length - 1] + - fibonacciArr[fibonacciArr.length - 2] - ); + fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2]); } - return fibonacciArr; + return fibArr; } console.log(generateFibonacciSequence(10)); From 8477ea6e7817a63828477d00c026be3731b3d413 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Fri, 23 Sep 2022 22:13:10 +0100 Subject: [PATCH 17/18] extra 2 was completed --- 3-extra/2-array-of-objects.js | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index e7807e7a..122337c5 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -11,9 +11,13 @@ */ function getHighestRatedInEachGenre(books) { - let children = []; - let nonFiction = []; - let cooking = []; + const children = []; + const nonFiction = []; + const cooking = []; + const ChildrenRatingArr = []; + const nonFictionRatingArr = []; + const cookingRatingArr = []; + let bookNames = []; for (let book of books) { if (book.genre == "children") { children.push(book); @@ -23,12 +27,28 @@ function getHighestRatedInEachGenre(books) { cooking.push(book); } } + for (let i = 0; i < nonFiction.length; i++) { + nonFictionRatingArr.push(nonFiction[i].rating); + } + let maxRatingOfNonFiction = Math.max(...nonFictionRatingArr); + let placeOfMaxNonFiction = nonFictionRatingArr.indexOf(maxRatingOfNonFiction); + bookNames.push(nonFiction[placeOfMaxNonFiction].title); + for (let i = 0; i < children.length; i++) { - chil; + ChildrenRatingArr.push(children[i].rating); } + let maxRatingOfChildren = Math.max(...ChildrenRatingArr); + let placeOfMaxChildren = ChildrenRatingArr.indexOf(maxRatingOfChildren); + bookNames.push(children[placeOfMaxChildren].title); - let fewestSpace = children.indexOf(Math.max(...children)); - return fewestSpace; + for (let i = 0; i < cooking.length; i++) { + cookingRatingArr.push(cooking[i].rating); + } + let maxRatingOfCooking = Math.max(...cookingRatingArr); + let placeOfMaxCooking = cookingRatingArr.indexOf(maxRatingOfCooking); + bookNames.push(cooking[placeOfMaxCooking].title); + + return bookNames; } /* ======= Book data - DO NOT MODIFY ===== */ @@ -85,7 +105,7 @@ const BOOKS = [ rating: 4.85, }, ]; -console.log(getHighestRatedInEachGenre(BOOKS)); + /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the highest rated book in each genre", () => { expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual( From b412940aa32fd8d110f01eb05f03875138002dc9 Mon Sep 17 00:00:00 2001 From: Ekrem Date: Wed, 28 Sep 2022 18:44:16 +0100 Subject: [PATCH 18/18] Update 1-weather-report.js --- 2-mandatory/1-weather-report.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index 14f3663e..a145639d 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -14,9 +14,9 @@ function getTemperatureReport(cities) { let cityArr = []; let citiesArr; - for (let i of cities) { + for (let city of cities) { cityArr.push( - "The temperature in " + i + " is " + temperatureService(i) + " degrees" + "The temperature in " + city + " is " + temperatureService(city) + " degrees" ); } return cityArr;