From 67d3e8844743cd8e203d87802c40bb6383a2f2ff Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 23 Sep 2024 09:26:37 +0200 Subject: [PATCH 1/3] Core now passing tests --- package-lock.json | 139 +++++++++++++++++-------------------- package.json | 2 +- src/for-loop-and-arrays.js | 17 +++++ src/for-loop-basic.js | 12 ++++ 4 files changed, 94 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22c3694..0bb2be8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "eslint-plugin-promise": "^5.1.0", "husky": "^8.0.3", "jasmine": "^4.6.0", - "nodemon": "^2.0.20", + "nodemon": "^3.1.7", "prettier": "^2.6.2" } }, @@ -384,12 +384,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -855,10 +856,11 @@ } }, "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -974,21 +976,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -1116,10 +1103,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1535,6 +1523,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1678,10 +1667,11 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -1733,18 +1723,6 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1776,18 +1754,19 @@ "dev": true }, "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" @@ -1796,13 +1775,31 @@ "nodemon": "bin/nodemon.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nodemon" } }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -2139,12 +2136,16 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -2183,24 +2184,16 @@ } }, "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "node_modules/slice-ansi": { @@ -2349,6 +2342,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2472,10 +2466,11 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2485,12 +2480,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } } diff --git a/package.json b/package.json index bc96b04..955fd1f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "eslint-plugin-promise": "^5.1.0", "husky": "^8.0.3", "jasmine": "^4.6.0", - "nodemon": "^2.0.20", + "nodemon": "^3.1.7", "prettier": "^2.6.2" } } diff --git a/src/for-loop-and-arrays.js b/src/for-loop-and-arrays.js index 6635155..c5b20f1 100644 --- a/src/for-loop-and-arrays.js +++ b/src/for-loop-and-arrays.js @@ -6,17 +6,34 @@ let word = '' // eslint-disable-line prefer-const // TODO: Add code below this line to make the tests pass // 1. Use a for loop to set the sum variable to the sum of all the values in nums +nums.forEach((e) => { + sum += e +}) // 2. Use a for loop to populate doubledNums with every value from nums array doubled (i.e [2, 6, 24, etc...]) const doubledNums = [] +let i = 0 +nums.forEach((e) => { + doubledNums[i] = e * 2 + i++ +}) // 3. Use a for loop to set word variable equal to all the letters in the letters array combined as a single string +letters.forEach((e) => { + word += e +}) // 4. Use a for loop to populate everySecondNum with every second number from the nums array const everySecondNum = [] +for (let i = 1; i < nums.length; i += 2) { + everySecondNum.push(nums[i]) +} // 5. Use a for loop to populate numsReversed with the numbers from nums in reverse order const numsReversed = [] +for (let i = nums.length - 1; i >= 0; i--) { + numsReversed.push(nums[i]) +} // do not change below this line module.exports = { diff --git a/src/for-loop-basic.js b/src/for-loop-basic.js index dc3775a..08e264a 100644 --- a/src/for-loop-basic.js +++ b/src/for-loop-basic.js @@ -4,12 +4,24 @@ const evenNums = [] const countdown = [] // TODO: 1. Write a for loop that adds the numbers 0 to 3 to the numsZeroToThree array +for (let i = 0; i <= 3; i++) { + numsZeroToThree.push(i) +} // TODO: 2. Write a for loop that adds the numbers 5 to 10 to the numsFiveToTen array +for (let i = 5; i <= 10; i++) { + numsFiveToTen.push(i) +} // TODO: 3. Write a for loop that adds all the even numbers between 0 and 6 (0, 2, 4, 6) to evenNums +for (let i = 0; i <= 6; i += 2) { + evenNums.push(i) +} // TODO: 4. Write a for loop that adds the numbers 3 to 0 (in that order) to the countdown array +for (let i = 3; i >= 0; i--) { + countdown.push(i) +} // do not change below this line module.exports = { From 7d7590cfb3e89435962ccbe9d8a72253f1008374 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 23 Sep 2024 10:14:07 +0200 Subject: [PATCH 2/3] Extensions done --- src/advanced/advanced.js | 32 +++++++++---------- src/extensions/nested-loops.js | 56 ++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/src/advanced/advanced.js b/src/advanced/advanced.js index 8b2b193..c17cb3e 100644 --- a/src/advanced/advanced.js +++ b/src/advanced/advanced.js @@ -3,30 +3,30 @@ const nums = [1, 10, 3, 9, 4, 8, 5, 7, 6, 2, -5, -2, -4, -9] // eslint-disable-l // 1. Use a for loop to set the variable hasTen to true if the array contains the value 10 // note: use a break statement to exit the loop early if the value is found // to prove you have done this, set the variable indexOfTen to the iteration index when you find 10 -let hasTen = false -let indexOfTen = -1 +// let hasTen = false +// let indexOfTen = -1 // 2. Use a for loop to count how many numbers in the array are divisible by 3 -let divisibleByThreeCount = 0 +// let divisibleByThreeCount = 0 // 3. use a for loop to find the average of the numbers in the array -let average = 0 +// let average = 0 // 4. use a for loop to find the largest number in the array -let largest = 0 +// let largest = 0 // 5. use a for loop to find the smallest number in the array -let smallest = 100000 +// let smallest = 100000 // 6. find the median of the numbers in the array -let median = 0 +// let median = 0 -module.exports = { - hasTen, - indexOfTen, - divisibleByThreeCount, - average, - largest, - smallest, - median -} +// module.exports = { +// hasTen, +// indexOfTen, +// divisibleByThreeCount, +// average, +// largest, +// smallest, +// median +// } diff --git a/src/extensions/nested-loops.js b/src/extensions/nested-loops.js index 1d0044b..6e52aa0 100644 --- a/src/extensions/nested-loops.js +++ b/src/extensions/nested-loops.js @@ -10,6 +10,9 @@ const deepThree = [] // 1. Using a for loop from 1 to 10, add the value of the 'loop index' to the array 'simpleOne' // eg [1,2,3...] +for (let i = 1; i <= 10; i++) { + simpleOne.push(i) +} // HINT: in the below loop, the statements and block of code needs to be changed // HINT: in the below loop, the var i represents the loop index @@ -20,17 +23,70 @@ const deepThree = [] // 2. Using nested for loops, add arrays to 'nestedOne' where each array has n copies of the outer 'loop index' // eg [[1],[2,2],...] +for (let i = START; i <= END; i++) { + const innerArray = [] + for (let j = 1; j <= i; j++) { + innerArray.push(i) + } + nestedOne.push(innerArray) +} + // 3. As 2, but each array should contain the values from the outer 'loop index' to 1 inclusive. Update array 'nestedTwo' // eg [[1],[2,1],...] +for (let i = START; i <= END; i++) { + const innerArray = [] + for (let j = i; j >= 1; j--) { + innerArray.push(j) + } + nestedTwo.push(innerArray) +} // 4. As 2, but each array should contain arrays from 1 to the outer 'loop index' with the value of the outer 'loop index'. Update array 'deepOne' // eg [[[1]],[[2],[2,2]],...] +for (let i = START; i <= END; i++) { + const innerArray = [] + for (let j = 1; j <= i; j++) { + const subArray = [] + for (let k = 1; k <= j; k++) { + subArray.push(i) + } + innerArray.push(subArray) + } + // is this a CoC refference? + deepOne.push(innerArray) +} + // 5. As 4, update array 'deepTwo' so that the result is: // [[[1]],[[1],[1,2]],...] +for (let i = START; i <= END; i++) { + const innerArray = [] + for (let j = 1; j <= i; j++) { + const subArray = [] + for (let k = 1; k <= j; k++) { + subArray.push(k) + } + innerArray.push(subArray) + } + // is this a CoC refference? + deepTwo.push(innerArray) +} // 6. As 5, update the array 'deepThree', but the result should be the average of the sum of the squares of the numbers in each array // [[1],[[1],[2.5]],...] +for (let i = START; i <= END; i++) { + const innerArray = [] + for (let j = 1; j <= i; j++) { + const subArray = [] + let temp = 0 + for (let k = 1; k <= j; k++) { + temp += k * k + } + subArray.push(temp / j) + innerArray.push(subArray) + } + deepThree.push(innerArray) +} module.exports = { START, From 5907dd83c7327a30bde7b5157a8b85638ef68148 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 23 Sep 2024 11:57:18 +0200 Subject: [PATCH 3/3] done with core, extension and advanced --- src/advanced/advanced.js | 71 ++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/src/advanced/advanced.js b/src/advanced/advanced.js index c17cb3e..e30a961 100644 --- a/src/advanced/advanced.js +++ b/src/advanced/advanced.js @@ -3,30 +3,67 @@ const nums = [1, 10, 3, 9, 4, 8, 5, 7, 6, 2, -5, -2, -4, -9] // eslint-disable-l // 1. Use a for loop to set the variable hasTen to true if the array contains the value 10 // note: use a break statement to exit the loop early if the value is found // to prove you have done this, set the variable indexOfTen to the iteration index when you find 10 -// let hasTen = false -// let indexOfTen = -1 +let hasTen = false +let indexOfTen = -1 + +for (let i = 0; i < nums.length; i++) { + if (nums[i] === 10) { + hasTen = true + indexOfTen = i + break + } +} // 2. Use a for loop to count how many numbers in the array are divisible by 3 -// let divisibleByThreeCount = 0 +let divisibleByThreeCount = 0 +nums.forEach((e) => { + if (e % 3 === 0) { + divisibleByThreeCount++ + } +}) // 3. use a for loop to find the average of the numbers in the array -// let average = 0 +let average = 0 + +for (let i = 0; i < nums.length; i++) { + average += nums[i] +} +average = average / nums.length // 4. use a for loop to find the largest number in the array -// let largest = 0 +let largest = 0 +nums.forEach((e) => { + if (largest < e) { + largest = e + } +}) // 5. use a for loop to find the smallest number in the array -// let smallest = 100000 +let smallest = 100000 + +nums.forEach((e) => { + if (smallest > e) { + smallest = e + } +}) // 6. find the median of the numbers in the array -// let median = 0 - -// module.exports = { -// hasTen, -// indexOfTen, -// divisibleByThreeCount, -// average, -// largest, -// smallest, -// median -// } +let median = 0 +nums.sort((a, b) => a - b) +let i = Math.floor(nums.length / 2) +i = Math.round(i) +if (nums.length % 2 === 0) { + median = Math.floor((nums[i - 1] + nums[i]) / 2) +} else { + median = Math.floor(nums[i]) +} + +module.exports = { + hasTen, + indexOfTen, + divisibleByThreeCount, + average, + largest, + smallest, + median +}