UNPKG

@instructure/quiz-interactions

Version:

A React UI component Library for quiz interaction types.

76 lines (73 loc) 2.21 kB
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import times from 'lodash/fp/times'; import concat from 'lodash/fp/concat'; import map from 'lodash/fp/map'; import reduce from 'lodash/fp/reduce'; import range from 'lodash/fp/range'; import flatten from 'lodash/fp/flatten'; export function identityMatrix(_ref, size) { var _ref2 = _slicedToArray(_ref, 2), _ref2$ = _ref2[0], a = _ref2$ === void 0 ? 1 : _ref2$, _ref2$2 = _ref2[1], b = _ref2$2 === void 0 ? 0 : _ref2$2; return map(function (row) { return times(function (n) { return n === row ? a : b; }, size); }, range(0, size)); } // same concept as https://github.com/dankogai/js-combinatorics#cartesian-product export function cartesianProduct() { for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) { arrays[_key] = arguments[_key]; } return reduce(function (a, b) { return flatten(map(function (x) { return map(function (y) { return concat(x, [y]); }, b); }, a)); }, [[]], arrays); } // same concept as https://github.com/dankogai/js-combinatorics#base-n export function baseNCombination(values, n) { if (n === 0) { return []; } if (n === 1) { return map(function (v) { return [v]; }, values); } var previous = baseNCombination(values, n - 1); return cartesianProduct(values, previous).map(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 2), v = _ref4[0], p = _ref4[1]; return [v].concat(_toConsumableArray(p)); }); } // same concept as https://github.com/dankogai/js-combinatorics#combination export function combination(array, size) { if (size === 0) { return []; } if (size === 1) { return map(function (v) { return [v]; }, array); } if (array.length === 1) { return [times(function () { return array[0]; }, size)]; } if (array.length === 0) { return []; } return concat(map(function (v) { return [array[0]].concat(_toConsumableArray(v)); }, combination(array, size - 1)), combination(array.slice(1), size)); }