Advertisement
dimipan80

Exams - Listy (alternative solution)

Dec 29th, 2014
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(args) {
  2.     var defFunctions = {};
  3.     for (var row = 0; row < args.length; row += 1) {
  4.         var keyName, keyValue, command = '';
  5.         var currentRow = args[row].trim();
  6.         currentRow = currentRow.split('[').filter(Boolean);
  7.         var leftPart = '', rightPart = '';
  8.         if (currentRow.length == 1) {
  9.             rightPart = currentRow[0].trim();
  10.         } else {
  11.             leftPart = currentRow[0].trim();
  12.             rightPart = currentRow[1].trim();
  13.         }
  14.  
  15.         if (leftPart.length) {
  16.             leftPart = leftPart.split(/\s+/).filter(Boolean);
  17.             if (leftPart.length === 1 && row == args.length - 1 && leftPart[0] != 'def') {
  18.                 command = leftPart[0];
  19.             } else if (leftPart.length === 2 && leftPart[0] === 'def') {
  20.                 keyName = leftPart[1];
  21.             } else if (leftPart.length === 3) {
  22.                 keyName = leftPart[1];
  23.                 command = leftPart[2];
  24.             }
  25.         }
  26.  
  27.         if (rightPart.length) {
  28.             var params = rightPart.split(/[\], ]+/).filter(Boolean);
  29.             params = parsingFunctionArguments(params, defFunctions);
  30.  
  31.             if (params.length > 1) {
  32.                 keyValue = calculateFuncCommandValue(params, command);
  33.             } else {
  34.                 keyValue = params[0];
  35.             }
  36.         }
  37.  
  38.         if (row < args.length - 1 && !(keyName in defFunctions) && keyValue != undefined) {
  39.             defFunctions[keyName] = keyValue;
  40.         } else if (row === args.length - 1 && keyValue != undefined) {
  41.             return keyValue
  42.         }
  43.     }
  44.  
  45.     function parsingFunctionArguments(strArr, object) {
  46.         var argumsArr = [];
  47.         for (var i = 0; i < strArr.length; i += 1) {
  48.             if (isFinite(strArr[i])) {
  49.                 argumsArr.push(Number(params[i]));
  50.             } else if (object.hasOwnProperty(params[i])) {
  51.                 var temp = object[params[i]];
  52.                 if (temp instanceof Array) {
  53.                     Array.prototype.push.apply(argumsArr, temp);
  54.                 } else {
  55.                     argumsArr.push(temp);
  56.                 }
  57.             }
  58.         }
  59.  
  60.         return argumsArr;
  61.     }
  62.  
  63.     function calculateFuncCommandValue(paramsList, command) {
  64.         switch (command) {
  65.             case 'min':
  66.                 return Math.min.apply(null, paramsList);
  67.             case 'max':
  68.                 return Math.max.apply(null, paramsList);
  69.             case 'sum':
  70.                 var sum = 0;
  71.                 for (var i = 0; i < paramsList.length; i += 1) {
  72.                     sum += paramsList[i];
  73.                 }
  74.                 return sum;
  75.             case 'avg':
  76.                 sum = 0;
  77.                 for (i = 0; i < paramsList.length; i += 1) {
  78.                     sum += paramsList[i];
  79.                 }
  80.                 return parseInt((sum / paramsList.length));
  81.             default:
  82.                 return paramsList;
  83.         }
  84.     }
  85. }
  86.  
  87. console.log(solve([
  88.     'def func sum[5, 3, 7, 2, 6, 3]',
  89.     'def func2 [5, 3, 7, 2, 6, 3]',
  90.     'def func3 min[func2]',
  91.     'def func4 max[5, 3, 7, 2, 6, 3]',
  92.     'def func5 avg[5, 3, 7, 2, 6, 3]',
  93.     'def func6 sum[func2, func3, func4 ]',
  94.     'sum[func6, func4]'
  95. ]));
  96.  
  97. console.log(solve([
  98.     'def func sum[1, 2, 3, -6]',
  99.     'def newList [func, 10, 1]',
  100.     'def newFunc sum[func, 100, newList]',
  101.     '[newFunc]'
  102. ]));
  103.  
  104. console.log(solve([
  105.     'def maxy max[100]',
  106.     'def summary [0]',
  107.     'combo [maxy, maxy,maxy,maxy, 5,6]',
  108.     'summary sum[combo, maxy, -18000]',
  109.     'def pe6o avg[summary,maxy]',
  110.     'sum[7, pe6o]'
  111. ]));
  112.  
  113. console.log(solve([
  114.     'def maxy max[100, 5000, 4,2,1]',
  115.     'def summary1 [0]',
  116.     'def summary11 avg[summary1,maxy]',
  117.     'def summary111 avg[   summary11 ,  maxy]',
  118.     'def summary1111 avg[summary111 , maxy]',
  119.     'sum[75468, summary1111]'
  120. ]));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement