diff --git a/index.js b/index.js index 8b13789..d4e2549 100644 --- a/index.js +++ b/index.js @@ -1 +1,124 @@ +const readline = require('readline'); +const add = require("./modules/add"); +const subtract = require("./modules/subtract"); +const multiply = require("./modules/multiply"); +const divide = require("./modules/divide"); +const assignVariable = require("./modules/assignVariable"); +const {lessThan, greaterThan, isEqual, isNotEqual} = require("./modules/boolean"); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + +function prompt(){ + rl.question('What would you like to calculate? ', (answer) => { + calculate(answer); + prompt(); + }) +} +prompt(); + +function determineOperator(string){ + let regex = /[\/\+\-\*\>\<\=\!]/g; + let opLocStart = string.search(regex) + let opLocBoolEnd = opLocStart+3; + let operation = string.charAt(opLocStart); + if(opLocStart === -1){ + return false; + } + else if(operation == '=' || operation == '!'){ + let boolOp = string.slice(opLocStart, opLocBoolEnd); + if(boolOp == '==='){ + return ["===", opLocStart]; + } + else if(boolOp == '!=='){ + return ["!==", opLocStart]; + } + else if (operation == '='){ + return ['=', opLocStart]; + } + else{ + return false; + } + } + else if(operation.match(regex)){ + return [operation, opLocStart]; + } +} + +function calculate(answer){ + let expression = answer; + if (determineOperator(expression)){ + let [operation, location] = determineOperator(expression); + if((operation == '===')||(operation == '!==')){ + let charAfterOp = location + 3; + let num1Str = expression.slice(0, location).trim(); + let num2Str = expression.slice(charAfterOp, expression.length).trim() + let num1 = Number(num1Str); + let num2 = Number(num2Str); + if(!num1 || !num2){ + + console.log("please enter expression in the following format: ") + console.log("number operation number") + } + else if(operation == '==='){ + isEqual(num1, num2); + } + else if(operation == '!=='){ + isNotEqual(num1, num2); + } + } + + else{ + let charAfterOp = location + 1; + let num1Str = expression.slice(0, location).trim(); + let varName = num1Str; + let num2Str = expression.slice(charAfterOp, expression.length).trim() + let num1 = Number(num1Str); + let num2 = Number(num2Str); + if(operation == '='){ + if (num2){ + assignVariable(varName, num2) + } + else { + let string = num2Str.split(/"/)[1]; + assignVariable(varName, string); + } + + } + else if(!num1 || !num2){ + console.log("please enter expression in the following format: ") + console.log("number operator number") + } + + else if (operation === '+'){ + add(num1, num2) + } + else if(operation === '-'){ + subtract(num1, num2); + } + else if(operation === '*'){ + multiply(num1, num2); + } + else if(operation === '/'){ + divide(num1, num2); + } + else if(operation === '<'){ + lessThan(num1, num2); + } + else if(operation === '>'){ + greaterThan(num1, num2); + } + } + } + else{ + if(global[answer]){ + console.log(global[answer]); + } + else{ + console.log("please enter valid mathematical oprator"); + } + } +} \ No newline at end of file diff --git a/modules/add.js b/modules/add.js new file mode 100644 index 0000000..d2d00d3 --- /dev/null +++ b/modules/add.js @@ -0,0 +1,4 @@ +function add (num1, num2){ + console.log(num1+num2); +} +module.exports = add; \ No newline at end of file diff --git a/modules/assignVariable.js b/modules/assignVariable.js new file mode 100644 index 0000000..96d4f98 --- /dev/null +++ b/modules/assignVariable.js @@ -0,0 +1,4 @@ +function assignVariable (varName, value){ + global[varName] = value; +} +module.exports = assignVariable; \ No newline at end of file diff --git a/modules/boolean.js b/modules/boolean.js new file mode 100644 index 0000000..50b823d --- /dev/null +++ b/modules/boolean.js @@ -0,0 +1,15 @@ +module.exports.lessThan = function lessThan(num1, num2){ + console.log(num1 < num2); +} + +module.exports.greaterThan = function greaterThan(num1, num2){ + console.log(num1 > num2); +} + +module.exports.isEqual = function isEqual(num1, num2){ + console.log(num1 == num2); +} + +module.exports.isNotEqual = function isEqual(num1, num2){ + console.log(num1 != num2); +} diff --git a/modules/divide.js b/modules/divide.js new file mode 100644 index 0000000..2b47ad6 --- /dev/null +++ b/modules/divide.js @@ -0,0 +1,4 @@ +function divide (num1, num2){ + console.log(num1/num2); +} +module.exports = divide; \ No newline at end of file diff --git a/modules/multiply.js b/modules/multiply.js new file mode 100644 index 0000000..aaf7908 --- /dev/null +++ b/modules/multiply.js @@ -0,0 +1,4 @@ +function multiply (num1, num2){ + console.log(num1*num2); +} +module.exports = multiply; \ No newline at end of file diff --git a/modules/subtract.js b/modules/subtract.js new file mode 100644 index 0000000..3013dd3 --- /dev/null +++ b/modules/subtract.js @@ -0,0 +1,4 @@ +function subtract (num1, num2){ + console.log(num1-num2); +} +module.exports = subtract; \ No newline at end of file