UNPKG

mathsteps-experimental-fork

Version:

Step by step math solutions. Experimental Fork

39 lines (36 loc) 1.72 kB
import { isOperatorNode } from '../config.js'; import '../index.js'; import { myNodeToString } from '../newServices/nodeServices/myNodeToString.js'; import { parseText } from '../newServices/nodeServices/parseText.js'; import { kemuFlatten } from '../simplifyExpression/kemuSimplifyCommonServices.js'; import '../util/regex.js'; import '../node/Type.js'; function extractFractionSides(node) { if (isOperatorNode(node) && node.op === "/" && node.args.length === 2) { const [num, den] = node.args; return { numerator: num, denominator: den }; } return null; } const countDivisionFn = (strOrNode) => { const stringVersion = typeof strOrNode === "string" ? strOrNode : myNodeToString(strOrNode); return stringVersion.split("/").length - 1; }; function getCrossMultiplication(_leftNode, _rightNode) { if (countDivisionFn(_leftNode) !== 1 || countDivisionFn(_rightNode) !== 1) return null; const leftNode = typeof _leftNode === "string" ? kemuFlatten(parseText(_leftNode)) : _leftNode; const rightNode = typeof _rightNode === "string" ? kemuFlatten(parseText(_rightNode)) : _rightNode; const leftFrac = extractFractionSides(leftNode); const rightFrac = extractFractionSides(rightNode); if (!leftFrac || !rightFrac) return null; const leftNum = leftFrac.numerator; const leftDenom = leftFrac.denominator; const rightNum = rightFrac.numerator; const rightDenom = rightFrac.denominator; const crossLeft = kemuFlatten(parseText(`(${myNodeToString(leftNum)}) * (${myNodeToString(rightDenom)})`)); const crossRight = kemuFlatten(parseText(`(${myNodeToString(leftDenom)}) * (${myNodeToString(rightNum)})`)); return { crossLeft, crossRight }; } export { getCrossMultiplication };