Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(args) {
- var defFunctions = {};
- for (var row = 0; row < args.length; row += 1) {
- var keyName, keyValue, command = '';
- var currentRow = args[row].trim();
- currentRow = currentRow.split('[').filter(Boolean);
- var leftPart = '', rightPart = '';
- if (currentRow.length == 1) {
- rightPart = currentRow[0].trim();
- } else {
- leftPart = currentRow[0].trim();
- rightPart = currentRow[1].trim();
- }
- if (leftPart.length) {
- leftPart = leftPart.split(/\s+/).filter(Boolean);
- if (leftPart.length === 1 && row == args.length - 1 && leftPart[0] != 'def') {
- command = leftPart[0];
- } else if (leftPart.length === 2 && leftPart[0] === 'def') {
- keyName = leftPart[1];
- } else if (leftPart.length === 3) {
- keyName = leftPart[1];
- command = leftPart[2];
- }
- }
- if (rightPart.length) {
- var params = rightPart.split(/[\], ]+/).filter(Boolean);
- params = parsingFunctionArguments(params, defFunctions);
- if (params.length > 1) {
- keyValue = calculateFuncCommandValue(params, command);
- } else {
- keyValue = params[0];
- }
- }
- if (row < args.length - 1 && !(keyName in defFunctions) && keyValue != undefined) {
- defFunctions[keyName] = keyValue;
- } else if (row === args.length - 1 && keyValue != undefined) {
- return keyValue
- }
- }
- function parsingFunctionArguments(strArr, object) {
- var argumsArr = [];
- for (var i = 0; i < strArr.length; i += 1) {
- if (isFinite(strArr[i])) {
- argumsArr.push(Number(params[i]));
- } else if (object.hasOwnProperty(params[i])) {
- var temp = object[params[i]];
- if (temp instanceof Array) {
- Array.prototype.push.apply(argumsArr, temp);
- } else {
- argumsArr.push(temp);
- }
- }
- }
- return argumsArr;
- }
- function calculateFuncCommandValue(paramsList, command) {
- switch (command) {
- case 'min':
- return Math.min.apply(null, paramsList);
- case 'max':
- return Math.max.apply(null, paramsList);
- case 'sum':
- var sum = 0;
- for (var i = 0; i < paramsList.length; i += 1) {
- sum += paramsList[i];
- }
- return sum;
- case 'avg':
- sum = 0;
- for (i = 0; i < paramsList.length; i += 1) {
- sum += paramsList[i];
- }
- return parseInt((sum / paramsList.length));
- default:
- return paramsList;
- }
- }
- }
- console.log(solve([
- 'def func sum[5, 3, 7, 2, 6, 3]',
- 'def func2 [5, 3, 7, 2, 6, 3]',
- 'def func3 min[func2]',
- 'def func4 max[5, 3, 7, 2, 6, 3]',
- 'def func5 avg[5, 3, 7, 2, 6, 3]',
- 'def func6 sum[func2, func3, func4 ]',
- 'sum[func6, func4]'
- ]));
- console.log(solve([
- 'def func sum[1, 2, 3, -6]',
- 'def newList [func, 10, 1]',
- 'def newFunc sum[func, 100, newList]',
- '[newFunc]'
- ]));
- console.log(solve([
- 'def maxy max[100]',
- 'def summary [0]',
- 'combo [maxy, maxy,maxy,maxy, 5,6]',
- 'summary sum[combo, maxy, -18000]',
- 'def pe6o avg[summary,maxy]',
- 'sum[7, pe6o]'
- ]));
- console.log(solve([
- 'def maxy max[100, 5000, 4,2,1]',
- 'def summary1 [0]',
- 'def summary11 avg[summary1,maxy]',
- 'def summary111 avg[ summary11 , maxy]',
- 'def summary1111 avg[summary111 , maxy]',
- 'sum[75468, summary1111]'
- ]));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement