diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..6f67564 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "airbnb-base" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25c8fdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..a72e87d --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "rsschool-codejam", + "version": "1.0.0", + "description": "Code Jam #2", + "main": "test.js", + "scripts": { + "test": "mocha", + "start": "node test.js", + "lint": "eslint src" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/AlexeyNovomlinets/rsschool-codejam.git" + }, + "author": "Alexey Novomlinets ", + "license": "MIT", + "bugs": { + "url": "https://github.com/AlexeyNovomlinets/rsschool-codejam/issues" + }, + "homepage": "https://github.com/AlexeyNovomlinets/rsschool-codejam#readme", + "dependencies": { + "mocha": "^5.2.0" + }, + "devDependencies": { + "eslint": "^5.8.0", + "eslint-config-airbnb-base": "^13.1.0", + "eslint-plugin-import": "^2.14.0" + } +} diff --git a/src/make.js b/src/make.js new file mode 100644 index 0000000..5d4bc90 --- /dev/null +++ b/src/make.js @@ -0,0 +1,10 @@ +const sum = (a, b) => a + b; +const make = (...args) => { + if (typeof args[0] === 'function') { + const func = args[0]; + return (this.arguments || []).reduce(func); + } + this.arguments = [...(this.arguments || []), ...args]; + return make; +}; +module.exports = { sum, make }; diff --git a/src/recursion.js b/src/recursion.js new file mode 100644 index 0000000..d1406ff --- /dev/null +++ b/src/recursion.js @@ -0,0 +1,11 @@ +const rec = (value) => { + const result = []; + const recursion = (val, i = 0) => { + result[i] = [...(result[i] || []), val.value]; + if (val.left) recursion(val.left, i + 1); + if (val.right) recursion(val.right, i + 1); + return result; + }; + return recursion(value); +}; +module.exports = rec; diff --git a/src/sumOfOther.js b/src/sumOfOther.js new file mode 100644 index 0000000..bf85428 --- /dev/null +++ b/src/sumOfOther.js @@ -0,0 +1,5 @@ +const sumOfOther = (value) => { + if (!Array.isArray(value)) throw new Error('Invalid input!'); + return value.map((e, ind) => value.reduce((acm, a, i) => (acm + (ind === i ? 0 : a)), 0)); +}; +module.exports = sumOfOther; diff --git a/test.js b/test.js new file mode 100644 index 0000000..f426e50 --- /dev/null +++ b/test.js @@ -0,0 +1,66 @@ +const assert = require('assert'); +const sumOfOther = require('./src/sumOfOther'); +const { sum, make } = require('./src/make'); +const recursion = require('./src/recursion'); + +describe('sumOfOther', () => { + it('1', () => { + const res = sumOfOther([2, 3, 4, 1]); + assert.deepEqual(res, [8, 7, 6, 9]); + }); + it('2', () => { + const res = sumOfOther([5, 3, 2, 8, 9, 1]); + assert.deepEqual(res, [23, 25, 26, 20, 19, 27]); + }); + it('3', () => { + const res = sumOfOther([1, 3, 4]); + assert.deepEqual(res, [7, 5, 4]); + }); + it('4', () => { + assert.throws(() => sumOfOther('abc')); + assert.throws(() => sumOfOther(2)); + assert.throws(() => sumOfOther({})); + }); +}); + +describe('make', () => { + it('1', () => { + const res = make(1)(3, 2, 6)(4, 0)(sum); + assert.deepEqual(res, 16); + }); + it('2', () => { + const res = make(1, 2)(3)(4, 1)(sum); + assert.deepEqual(res, 27); + }); + it('3', () => { + const res = make(2, 5, 1, 4)(3, 2)(4, 5)(sum); + assert.deepEqual(res, 53); + }); +}); + +describe('recursion', () => { + it('1', () => { + const res = recursion({ + value: 100, + left: { value: 90, left: { value: 70 }, right: { value: 99 } }, + right: { value: 120, left: { value: 110 }, right: { value: 130 } }, + }); + assert.deepEqual(res, [[100], [90, 120], [70, 99, 110, 130]]); + }); + it('2', () => { + const res = recursion({ + value: 10, + left: { value: 5 }, + right: { value: 12 }, + }); + assert.deepEqual(res, [[10], [5, 12]]); + }); + it('3', () => { + const res = recursion({ + value: 1111, + left: { value: 111, left: { value: 11 }, right: { value: 1111 } }, + right: { value: 11111 }, + }); + assert.deepEqual(res, [[1111], [111, 11111], [11, 1111]]); + }); +});