UNPKG

mathsteps-experimental-fork

Version:

Step by step math solutions. Experimental Fork

43 lines (38 loc) 2.08 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const config = require('../config.js'); require('../index.js'); const myNodeToString = require('../newServices/nodeServices/myNodeToString.js'); const parseText = require('../newServices/nodeServices/parseText.js'); const kemuSimplifyCommonServices = require('../simplifyExpression/kemuSimplifyCommonServices.js'); require('../util/regex.js'); require('../node/Type.js'); function extractFractionSides(node) { if (config.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.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" ? kemuSimplifyCommonServices.kemuFlatten(parseText.parseText(_leftNode)) : _leftNode; const rightNode = typeof _rightNode === "string" ? kemuSimplifyCommonServices.kemuFlatten(parseText.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 = kemuSimplifyCommonServices.kemuFlatten(parseText.parseText(`(${myNodeToString.myNodeToString(leftNum)}) * (${myNodeToString.myNodeToString(rightDenom)})`)); const crossRight = kemuSimplifyCommonServices.kemuFlatten(parseText.parseText(`(${myNodeToString.myNodeToString(leftDenom)}) * (${myNodeToString.myNodeToString(rightNum)})`)); return { crossLeft, crossRight }; } exports.getCrossMultiplication = getCrossMultiplication;