diff --git a/package-lock.json b/package-lock.json index d3a3ed4..dcbb699 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { + "chai": "^4.3.9", "eslint": "^8.2.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^8.5.0", @@ -1504,6 +1505,15 @@ "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1911,6 +1921,24 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, + "node_modules/chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1927,6 +1955,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -2256,6 +2296,18 @@ "node": ">=0.10" } }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3506,6 +3558,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -5367,6 +5428,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6004,6 +6074,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9570,6 +9649,12 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -9890,6 +9975,21 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, + "chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -9900,6 +10000,15 @@ "supports-color": "^7.1.0" } }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -10169,6 +10278,15 @@ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -11133,6 +11251,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, "get-intrinsic": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", @@ -12571,6 +12695,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -13063,6 +13196,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", diff --git a/package.json b/package.json index d25c42c..2925f7c 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "author": "Ashok Dey (http://ashokdey.in)", "license": "MIT", "devDependencies": { + "chai": "^4.3.9", "eslint": "^8.2.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^8.5.0", diff --git a/src/_Problems_/Century_fromYear/Century_fromYear.test.js b/src/_Problems_/Century_fromYear/Century_fromYear.test.js new file mode 100644 index 0000000..fccea58 --- /dev/null +++ b/src/_Problems_/Century_fromYear/Century_fromYear.test.js @@ -0,0 +1,19 @@ +const { expect } = require('chai'); +const getCentury = require('./index'); + +describe('Century Calculation Function', () => { + it('should return the correct century for the year 45', () => { + const result = getCentury(45); + expect(result).to.equal(1); + }); + + it('should return the correct century for the year 175', () => { + const result = getCentury(175); + expect(result).to.equal(2); + }); + + it('should return the correct century for the year 2023', () => { + const result = getCentury(2023); + expect(result).to.equal(21); + }); +}); diff --git a/src/_Problems_/Century_fromYear/index.js b/src/_Problems_/Century_fromYear/index.js new file mode 100644 index 0000000..39316cb --- /dev/null +++ b/src/_Problems_/Century_fromYear/index.js @@ -0,0 +1,7 @@ +function getCentury(year) { + // Your century calculation logic here + return Math.ceil(year / 100); +} + +// Export the getCentury function for testing +module.exports = getCentury; diff --git a/src/_Problems_/convert-to-milliseconds/convert-to-milliseconds.test.js b/src/_Problems_/convert-to-milliseconds/convert-to-milliseconds.test.js new file mode 100644 index 0000000..da0f73b --- /dev/null +++ b/src/_Problems_/convert-to-milliseconds/convert-to-milliseconds.test.js @@ -0,0 +1,19 @@ +const { expect } = require('chai'); +const timeSinceMidnight = require('./index'); + +describe('Time Since Midnight Calculation', () => { + it('should return the correct time in milliseconds for 1 hour, 15 minutes, and 30 seconds', () => { + const result = timeSinceMidnight(1, 15, 30); + expect(result).to.equal(4530000); + }); + + it('should return 0 milliseconds for midnight (0 hours, 0 minutes, 0 seconds)', () => { + const result = timeSinceMidnight(0, 0, 0); + expect(result).to.equal(0); + }); + + it('should return the correct time in milliseconds for 23 hours, 59 minutes, and 59 seconds', () => { + const result = timeSinceMidnight(23, 59, 59); + expect(result).to.equal(86399000); + }); +}); diff --git a/src/_Problems_/convert-to-milliseconds/index.js b/src/_Problems_/convert-to-milliseconds/index.js new file mode 100644 index 0000000..77f9a78 --- /dev/null +++ b/src/_Problems_/convert-to-milliseconds/index.js @@ -0,0 +1,6 @@ +function timeSinceMidnight(h, m, s) { + // Convert hours, minutes, and seconds to milliseconds and calculate the total + return (h * 3600 + m * 60 + s) * 1000; +} + +module.exports = timeSinceMidnight; diff --git a/src/_Problems_/roman-numerals-encoder/index.js b/src/_Problems_/roman-numerals-encoder/index.js new file mode 100644 index 0000000..cc4c026 --- /dev/null +++ b/src/_Problems_/roman-numerals-encoder/index.js @@ -0,0 +1,18 @@ +function integerToRoman(num) { + // Define the Roman numeral symbols and their corresponding values + const symbols = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']; + const values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; + + let romanNumeral = ''; + + for (let i = 0; i < symbols.length; i++) { + while (num >= values[i]) { + romanNumeral += symbols[i]; + num -= values[i]; + } + } + + return romanNumeral; +} + +module.exports = integerToRoman; diff --git a/src/_Problems_/roman-numerals-encoder/roman-numerals-encoder.test.js b/src/_Problems_/roman-numerals-encoder/roman-numerals-encoder.test.js new file mode 100644 index 0000000..71fcc6e --- /dev/null +++ b/src/_Problems_/roman-numerals-encoder/roman-numerals-encoder.test.js @@ -0,0 +1,24 @@ +const { expect } = require('chai'); +const integerToRoman = require('./index'); + +describe('Integer to Roman Numeral Conversion', () => { + it('should return "IV" for the integer 4', () => { + const result = integerToRoman(4); + expect(result).to.equal('IV'); + }); + + it('should return "IX" for the integer 9', () => { + const result = integerToRoman(9); + expect(result).to.equal('IX'); + }); + + it('should return "LVIII" for the integer 58', () => { + const result = integerToRoman(58); + expect(result).to.equal('LVIII'); + }); + + it('should return "MCMXCIV" for the integer 1994', () => { + const result = integerToRoman(1994); + expect(result).to.equal('MCMXCIV'); + }); +});