mathball
Version:
A JavaScript library for Competitive Programming
85 lines (75 loc) • 1.97 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); } }
/*Multiplication across all data-types and data-structures
*Function: M.mul(m,n)
*/
var Complex = require('../complex');
var validate = require('../validation/argument-length');
var mul = function mul(a, b) {
switch (a.constructor) {
case Number:
return mulNum(a, b);
case String:
return mulString(a, b);
case Array:
if (a[0].constructor === Array) {
return mulMatrix(a, b);
} else {
return mulArray(a, b);
}
case Complex:
return mulComplex(a, b);
}
};
var mulNum = function mulNum(a, b) {
return a * b;
};
var mulString = function mulString(a, b) {
var pro = Number(a) * Number(b);
return pro.toString(10);
};
var mulArray = function mulArray(a, b) {
var pro = new Array(a.length);
for (var i = 0; i < a.length; i++) {
var l = a[i] * b[i];
pro.push(l);
pro = pro.filter(function (n) {
return n;
});
}
return pro;
};
var mulMatrix = function mulMatrix(a, b) {
var pro = [].concat(_toConsumableArray(Array(b.length))).map(function (x) {
return Array(b[0].length).fill(0);
});
for (var i = 0; i < a.length; i++) {
for (var j = 0; j < b[0].length; j++) {
var sum = 0;
for (var k = 0; k < a[0].length; k++) {
sum += a[i][k] * b[k][j];
}
pro[i][j] = sum;
}
}
return pro;
};
var mulComplex = function mulComplex(a, b) {
var pro = {
re: 0,
im: 0
};
pro.re = a.re * b.re;
pro.im = a.im * b.im;
return pro;
};
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\'mul()\' only accepts two parameters!\n');
}
validate(args);
return mul(args[0], args[1]);
};