@instructure/quiz-interactions
Version:
A React UI component Library for quiz interaction types.
76 lines (73 loc) • 2.21 kB
JavaScript
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));
}