composition.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.createComposition = void 0;
  6. var _factory = require("../../utils/factory.js");
  7. var name = 'composition';
  8. var dependencies = ['typed', 'addScalar', 'combinations', 'isNegative', 'isPositive', 'isInteger', 'larger'];
  9. var createComposition = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
  10. var typed = _ref.typed,
  11. addScalar = _ref.addScalar,
  12. combinations = _ref.combinations,
  13. isPositive = _ref.isPositive,
  14. isNegative = _ref.isNegative,
  15. isInteger = _ref.isInteger,
  16. larger = _ref.larger;
  17. /**
  18. * The composition counts of n into k parts.
  19. *
  20. * composition only takes integer arguments.
  21. * The following condition must be enforced: k <= n.
  22. *
  23. * Syntax:
  24. *
  25. * math.composition(n, k)
  26. *
  27. * Examples:
  28. *
  29. * math.composition(5, 3) // returns 6
  30. *
  31. * See also:
  32. *
  33. * combinations
  34. *
  35. * @param {Number | BigNumber} n Total number of objects in the set
  36. * @param {Number | BigNumber} k Number of objects in the subset
  37. * @return {Number | BigNumber} Returns the composition counts of n into k parts.
  38. */
  39. return typed(name, {
  40. 'number | BigNumber, number | BigNumber': function numberBigNumberNumberBigNumber(n, k) {
  41. if (!isInteger(n) || !isPositive(n) || !isInteger(k) || !isPositive(k)) {
  42. throw new TypeError('Positive integer value expected in function composition');
  43. } else if (larger(k, n)) {
  44. throw new TypeError('k must be less than or equal to n in function composition');
  45. }
  46. return combinations(addScalar(n, -1), addScalar(k, -1));
  47. }
  48. });
  49. });
  50. exports.createComposition = createComposition;