mathball
Version:
A JavaScript library for Competitive Programming
96 lines (83 loc) • 2.32 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); } }
/*Absolute value across all data-types and data-structures
*Function: M.abs(m,n)
*/
var Complex = require('../complex');
var validate = require('../validation/argument-length');
var abs = function abs(a) {
switch (a.constructor) {
case Number:
return absNum(a);
case String:
return absString(a);
case Array:
return absArray(a);
case Complex:
return absComplex(a);
}
};
var absNum = function absNum(a) {
return Math.abs(a);
};
var absString = function absString(a) {
var absolute = Math.abs(Number(a));
return absolute.toString(10);
};
//Determinant of a matrix
function det(a, n) {
var determinant = 0,
c1 = void 0,
c2 = void 0,
sign = 1;
var detArr = [].concat(_toConsumableArray(Array(n))).map(function (x) {
return Array(n).fill(0);
});
if (n === 1) {
return a[0][0];
} else if (n === 2) {
determinant = a[0][0] * a[1][1] - a[0][1] * a[1][0];
return determinant;
} else {
for (var i = 0; i < n; i++) {
c1 = 0, c2 = 0;
for (var j = 0; j < n; j++) {
for (var k = 0; k < n; k++) {
if (j != 0 && k != i) {
detArr[c1][c2] = a[j][k];
c2++;
if (c2 > n - 2) {
c1++;
c2 = 0;
}
}
}
}
determinant = determinant + sign * a[0][i] * det(detArr, n - 1);
sign = -1 * sign;
}
return determinant;
}
}
var absArray = function absArray(a) {
if (a[0].length === undefined) {
return 0;
}
if (a.length !== a[0].length) {
throw new TypeError('Invalid argument received: ' + JSON.stringify(a) + '\n\'abs()\' only accepts array with similar dimensions!\n');
}
return Math.abs(det(a, a.length));
};
var absComplex = function absComplex(a) {
return parseFloat(Math.sqrt(Math.pow(a.re, 2) + Math.pow(a.im, 2)).toFixed(2));
};
module.exports = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length !== 1) {
throw new TypeError('Invalid argument received: ' + JSON.stringify(args) + '\n\'abs()\' only accepts only one parameter!\n');
}
validate(args);
return abs(args[0]);
};