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