Advertisement
svetlai

Clojure Edited

Jun 9th, 2015
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Solve(input) {
  2.     counter = 0;
  3.     var variables = {};
  4.     var lines = input.map(function (item) {
  5.         item = item.trim();
  6.         return item;
  7.     });
  8.  
  9.     for (var m = 0; m < lines.length; m += 1) {
  10.         if (lines[m].indexOf('  ') !== -1) {
  11.             lines[m] = lines[m].split(' ').filter(function (n) {
  12.                 return n != ''
  13.             }).join(' ');
  14.         }
  15.     }
  16.  
  17.  
  18.     for (var i = 0; i < lines.length; i += 1) {
  19.         var currentLine = lines[i],
  20.             operator = '',
  21.             currentVariable = '',
  22.             currentArrayAsString,
  23.             currentArray = [];
  24.  
  25.         if (lines[i] !== lines[lines.length - 1]) {
  26.  
  27.             currentVariable = currentLine.substring(currentLine.indexOf('(def ') + '(def '.length,
  28.                 currentLine.indexOf(' ', currentLine.indexOf('(def ') + '(def '.length + 1));
  29.         }
  30.  
  31.         currentArrayAsString = currentLine.substring(currentLine.indexOf
  32.         (currentVariable) + currentVariable.length + 1, currentLine.length - 1);
  33.  
  34.         if (currentArrayAsString[0] === '(' && currentArrayAsString[currentArrayAsString.length - 1] === ')') {
  35.             currentArrayAsString = currentArrayAsString.substring(3, currentArrayAsString.length - 1)   // edited
  36.         }
  37.  
  38.         if (currentArrayAsString[0] == '+' ||
  39.             currentArrayAsString[0] == '*' ||
  40.             currentArrayAsString[0] == '/' ||
  41.             currentArrayAsString[0] == '-') {
  42.  
  43.             currentArrayAsString = currentArrayAsString.substring(1, currentArrayAsString.length).trim();
  44.         }
  45.  
  46.         currentArray = currentArrayAsString.split(' ');
  47.  
  48.         for (var j = 0; j < currentLine.length; j += 1) {
  49.             var currentSymbol = currentLine[j];
  50.  
  51.             if (currentSymbol == ' ') {
  52.                 continue;
  53.             }
  54.  
  55.             if (currentSymbol === '+' || currentSymbol === '-' ||
  56.                 currentSymbol === '/' || currentSymbol === '*') {
  57.                 operator = currentSymbol
  58.             }
  59.         }
  60.  
  61.         if (currentArray.length > 0) {
  62.             for (var d = 0; d < currentArray.length; d += 1) {
  63.                 var current = currentArray[d].trim();
  64.                 if (variables[current] || variables[current] === 0) {
  65.                     currentArray[d] = variables[current];
  66.                 }
  67.             }
  68.             currentArray = currentArray.reduce(flatten, []).map(Number);
  69.         }
  70.         counter++;
  71.  
  72.         // start edit
  73.         var value = getOperation(operator, currentArray);
  74.  
  75.         if (isNaN(value)){
  76.             return value;
  77.         }
  78.  
  79.         variables[currentVariable] = value;
  80.         // end edit
  81.     }
  82.  
  83.     return variables[currentVariable];  // edit
  84.  
  85.     function flatten(arr, item) {
  86.         if (Array.isArray(item)) {
  87.             return arr.concat(item);
  88.         }
  89.         return arr.concat([item]);
  90.     }
  91.  
  92.     function getOperation(operator, arr) {
  93.  
  94.         if (arr.length == 1) {
  95.             return arr[0];
  96.         }
  97.  
  98.         switch (operator) {
  99.             case '+':
  100.                 return sum(arr);
  101.             case '-':
  102.                 return subtract(arr);
  103.             case '*':
  104.                 return multiplication(arr);
  105.             case '/':
  106.                 return division(arr);
  107.             default :
  108.                 return arr;
  109.         }
  110.     }
  111.  
  112.     function sum(arr) {
  113.         var sum = 0;
  114.         for (var i = 0; i < arr.length; i += 1) {
  115.             sum += arr[i];
  116.         }
  117.         return sum;
  118.     }
  119.  
  120.     function subtract(arr) {
  121.         var differences = 0;
  122.         for (var i = 0; i < arr.length; i += 1) {
  123.             differences -= arr[i];
  124.         }
  125.         return differences;
  126.     }
  127.  
  128.     function division(arr) {
  129.         var result = arr[0];
  130.         for (var z = 1; z < arr.length; z += 1) {
  131.             if (arr[z] == 0) {
  132.                 return 'Division by zero! At Line: ' + counter; // edit
  133.             }
  134.             result = Math.floor(result / arr[z]);
  135.         }
  136.         return result;
  137.     }
  138.  
  139.     function multiplication(arr) {
  140.         var result = 1;
  141.         for (var i = 0; i < arr.length; i += 1) {
  142.             result *= arr[i];
  143.         }
  144.         return result;
  145.     }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement