diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f3a32af
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# Node
+node_modules
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..44ba191
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "editor.tabSize": 2
+ }
\ No newline at end of file
diff --git a/README.md b/README.md
index 7ff967a..552d173 100644
--- a/README.md
+++ b/README.md
@@ -10,35 +10,37 @@
1. [Javascript Specific](#javascript)
1. To Be Continued
+## Want to Test Solutions ?
+__[Demo and testing](demo)__
+ - `npm install` or `yarn install`
+ - `npm test`
+
## Array
- **[1.1](#array--product) Given an array of integers, find the largest product yielded from three of the integers**
+ [Testing](demo/array/array-product.spec.js)
```javascript
- var unsortedArray = [-10, 7, 29, 30, 5, -10, -70];
+ const unsortedArray = [-10, 7, 29, 30, 5, -10, -70];
computeProduct(unsortedArray); // 21000
- function sortIntegers(a, b) {
- return a - b;
- }
+ const sortIntegers = (a, b) => a - b;
// Greatest product is either (min1 * min2 * max1 || max1 * max2 * max3)
- function computeProduct(unsorted) {
- var sortedArray = unsorted.sort(sortIntegers),
- product1 = 1,
- product2 = 1,
- array_n_element = sortedArray.length - 1;
+ const computeProduct = (unsorted) => {
+ const sortedArray = unsorted.sort(sortIntegers);
+ let product1 = 1;
+ let product2 = 1;
+ const array_n_element = sortedArray.length - 1;
// Get the product of three largest integers in sorted array
- for (var x = array_n_element; x > array_n_element - 3; x--) {
+ for (let x = array_n_element; x > array_n_element - 3; x--) {
product1 = product1 * sortedArray[x];
}
product2 = sortedArray[0] * sortedArray[1] * sortedArray[array_n_element];
- if (product1 > product2) return product1;
-
- return product2;
+ return product1 > product2 ? product1 : product2;
}
```
**View on Codepen:** https://codepen.io/kennymkchan/pen/LxoMvm?editors=0012
diff --git a/demo/array/array-product.js b/demo/array/array-product.js
new file mode 100644
index 0000000..4bc6171
--- /dev/null
+++ b/demo/array/array-product.js
@@ -0,0 +1,20 @@
+const sortIntegers = (a, b) => a - b;
+
+// Greatest product is either (min1 * min2 * max1 || max1 * max2 * max3)
+const computeProduct = (unsorted) => {
+ const sortedArray = unsorted.sort(sortIntegers);
+ let product1 = 1;
+ let product2 = 1;
+ const array_n_element = sortedArray.length - 1;
+
+ // Get the product of three largest integers in sorted array
+ for (let x = array_n_element; x > array_n_element - 3; x--) {
+ product1 = product1 * sortedArray[x];
+ }
+
+ product2 = sortedArray[0] * sortedArray[1] * sortedArray[array_n_element];
+
+ return product1 > product2 ? product1 : product2;
+}
+
+module.exports = computeProduct;
\ No newline at end of file
diff --git a/demo/array/array-product.spec.js b/demo/array/array-product.spec.js
new file mode 100644
index 0000000..ce40b7e
--- /dev/null
+++ b/demo/array/array-product.spec.js
@@ -0,0 +1,12 @@
+const chai = require('chai');
+const computeProduct = require('./array-product');
+const expect = chai.expect;
+
+describe('computeProduct', () => {
+
+ it('computeProduct should be 21000', () => {
+ const unsortedArray = [-10, 7, 29, 30, 5, -10, -70];
+ expect(computeProduct(unsortedArray)).to.be.equal(21000);
+ });
+
+});
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3c3c386
--- /dev/null
+++ b/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "interview-questions-in-javascript",
+ "version": "0.0.1",
+ "description": "Interview Questions in JavaScript with testing",
+ "main": "index.js",
+ "scripts": {
+ "test": "node_modules/.bin/mocha 'demo/**/*.spec.js'"
+ },
+ "repository": "git+https://github.com/kennymkchan/interview-questions-in-javascript.git",
+ "keywords": [
+ "javascript",
+ "interview"
+ ],
+ "author": "Kenny Chan",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/kennymkchan/interview-questions-in-javascript/issues"
+ },
+ "homepage": "https://github.com/kennymkchan/interview-questions-in-javascript#readme",
+ "devDependencies": {
+ "chai": "^3.5.0",
+ "mocha": "^3.2.0"
+ },
+ "engines" : {
+ "node" : ">= 6"
+ }
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..b3e122e
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,213 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+assertion-error@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+
+chai@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
+ dependencies:
+ assertion-error "^1.0.1"
+ deep-eql "^0.1.3"
+ type-detect "^1.0.0"
+
+commander@2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+debug@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+deep-eql@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
+ dependencies:
+ type-detect "0.1.1"
+
+diff@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
+
+escape-string-regexp@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+glob@7.0.5:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+mkdirp@0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+mocha@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3"
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.2.0"
+ diff "1.4.0"
+ escape-string-regexp "1.0.5"
+ glob "7.0.5"
+ growl "1.9.2"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+supports-color@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
+type-detect@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
+
+type-detect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"