UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

85 lines (75 loc) 1.97 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); } } /*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]); };