mathsteps-experimental-fork
Version:
Step by step math solutions. Experimental Fork
62 lines (57 loc) • 3.02 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const config = require('../../config.js');
const index = require('../../node/index.js');
const ChangeTypes = require('../../types/changeType/ChangeTypes.js');
const { SIMPLIFY_ARITHMETIC__ADD, SIMPLIFY_ARITHMETIC__MULTIPLY } = ChangeTypes.ChangeTypes;
const { ADDED_INSTEAD_OF_MULTIPLIED, ADDED_ONE_TOO_FEW, ADDED_ONE_TOO_MANY, MULTIPLIED_INSTEAD_OF_ADDED, MULTIPLIED_ONE_TOO_FEW, MULTIPLIED_ONE_TOO_MANY, SUBTRACTED_INSTEAD_OF_ADDED } = ChangeTypes.ChangeTypes;
const makeConstant = (value) => index.default.Creator.constant(value);
function getOrMakeANodeValue(a, b) {
let _a = typeof a === "number" ? makeConstant(a) : a;
let _b = typeof b === "number" ? makeConstant(b) : b;
_a = _a.value ? _a.value : _a;
_b = _b.value ? _b.value : _b;
return { _a, _b };
}
const subtract = (a, b) => {
const { _a, _b } = getOrMakeANodeValue(a, b);
return config.default.subtract(_a, _b);
};
const add = (a, b) => {
const { _a, _b } = getOrMakeANodeValue(a, b);
return config.default.add(_a, _b);
};
const multiply = (a, b) => {
const { _a, _b } = getOrMakeANodeValue(a, b);
return config.default.multiply(_a, _b);
};
const toNum = (node) => node.value ? node.value.toNumber() : node.toNumber();
const OperationIds = {
ADD: `${SIMPLIFY_ARITHMETIC__ADD} | c1 + c2`,
MULTIPLY: `${SIMPLIFY_ARITHMETIC__MULTIPLY} | c1 * c2`
// SUBTRACT: `${SIMPLIFY_ARITHMETIC__SUBTRACT} | c1 - c2`,
// DIVIDE: SIMPLIFY_ARITHMETIC__DIVIDE,
};
const createMistake = (placeIn) => (id, replaceFct) => ({ id, placeIn, replaceFct });
const createAdditionMistake = createMistake(OperationIds.ADD);
const additionMistakes = [
createAdditionMistake(SUBTRACTED_INSTEAD_OF_ADDED, (node, { c1, c2 }) => makeConstant(subtract(c1, c2))),
createAdditionMistake(MULTIPLIED_INSTEAD_OF_ADDED, (node, { c1, c2 }) => makeConstant(multiply(c1, c2))),
createAdditionMistake(ADDED_ONE_TOO_MANY, (node, { c1, c2 }) => makeConstant(add(toNum(c1) + 1, c2))),
createAdditionMistake(ADDED_ONE_TOO_FEW, (node, { c1, c2 }) => makeConstant(add(toNum(c1) - 1, c2)))
];
const createMultiplicationMistake = createMistake(OperationIds.MULTIPLY);
const multiplicationMistakes = [
createMultiplicationMistake(ADDED_INSTEAD_OF_MULTIPLIED, (node, { c1, c2 }) => makeConstant(add(c1, c2))),
createMultiplicationMistake(MULTIPLIED_ONE_TOO_MANY, (node, { c1, c2 }) => makeConstant(multiply(toNum(c1) + 1, c2))),
createMultiplicationMistake(MULTIPLIED_ONE_TOO_MANY, (node, { c1, c2 }) => makeConstant(multiply(c1, toNum(c2) + 1))),
createMultiplicationMistake(MULTIPLIED_ONE_TOO_FEW, (node, { c1, c2 }) => makeConstant(multiply(toNum(c1) - 1, c2))),
createMultiplicationMistake(MULTIPLIED_ONE_TOO_FEW, (node, { c1, c2 }) => makeConstant(multiply(c1, toNum(c2) - 1)))
];
const commonRuleMistakes = [
...additionMistakes,
...multiplicationMistakes
// ...subtractionMistakes,
// ...divisionMistakes,
];
exports.commonRuleMistakes = commonRuleMistakes;