Advertisement
nikolov_k

task3

Apr 1st, 2013
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         function Solve(args) {
  2.             var func = {};
  3.             var result = 0;
  4.             for (var i = 0; i < args.length; i++) {
  5.                 while (args[i].match(/\(/g).length > 1) {
  6.                     var startPosition = args[i].indexOf("(", args[i].indexOf("(") + 1);
  7.                     var endPosition = args[i].indexOf(')', startPosition);
  8.                     var value = calculate(args[i].substring(startPosition + 1, endPosition), func);
  9.                     if (typeof (value) == "string") {
  10.                         return "Division by zero! At Line:" + (i + 1);
  11.                     }
  12.                     args[i] = args[i].substring(0, startPosition) + ' ' + value + args[i].substring(endPosition + 1);
  13.                 }
  14.                 var startPosition = args[i].indexOf("(") + 1;
  15.                 var endPosition = args[i].indexOf(')');
  16.                 result = calculate(args[i].substring(startPosition, endPosition), func);
  17.                 if (typeof (result) == "string") {
  18.                     return "Division by zero! At Line:" + (i + 1);
  19.                 }
  20.             }
  21.             return result;
  22.         }
  23.  
  24.         function calculate(text, func) {
  25.             var result = 0;
  26.             var expressionWithEmpty = text.split(' ');
  27.             var expression = [];
  28.             for (var i = 0; i < expressionWithEmpty.length; i++) {
  29.                 if (expressionWithEmpty[i] != "") {
  30.                     expression.push(expressionWithEmpty[i]);
  31.                 }
  32.             }
  33.             var start = 1;
  34.             if (expression[0] == "def") {
  35.                 start = 2;
  36.             }
  37.             for (var i = start; i < expression.length; i++) {
  38.                 if (expression[i].match(/^[0-9]+$/)) {
  39.                     expression[i] = parseInt(expression[i]);
  40.                 } else {
  41.                     expression[i] = func[expression[i]];
  42.                 }
  43.             }
  44.             switch (expression[0]) {
  45.                 case "def":
  46.                     func[expression[1]] = expression[2];
  47.                     return;
  48.                 case "+":
  49.                     for (var j = 1; j < expression.length; j++) {
  50.                         result += expression[j];
  51.                     }
  52.                     break;
  53.                 case "-":
  54.                     result = expression[1];
  55.                     for (var j = 2; j < expression.length; j++) {
  56.                         result -= expression[j];
  57.                     }
  58.                     break;
  59.                 case "*":
  60.                     result = 1;
  61.                     for (var j = 1; j < expression.length; j++) {
  62.                         result *= expression[j];
  63.                     }
  64.                     break;
  65.                 case "/":
  66.                     result = expression[1];
  67.                     for (var j = 2; j < expression.length; j++) {
  68.                         if (expression[j] == 0) {
  69.                             return "Division by zero! At Line:";
  70.                         }
  71.                         result = parseInt(result / expression[j]);
  72.                     }
  73.                     break;
  74.                 default:
  75.                     break;
  76.             }
  77.             return result;
  78.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement