From 22e5dfd28456db21381ebcde442c54de6dca61dd Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Sun, 3 Jul 2022 16:35:56 +0200 Subject: [PATCH 01/11] Solution 1 --- .../1-reading-writing-files/src/index.js | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/requirement-sets/1-reading-writing-files/src/index.js b/requirement-sets/1-reading-writing-files/src/index.js index ed849f4..741522d 100644 --- a/requirement-sets/1-reading-writing-files/src/index.js +++ b/requirement-sets/1-reading-writing-files/src/index.js @@ -1 +1,23 @@ -// run the program +const fs = require('fs'); + +function checkPosition(data) { + const answers = []; + const dataArray = data.toString().toUpperCase().split('\r\n'); + + dataArray.forEach((el) => { + const counts = { + W: 0, + E: 0, + N: 0, + S: 0, + }; + + el.split('').forEach((letter) => (counts[letter] += 1)); + + answers.push(counts.W === counts.E && counts.S === counts.N); + }); + return answers; +} + +const data = fs.readFileSync('../input.txt'); +console.log(checkPosition(data)); From 4c4dfa9eee79f2ad9a20f3ec05fce8d1ef005701 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Tue, 19 Jul 2022 17:44:54 +0200 Subject: [PATCH 02/11] 3-test-js-grad --- .../01-count-major-versions-above-10/index.js | 33 +++++++++++++- .../src/02-oldest-package-name/index.js | 27 +++++++++++- .../src/03-organise-maintainers/index.js | 44 +++++++++++++++++-- 3 files changed, 97 insertions(+), 7 deletions(-) diff --git a/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js b/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js index c6de991..34d3d44 100644 --- a/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js +++ b/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js @@ -12,8 +12,37 @@ GET https://api.npms.io/v2/search/suggestions?q=react */ +const axios = require('axios'); + module.exports = async function countMajorVersionsAbove10() { - // TODO + const versions = []; + const splitStr = []; + + try { + const res = await axios.get( + 'https://api.npms.io/v2/search/suggestions?q=react' + ); + const data = res.data; + + // const majorVersions = data.map((dep) => { + // return dep.package.version.split('.')[0]; + // }); + + // const above10 = majorVersions.filter( + // (number) => Number(number) >= 10 + // ).length; + + data.forEach((el) => versions.push(el.package.version)); + versions.forEach((str) => splitStr.push(str.split('.'))); - return number + const answer = splitStr.filter( + (el) => + Number(el[0]) >= 10 && + (Number(el[1]) > 0 || Number(el[2]) > 0 || Number(el[3]) > 0) + ).length; + return answer; + } catch (err) { + console.log(err); + } + return answer; }; diff --git a/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js b/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js index 93d773f..5fac627 100644 --- a/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js +++ b/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js @@ -10,9 +10,32 @@ GET https://api.npms.io/v2/search/suggestions?q=react * the "name" of the package that has the oldest "date" value */ +const axios = require('axios'); module.exports = async function oldestPackageName() { - // TODO + const datesArray = []; + try { + const res = await axios.get( + 'https://api.npms.io/v2/search/suggestions?q=react' + ); + const data = res.data; - return name + // const mapped = data + // .map((el) => [el.package.date, el.package.name]) + // .reduce((previous, current) => { + // return previous[0] < current[0] ? previous : current; + // }); + // console.log('MAPPED : ', mapped); + + data.forEach((el) => datesArray.push([el.package.date, el.package.name])); + const oldestDate = datesArray.reduce((previous, current) => { + return previous[0] < current[0] ? previous : current; + }); + + const name = oldestDate[1]; + return name; + } catch (err) { + console.log(err); + } + return name; }; diff --git a/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js b/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js index ed17e1d..bcda820 100644 --- a/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js +++ b/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js @@ -2,6 +2,10 @@ * Make the following HTTP request with either axios or node-fetch: +/* + +* Make the following HTTP request with either axios or node-fetch: + GET https://api.npms.io/v2/search/suggestions?q=react ****** @@ -23,8 +27,42 @@ GET https://api.npms.io/v2/search/suggestions?q=react */ -module.exports = async function organiseMaintainers() { - // TODO +const axios = require('axios'); + +const findOrCreateMaintainer = (maintainers, maintainer) => { + const foundMaintainer = maintainers.find((entry) => { + return entry.username === maintainer; + }); + + if (foundMaintainer) return foundMaintainer; - return maintainers + const createdMaintainer = { username: maintainer, packageNames: [] }; + maintainers.push(createdMaintainer); + return createdMaintainer; }; + +const addMaintainerForPackage = (maintainers, packageName, maintainer) => { + const packages = findOrCreateMaintainer(maintainers, maintainer).packageNames; + packages.push(packageName); +}; + +module.exports = async function organiseMaintainers() { + const { data } = await axios.get( + 'https://api.npms.io/v2/search/suggestions?q=react' + ); + + console.log('DATA : ', JSON.stringify(data[0], null, 2)); + let maintainers = []; + + data.forEach((item) => { + let packageName = item.package.name; + item.package.maintainers.forEach((maintainer) => { + let username = maintainer.username; + addMaintainerForPackage(maintainers, packageName, username); + }); + return maintainers; + }); + + console.log(maintainers); + return maintainers; +}; \ No newline at end of file From 74c46db481baf60ba90b7f74bbbb42757bd8cfda Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 13:01:59 +0200 Subject: [PATCH 03/11] REDONE: 3-test-js-grad --- .../1-reading-writing-files/src/index.js | 38 +++++++++++++++ .../01-count-major-versions-above-10/index.js | 26 ++--------- .../src/02-oldest-package-name/index.js | 22 +++------ .../src/03-organise-maintainers/index.js | 46 ++++++++----------- 4 files changed, 66 insertions(+), 66 deletions(-) diff --git a/requirement-sets/1-reading-writing-files/src/index.js b/requirement-sets/1-reading-writing-files/src/index.js index 741522d..916db0e 100644 --- a/requirement-sets/1-reading-writing-files/src/index.js +++ b/requirement-sets/1-reading-writing-files/src/index.js @@ -21,3 +21,41 @@ function checkPosition(data) { const data = fs.readFileSync('../input.txt'); console.log(checkPosition(data)); + +const findOrCreateMaintainer = (maintainers, maintainer) => { + const foundMaintainer = maintainers.find((entry) => { + return entry.username === maintainer; + }); + + if (foundMaintainer) return foundMaintainer; + + const createdMaintainer = { username: maintainer, packageNames: [] }; + maintainers.push(createdMaintainer); + return createdMaintainer; +}; + +const addMaintainerForPackage = (maintainers, packageName, maintainer) => { + const packages = findOrCreateMaintainer(maintainers, maintainer).packageNames; + packages.push(packageName); +}; + +module.exports = async function organiseMaintainers() { + const { data } = await axios.get( + 'https://api.npms.io/v2/search/suggestions?q=react' + ); + + console.log('DATA : ', JSON.stringify(data[0], null, 2)); + let maintainers = []; + + data.forEach((item) => { + let packageName = item.package.name; + item.package.maintainers.forEach((maintainer) => { + let username = maintainer.username; + addMaintainerForPackage(maintainers, packageName, username); + }); + return maintainers; + }); + + // console.log(maintainers); + return maintainers; +}; diff --git a/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js b/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js index 34d3d44..30c6e1e 100644 --- a/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js +++ b/requirement-sets/3-test-js-grad/src/01-count-major-versions-above-10/index.js @@ -15,34 +15,16 @@ GET https://api.npms.io/v2/search/suggestions?q=react const axios = require('axios'); module.exports = async function countMajorVersionsAbove10() { - const versions = []; - const splitStr = []; - try { - const res = await axios.get( + const { data } = await axios.get( 'https://api.npms.io/v2/search/suggestions?q=react' ); - const data = res.data; - - // const majorVersions = data.map((dep) => { - // return dep.package.version.split('.')[0]; - // }); - - // const above10 = majorVersions.filter( - // (number) => Number(number) >= 10 - // ).length; - - data.forEach((el) => versions.push(el.package.version)); - versions.forEach((str) => splitStr.push(str.split('.'))); + const answer = data + .map((el) => el.package.version.split('.')[0]) + .filter((el) => Number(el) >= 10).length; - const answer = splitStr.filter( - (el) => - Number(el[0]) >= 10 && - (Number(el[1]) > 0 || Number(el[2]) > 0 || Number(el[3]) > 0) - ).length; return answer; } catch (err) { console.log(err); } - return answer; }; diff --git a/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js b/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js index 5fac627..2205915 100644 --- a/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js +++ b/requirement-sets/3-test-js-grad/src/02-oldest-package-name/index.js @@ -13,29 +13,19 @@ GET https://api.npms.io/v2/search/suggestions?q=react const axios = require('axios'); module.exports = async function oldestPackageName() { - const datesArray = []; try { - const res = await axios.get( + const { data } = await axios.get( 'https://api.npms.io/v2/search/suggestions?q=react' ); - const data = res.data; - // const mapped = data - // .map((el) => [el.package.date, el.package.name]) - // .reduce((previous, current) => { - // return previous[0] < current[0] ? previous : current; - // }); - // console.log('MAPPED : ', mapped); + const name = data + .map((el) => [el.package.date, el.package.name]) + .reduce((previous, current) => { + return previous[0] < current[0] ? previous : current; + })[1]; - data.forEach((el) => datesArray.push([el.package.date, el.package.name])); - const oldestDate = datesArray.reduce((previous, current) => { - return previous[0] < current[0] ? previous : current; - }); - - const name = oldestDate[1]; return name; } catch (err) { console.log(err); } - return name; }; diff --git a/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js b/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js index bcda820..b4fbbaa 100644 --- a/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js +++ b/requirement-sets/3-test-js-grad/src/03-organise-maintainers/index.js @@ -29,40 +29,30 @@ GET https://api.npms.io/v2/search/suggestions?q=react const axios = require('axios'); -const findOrCreateMaintainer = (maintainers, maintainer) => { - const foundMaintainer = maintainers.find((entry) => { - return entry.username === maintainer; - }); - - if (foundMaintainer) return foundMaintainer; - - const createdMaintainer = { username: maintainer, packageNames: [] }; - maintainers.push(createdMaintainer); - return createdMaintainer; -}; - -const addMaintainerForPackage = (maintainers, packageName, maintainer) => { - const packages = findOrCreateMaintainer(maintainers, maintainer).packageNames; - packages.push(packageName); -}; - module.exports = async function organiseMaintainers() { + let maintainers = []; + const { data } = await axios.get( 'https://api.npms.io/v2/search/suggestions?q=react' ); - console.log('DATA : ', JSON.stringify(data[0], null, 2)); - let maintainers = []; - - data.forEach((item) => { - let packageName = item.package.name; - item.package.maintainers.forEach((maintainer) => { - let username = maintainer.username; - addMaintainerForPackage(maintainers, packageName, username); + data.forEach((dep) => { + dep.package.maintainers.forEach((maintainer) => { + const record = maintainers.find((obj) => { + return obj.username === maintainer.username; + }); + if (!record) { + const newRecord = { + username: maintainer.username, + packageNames: [dep.package.name], + }; + maintainers.push(newRecord); + } else { + record.packageNames.push(dep.package.name); + } }); - return maintainers; }); - console.log(maintainers); + // console.log('DATA : ', JSON.stringify(data[0], null, 2)); return maintainers; -}; \ No newline at end of file +}; From ff1da7f90cd3f43a7ea261b319c1206ea6d3a3e0 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 14:35:14 +0200 Subject: [PATCH 04/11] REDONE: 1-reading-writing-files --- .../1-reading-writing-files/src/index.js | 66 ++++--------------- 1 file changed, 14 insertions(+), 52 deletions(-) diff --git a/requirement-sets/1-reading-writing-files/src/index.js b/requirement-sets/1-reading-writing-files/src/index.js index 916db0e..5827354 100644 --- a/requirement-sets/1-reading-writing-files/src/index.js +++ b/requirement-sets/1-reading-writing-files/src/index.js @@ -1,61 +1,23 @@ const fs = require('fs'); -function checkPosition(data) { - const answers = []; - const dataArray = data.toString().toUpperCase().split('\r\n'); +const data = fs.readFileSync('../input.txt'); +const dataArray = data.toString().toUpperCase().trim().split('\r\n'); +console.log(dataArray); +function checkPosition(data) { + let count = 0; dataArray.forEach((el) => { - const counts = { - W: 0, - E: 0, - N: 0, - S: 0, - }; - + const counts = { W: 0, E: 0, N: 0, S: 0 }; el.split('').forEach((letter) => (counts[letter] += 1)); - - answers.push(counts.W === counts.E && counts.S === counts.N); + if (counts.W === counts.E && counts.S === counts.N) count += 1; }); - return answers; + const output = `count: ${count}`; + fs.writeFile('../answer.txt', output, (err) => { + if (err) { + console.error(err); + } + }); + return count; } -const data = fs.readFileSync('../input.txt'); console.log(checkPosition(data)); - -const findOrCreateMaintainer = (maintainers, maintainer) => { - const foundMaintainer = maintainers.find((entry) => { - return entry.username === maintainer; - }); - - if (foundMaintainer) return foundMaintainer; - - const createdMaintainer = { username: maintainer, packageNames: [] }; - maintainers.push(createdMaintainer); - return createdMaintainer; -}; - -const addMaintainerForPackage = (maintainers, packageName, maintainer) => { - const packages = findOrCreateMaintainer(maintainers, maintainer).packageNames; - packages.push(packageName); -}; - -module.exports = async function organiseMaintainers() { - const { data } = await axios.get( - 'https://api.npms.io/v2/search/suggestions?q=react' - ); - - console.log('DATA : ', JSON.stringify(data[0], null, 2)); - let maintainers = []; - - data.forEach((item) => { - let packageName = item.package.name; - item.package.maintainers.forEach((maintainer) => { - let username = maintainer.username; - addMaintainerForPackage(maintainers, packageName, username); - }); - return maintainers; - }); - - // console.log(maintainers); - return maintainers; -}; From 3331d8d8de670dc8f7aa85ea48ebfc5a93251528 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 17:07:06 +0200 Subject: [PATCH 05/11] 2-coding-test: longest-sequence.js --- .../spec/support/longest-sequence.spec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js diff --git a/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js b/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js new file mode 100644 index 0000000..ef08d9c --- /dev/null +++ b/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js @@ -0,0 +1,12 @@ +const longest_sequence = require('../../src/longest-sequence.js'); + +describe('Longest sequence', () => { + it('sequence 1', () => { + expect(longest_sequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }); + }); + it('sequence 2', () => { + expect(longest_sequence('rrftghuuytredswwsdxxxxxxxxxxgftrgr')).toEqual({ + x: 10, + }); + }); +}); From d9b5caa4159b29ad6f09864ff161b7752631e056 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 17:28:46 +0200 Subject: [PATCH 06/11] test --- .../spec/support/longest-sequence.spec.js | 6 ++-- .../2-coding-tests/src/longest-sequence.js | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 requirement-sets/2-coding-tests/src/longest-sequence.js diff --git a/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js b/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js index ef08d9c..95cada7 100644 --- a/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js +++ b/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js @@ -1,11 +1,11 @@ -const longest_sequence = require('../../src/longest-sequence.js'); +const longestSequence = require('../../src/longest-sequence.js'); describe('Longest sequence', () => { it('sequence 1', () => { - expect(longest_sequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }); + expect(longestSequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }); }); it('sequence 2', () => { - expect(longest_sequence('rrftghuuytredswwsdxxxxxxxxxxgftrgr')).toEqual({ + expect(longestSequence('rrftghuuytredswwsdxxxxxxxxxxgftrgr')).toEqual({ x: 10, }); }); diff --git a/requirement-sets/2-coding-tests/src/longest-sequence.js b/requirement-sets/2-coding-tests/src/longest-sequence.js new file mode 100644 index 0000000..d8eec85 --- /dev/null +++ b/requirement-sets/2-coding-tests/src/longest-sequence.js @@ -0,0 +1,30 @@ +const longestSequence = (str) => { + let longestSequence = { a: 0 }; + let currentSequence = {}; + + for (let i = 0; i < str.length - 1; i++) { + const char = str[i].toLowerCase(); + const nextChar = str[i + 1].toLowerCase(); + + if (!currentSequence[char]) { + currentSequence = {}; + currentSequence[char] = 1; + } + + if (char === nextChar) { + currentSequence[char] += 1; + } + if (Object.values(currentSequence)[0] > Object.values(longestSequence)[0]) { + longestSequence = { ...currentSequence }; + } else if ( + Object.values(currentSequence)[0] === Object.values(longestSequence)[0] + ) { + if (Object.keys(currentSequence)[0] < Object.keys(longestSequence)[0]) { + longestSequence = { ...currentSequence }; + } + } + } + return longestSequence; +}; + +module.exports = longestSequence; From 0825030608b9aaa778b93fa1e53a02702650ef75 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 17:35:42 +0200 Subject: [PATCH 07/11] added answer.txt --- requirement-sets/1-reading-writing-files/answer.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirement-sets/1-reading-writing-files/answer.txt diff --git a/requirement-sets/1-reading-writing-files/answer.txt b/requirement-sets/1-reading-writing-files/answer.txt new file mode 100644 index 0000000..dc34aa9 --- /dev/null +++ b/requirement-sets/1-reading-writing-files/answer.txt @@ -0,0 +1 @@ +count: 3 \ No newline at end of file From 8036094944d406176f416b7b9eae736666cb43d9 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 18:20:15 +0200 Subject: [PATCH 08/11] longest sequence spec --- requirement-sets/2-coding-tests/.eslintrc.js | 10 ++++---- .../{support => }/longest-sequence.spec.js | 14 +++++------ .../2-coding-tests/src/longest-sequence.js | 24 +++++++++---------- 3 files changed, 23 insertions(+), 25 deletions(-) rename requirement-sets/2-coding-tests/spec/{support => }/longest-sequence.spec.js (67%) diff --git a/requirement-sets/2-coding-tests/.eslintrc.js b/requirement-sets/2-coding-tests/.eslintrc.js index 022b148..37b9ee6 100644 --- a/requirement-sets/2-coding-tests/.eslintrc.js +++ b/requirement-sets/2-coding-tests/.eslintrc.js @@ -2,14 +2,12 @@ module.exports = { env: { commonjs: true, es2021: true, - node: true + node: true, + jest: true }, - extends: [ - 'standard' - ], + extends: ['standard'], parserOptions: { ecmaVersion: 'latest' }, - rules: { - } + rules: {} } diff --git a/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js b/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js similarity index 67% rename from requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js rename to requirement-sets/2-coding-tests/spec/longest-sequence.spec.js index 95cada7..76b95d5 100644 --- a/requirement-sets/2-coding-tests/spec/support/longest-sequence.spec.js +++ b/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js @@ -1,12 +1,12 @@ -const longestSequence = require('../../src/longest-sequence.js'); +const longestSequence = require('../src/longest-sequence.js') describe('Longest sequence', () => { it('sequence 1', () => { - expect(longestSequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }); - }); + expect(longestSequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }) + }) it('sequence 2', () => { expect(longestSequence('rrftghuuytredswwsdxxxxxxxxxxgftrgr')).toEqual({ - x: 10, - }); - }); -}); + x: 10 + }) + }) +}) diff --git a/requirement-sets/2-coding-tests/src/longest-sequence.js b/requirement-sets/2-coding-tests/src/longest-sequence.js index d8eec85..a6b5a38 100644 --- a/requirement-sets/2-coding-tests/src/longest-sequence.js +++ b/requirement-sets/2-coding-tests/src/longest-sequence.js @@ -1,30 +1,30 @@ const longestSequence = (str) => { - let longestSequence = { a: 0 }; - let currentSequence = {}; + let longestSequence = { a: 0 } + let currentSequence = {} for (let i = 0; i < str.length - 1; i++) { - const char = str[i].toLowerCase(); - const nextChar = str[i + 1].toLowerCase(); + const char = str[i].toLowerCase() + const nextChar = str[i + 1].toLowerCase() if (!currentSequence[char]) { - currentSequence = {}; - currentSequence[char] = 1; + currentSequence = {} + currentSequence[char] = 1 } if (char === nextChar) { - currentSequence[char] += 1; + currentSequence[char] += 1 } if (Object.values(currentSequence)[0] > Object.values(longestSequence)[0]) { - longestSequence = { ...currentSequence }; + longestSequence = { ...currentSequence } } else if ( Object.values(currentSequence)[0] === Object.values(longestSequence)[0] ) { if (Object.keys(currentSequence)[0] < Object.keys(longestSequence)[0]) { - longestSequence = { ...currentSequence }; + longestSequence = { ...currentSequence } } } } - return longestSequence; -}; + return longestSequence +} -module.exports = longestSequence; +module.exports = longestSequence From 58b8efc656b828374f499f191c43ed2ee96f7637 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Wed, 20 Jul 2022 19:07:03 +0200 Subject: [PATCH 09/11] could not fix linting problems --- requirement-sets/2-coding-tests/.eslintrc.js | 8 +- .../2-coding-tests/package-lock.json | 121 +++++++++++++++++- 2 files changed, 124 insertions(+), 5 deletions(-) diff --git a/requirement-sets/2-coding-tests/.eslintrc.js b/requirement-sets/2-coding-tests/.eslintrc.js index 37b9ee6..e2aae0e 100644 --- a/requirement-sets/2-coding-tests/.eslintrc.js +++ b/requirement-sets/2-coding-tests/.eslintrc.js @@ -3,11 +3,11 @@ module.exports = { commonjs: true, es2021: true, node: true, - jest: true + jasmine: true, }, extends: ['standard'], parserOptions: { - ecmaVersion: 'latest' + ecmaVersion: 'latest', }, - rules: {} -} + rules: {}, +}; diff --git a/requirement-sets/2-coding-tests/package-lock.json b/requirement-sets/2-coding-tests/package-lock.json index c4e3e7a..32d6cb0 100644 --- a/requirement-sets/2-coding-tests/package-lock.json +++ b/requirement-sets/2-coding-tests/package-lock.json @@ -12,13 +12,23 @@ "jasmine": "^4.2.1" }, "devDependencies": { + "@boolean-uk/boolean-prettier-config": "^1.0.2", "eslint": "^8.18.0", + "eslint-config-prettier": "^8.5.0", "eslint-config-standard": "^17.0.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-n": "^15.2.3", - "eslint-plugin-promise": "^6.0.0" + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-promise": "^6.0.0", + "prettier": "^2.6.1" } }, + "node_modules/@boolean-uk/boolean-prettier-config": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@boolean-uk/boolean-prettier-config/-/boolean-prettier-config-1.0.2.tgz", + "integrity": "sha512-I2Bv0GNk5vFcLgY9XLAoILkZ4EgEOclYmpy2dL/kgNG2ZZ7iuvPtY9Oaw5xWM2rc9L4LPWiATKdrESHYebOQ9w==", + "dev": true + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -445,6 +455,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", @@ -634,6 +656,27 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-promise": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", @@ -757,6 +800,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1544,6 +1593,33 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1883,6 +1959,12 @@ } }, "dependencies": { + "@boolean-uk/boolean-prettier-config": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@boolean-uk/boolean-prettier-config/-/boolean-prettier-config-1.0.2.tgz", + "integrity": "sha512-I2Bv0GNk5vFcLgY9XLAoILkZ4EgEOclYmpy2dL/kgNG2ZZ7iuvPtY9Oaw5xWM2rc9L4LPWiATKdrESHYebOQ9w==", + "dev": true + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -2208,6 +2290,13 @@ "v8-compile-cache": "^2.0.3" } }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, "eslint-config-standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", @@ -2347,6 +2436,15 @@ "semver": "^7.3.7" } }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-plugin-promise": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", @@ -2434,6 +2532,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3008,6 +3112,21 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", From 621aad4d07954a9ccc3f810c455b9d29257541e4 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Thu, 21 Jul 2022 14:04:00 +0200 Subject: [PATCH 10/11] longest-sequence-test-fail --- .../spec/longest-sequence.spec.js | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js b/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js index 76b95d5..611f7ea 100644 --- a/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js +++ b/requirement-sets/2-coding-tests/spec/longest-sequence.spec.js @@ -1,12 +1,21 @@ -const longestSequence = require('../src/longest-sequence.js') +const longest_sequence = require('../src/longest-sequence.js'); describe('Longest sequence', () => { - it('sequence 1', () => { - expect(longestSequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }) - }) - it('sequence 2', () => { - expect(longestSequence('rrftghuuytredswwsdxxxxxxxxxxgftrgr')).toEqual({ - x: 10 - }) - }) -}) + it('scenario 1', () => { + expect(longest_sequence('dghhhmhmx')).toEqual({ h: 3 }); + }); + it('scenario 2', () => { + expect(longest_sequence('dhkkhhKKKt')).toEqual({ k: 3 }); + }); + it('scenario 3', () => { + expect(longest_sequence('aBbBadddadd')).toEqual({ b: 3 }); + }); + it('scenario 4', () => { + expect(longest_sequence('gggttrfdesdcxzzzzzzzzzz')).toEqual({ z: 10 }); + }); + it('scenario 5', () => { + expect(longest_sequence('jshetdrefdddesawwesdcxzwwwwwwwwww')).toEqual({ + w: 10, + }); + }); +}); From d4de2500590414208a8f656c80241c085690b9d7 Mon Sep 17 00:00:00 2001 From: AlexDjangoX Date: Thu, 21 Jul 2022 14:31:18 +0200 Subject: [PATCH 11/11] longest-sequence-test-fail --- .../2-coding-tests/src/longest-sequence.js | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/requirement-sets/2-coding-tests/src/longest-sequence.js b/requirement-sets/2-coding-tests/src/longest-sequence.js index a6b5a38..6f6f177 100644 --- a/requirement-sets/2-coding-tests/src/longest-sequence.js +++ b/requirement-sets/2-coding-tests/src/longest-sequence.js @@ -1,30 +1,45 @@ -const longestSequence = (str) => { - let longestSequence = { a: 0 } - let currentSequence = {} +const longest_sequence = (str) => { + // the longest sequence + let longestSequence = { a: 0 }; + // the current sequence + let currentSequence = {}; + // loop for (let i = 0; i < str.length - 1; i++) { - const char = str[i].toLowerCase() - const nextChar = str[i + 1].toLowerCase() + // 1. find the current char + const char = str[i].toLowerCase(); + // 2. find the next char + const nextChar = str[i + 1].toLowerCase(); + // reset the current sequence if (!currentSequence[char]) { - currentSequence = {} - currentSequence[char] = 1 + currentSequence = {}; + currentSequence[char] = 1; } + // check the next char if (char === nextChar) { - currentSequence[char] += 1 - } - if (Object.values(currentSequence)[0] > Object.values(longestSequence)[0]) { - longestSequence = { ...currentSequence } - } else if ( - Object.values(currentSequence)[0] === Object.values(longestSequence)[0] - ) { - if (Object.keys(currentSequence)[0] < Object.keys(longestSequence)[0]) { - longestSequence = { ...currentSequence } + currentSequence[char] += 1; + } else { + // update the longest sequence if 1. is longer, 2. is the same and alphabetically earlier + // look at the values, compare them? + if ( + Object.values(currentSequence)[0] > Object.values(longestSequence)[0] + ) { + // if the current sequence is longer, we update longest sequence + longestSequence = { ...currentSequence }; + // 2. is the same and alphabetically earlier + } else if ( + Object.values(currentSequence)[0] === Object.values(longestSequence)[0] + ) { + if (Object.keys(currentSequence)[0] < Object.keys(currentSequence)[0]) { + longestSequence = { ...currentSequence }; + } } } } - return longestSequence -} -module.exports = longestSequence + return longestSequence; +}; + +module.exports = longest_sequence;