UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

113 lines (98 loc) 2.73 kB
'use strict'; 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); };