UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

86 lines (82 loc) 3.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.baseNCombination = baseNCombination; exports.cartesianProduct = cartesianProduct; exports.combination = combination; exports.identityMatrix = identityMatrix; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _times = _interopRequireDefault(require("lodash/fp/times")); var _concat = _interopRequireDefault(require("lodash/fp/concat")); var _map = _interopRequireDefault(require("lodash/fp/map")); var _reduce = _interopRequireDefault(require("lodash/fp/reduce")); var _range = _interopRequireDefault(require("lodash/fp/range")); var _flatten = _interopRequireDefault(require("lodash/fp/flatten")); function identityMatrix(_ref, size) { var _ref2 = (0, _slicedToArray2["default"])(_ref, 2), _ref2$ = _ref2[0], a = _ref2$ === void 0 ? 1 : _ref2$, _ref2$2 = _ref2[1], b = _ref2$2 === void 0 ? 0 : _ref2$2; return (0, _map["default"])(function (row) { return (0, _times["default"])(function (n) { return n === row ? a : b; }, size); }, (0, _range["default"])(0, size)); } // same concept as https://github.com/dankogai/js-combinatorics#cartesian-product function cartesianProduct() { for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) { arrays[_key] = arguments[_key]; } return (0, _reduce["default"])(function (a, b) { return (0, _flatten["default"])((0, _map["default"])(function (x) { return (0, _map["default"])(function (y) { return (0, _concat["default"])(x, [y]); }, b); }, a)); }, [[]], arrays); } // same concept as https://github.com/dankogai/js-combinatorics#base-n function baseNCombination(values, n) { if (n === 0) { return []; } if (n === 1) { return (0, _map["default"])(function (v) { return [v]; }, values); } var previous = baseNCombination(values, n - 1); return cartesianProduct(values, previous).map(function (_ref3) { var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2), v = _ref4[0], p = _ref4[1]; return [v].concat((0, _toConsumableArray2["default"])(p)); }); } // same concept as https://github.com/dankogai/js-combinatorics#combination function combination(array, size) { if (size === 0) { return []; } if (size === 1) { return (0, _map["default"])(function (v) { return [v]; }, array); } if (array.length === 1) { return [(0, _times["default"])(function () { return array[0]; }, size)]; } if (array.length === 0) { return []; } return (0, _concat["default"])((0, _map["default"])(function (v) { return [array[0]].concat((0, _toConsumableArray2["default"])(v)); }, combination(array, size - 1)), combination(array.slice(1), size)); }