mathball
Version:
A JavaScript library for Competitive Programming
82 lines (71 loc) • 1.9 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); } }
/*Subtraction across all data-types and data-structures
*Function: M.sub(m,n)
*/
var Complex = require('../complex');
var validate = require('../validation/argument-length');
var subNum = function subNum(a, b) {
return a - b;
};
var subString = function subString(a, b) {
var diff = Number(a) - Number(b);
return diff.toString(10);
};
var subArray = function subArray(a, b) {
var diff = new Array(a.length);
for (var i = 0; i < a.length; i++) {
var l = a[i] - b[i];
diff.push(l);
diff = diff.filter(function (n) {
return n;
});
}
return diff;
};
var subMatrix = function subMatrix(a, b) {
var diff = [].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++) {
diff[i][j] = a[i][j] - b[i][j];
}
}
return diff;
};
var subComplex = function subComplex(a, b) {
var diff = {
re: 0,
im: 0
};
diff.re = a.re - b.re;
diff.im = a.im - b.im;
return diff;
};
var sub = function sub(a, b) {
switch (a.constructor) {
case Number:
return subNum(a, b);
case String:
return subString(a, b);
case Array:
if (a[0].constructor === Array) {
return subMatrix(a, b);
} else {
return subArray(a, b);
}
case Complex:
return subComplex(a, b);
}
};
module.exports = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length > 2) {
throw new TypeError('Invalid argument received: ' + JSON.stringify(args) + '\n\'sub()\' only accepts two parameters!\n');
}
validate(args);
return sub(args[0], args[1]);
};