UNPKG

mathsteps-experimental-fork

Version:

Step by step math solutions. Experimental Fork

62 lines (57 loc) 3.02 kB
'use strict'; 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;