mathball
Version:
A JavaScript library for Competitive Programming
113 lines (98 loc) • 2.73 kB
JavaScript
;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
/*Addition for all datatypes and data-structures
*Function: M.add(...args)
*/
var Complex = require('../complex');
var validate = require('../validation/argument-length');
var add = function add() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
switch (args[0].constructor) {
case Number:
return addNum.apply(undefined, args);
case String:
return addString.apply(undefined, args);
case Array:
if (args[0][0].constructor === Array) {
return args.reduce(function (prev, next) {
return addMatrix(prev, next);
});
} else {
return args.reduce(function (prev, next) {
return addArray(prev, next);
});
}
case Complex:
return addComplex.apply(undefined, args);
}
};
var addNum = function addNum() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var sum = 0;
args.forEach(function (e) {
sum += e;
});
return sum;
};
var addString = function addString() {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
var sum = 0;
args.forEach(function (e) {
sum += Number(e);
});
sum = sum.toString(10);
return sum;
};
var addArray = function addArray(a, b) {
var sum = new Array(b.length);
for (var i = 0; i < b.length; i++) {
var l = a[i] + b[i];
sum.push(l);
sum = sum.filter(function (n) {
return n;
});
}
return sum;
};
var addMatrix = function addMatrix(a, b) {
var sum = [].concat(_toConsumableArray(Array(b.length))).map(function (x) {
return Array(b[0].length).fill(0);
});
for (var i = 0; i < b.length; i++) {
for (var j = 0; j < b[0].length; j++) {
sum[i][j] = a[i][j] + b[i][j];
}
}
return sum;
};
var addComplex = function addComplex() {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
var sum = {
re: 0,
im: 0
};
args.forEach(function (e) {
sum.re += e.re;
sum.im += e.im;
});
return sum;
};
module.exports = function () {
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
if (args.length <= 1) {
throw new TypeError('Invalid argument received: ' + JSON.stringify(args) + '\n \'add()\' only accepts 2 or more parameters!\n');
} else {
validate(args);
}
return add.apply(undefined, args);
};