UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

96 lines (83 loc) 2.32 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); } } /*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]); };