Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Solve(input) {
- counter = 0;
- var variables = {};
- var lines = input.map(function (item) {
- item = item.trim();
- return item;
- });
- for (var m = 0; m < lines.length; m += 1) {
- if (lines[m].indexOf(' ') !== -1) {
- lines[m] = lines[m].split(' ').filter(function (n) {
- return n != ''
- }).join(' ');
- }
- }
- for (var i = 0; i < lines.length; i += 1) {
- var currentLine = lines[i],
- operator = '',
- currentVariable = '',
- currentArrayAsString,
- currentArray = [];
- if (lines[i] !== lines[lines.length - 1]) {
- currentVariable = currentLine.substring(currentLine.indexOf('(def ') + '(def '.length,
- currentLine.indexOf(' ', currentLine.indexOf('(def ') + '(def '.length + 1));
- }
- currentArrayAsString = currentLine.substring(currentLine.indexOf
- (currentVariable) + currentVariable.length + 1, currentLine.length - 1);
- if (currentArrayAsString[0] === '(' && currentArrayAsString[currentArrayAsString.length - 1] === ')') {
- currentArrayAsString = currentArrayAsString.substring(3, currentArrayAsString.length - 1) // edited
- }
- if (currentArrayAsString[0] == '+' ||
- currentArrayAsString[0] == '*' ||
- currentArrayAsString[0] == '/' ||
- currentArrayAsString[0] == '-') {
- currentArrayAsString = currentArrayAsString.substring(1, currentArrayAsString.length).trim();
- }
- currentArray = currentArrayAsString.split(' ');
- for (var j = 0; j < currentLine.length; j += 1) {
- var currentSymbol = currentLine[j];
- if (currentSymbol == ' ') {
- continue;
- }
- if (currentSymbol === '+' || currentSymbol === '-' ||
- currentSymbol === '/' || currentSymbol === '*') {
- operator = currentSymbol
- }
- }
- if (currentArray.length > 0) {
- for (var d = 0; d < currentArray.length; d += 1) {
- var current = currentArray[d].trim();
- if (variables[current] || variables[current] === 0) {
- currentArray[d] = variables[current];
- }
- }
- currentArray = currentArray.reduce(flatten, []).map(Number);
- }
- counter++;
- // start edit
- var value = getOperation(operator, currentArray);
- if (isNaN(value)){
- return value;
- }
- variables[currentVariable] = value;
- // end edit
- }
- return variables[currentVariable]; // edit
- function flatten(arr, item) {
- if (Array.isArray(item)) {
- return arr.concat(item);
- }
- return arr.concat([item]);
- }
- function getOperation(operator, arr) {
- if (arr.length == 1) {
- return arr[0];
- }
- switch (operator) {
- case '+':
- return sum(arr);
- case '-':
- return subtract(arr);
- case '*':
- return multiplication(arr);
- case '/':
- return division(arr);
- default :
- return arr;
- }
- }
- function sum(arr) {
- var sum = 0;
- for (var i = 0; i < arr.length; i += 1) {
- sum += arr[i];
- }
- return sum;
- }
- function subtract(arr) {
- var differences = 0;
- for (var i = 0; i < arr.length; i += 1) {
- differences -= arr[i];
- }
- return differences;
- }
- function division(arr) {
- var result = arr[0];
- for (var z = 1; z < arr.length; z += 1) {
- if (arr[z] == 0) {
- return 'Division by zero! At Line: ' + counter; // edit
- }
- result = Math.floor(result / arr[z]);
- }
- return result;
- }
- function multiplication(arr) {
- var result = 1;
- for (var i = 0; i < arr.length; i += 1) {
- result *= arr[i];
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement