math-exercises 2.2.69 → 2.2.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/exercises/math/calcul/arithmetics/divisorsList.d.ts.map +1 -1
- package/lib/exercises/math/calcul/arithmetics/divisorsList.js +2 -1
- package/lib/exercises/math/calcul/arithmetics/primeNumbers.d.ts.map +1 -1
- package/lib/exercises/math/calcul/arithmetics/primeNumbers.js +2 -1
- package/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
- package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -1
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts +12 -0
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.js +128 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +1 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/distributivity/index.js +1 -0
- package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.js +3 -6
- package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.js +3 -8
- package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.js +7 -9
- package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.js +6 -19
- package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts +8 -0
- package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/factorisation/factoByX.js +146 -0
- package/lib/exercises/math/calculLitteral/factorisation/index.d.ts +1 -0
- package/lib/exercises/math/calculLitteral/factorisation/index.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/factorisation/index.js +1 -0
- package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.d.ts.map +1 -1
- package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.js +2 -5
- package/lib/exercises/math/functions/trinoms/coefficientsIdentification.js +3 -3
- package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts +2 -2
- package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts.map +1 -1
- package/lib/exercises/math/functions/trinoms/findSecondRoot.js +5 -5
- package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts +2 -2
- package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts.map +1 -1
- package/lib/exercises/math/functions/trinoms/rootsProduct.js +6 -6
- package/lib/exercises/math/functions/trinoms/rootsSum.d.ts +2 -2
- package/lib/exercises/math/functions/trinoms/rootsSum.d.ts.map +1 -1
- package/lib/exercises/math/functions/trinoms/rootsSum.js +7 -7
- package/lib/exercises/math/functions/trinoms/trinomSignFromRoots.js +6 -6
- package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
- package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -0
- package/lib/exercises/math/geometry/angles/index.js +17 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +11 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.js +272 -0
- package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts +3 -1
- package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts.map +1 -1
- package/lib/exercises/math/geometry/areas/rightTriangleArea.js +10 -22
- package/lib/exercises/math/geometry/areas/triangleArea.d.ts +6 -1
- package/lib/exercises/math/geometry/areas/triangleArea.d.ts.map +1 -1
- package/lib/exercises/math/geometry/areas/triangleArea.js +34 -48
- package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +1 -1
- package/lib/exercises/math/geometry/index.d.ts +2 -0
- package/lib/exercises/math/geometry/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/index.js +2 -0
- package/lib/exercises/math/geometry/pythagore/isTriangleRight.d.ts.map +1 -1
- package/lib/exercises/math/geometry/pythagore/pythagore.d.ts +0 -3
- package/lib/exercises/math/geometry/pythagore/pythagore.d.ts.map +1 -1
- package/lib/exercises/math/geometry/pythagore/pythagore.js +19 -25
- package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts +1 -2
- package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts.map +1 -1
- package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.js +30 -65
- package/lib/exercises/math/geometry/quadrilaterals/index.d.ts +2 -0
- package/lib/exercises/math/geometry/quadrilaterals/index.d.ts.map +1 -0
- package/lib/exercises/math/geometry/quadrilaterals/index.js +17 -0
- package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts +14 -0
- package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts.map +1 -0
- package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.js +221 -0
- package/lib/exercises/math/geometry/thales/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/thales/index.js +0 -1
- package/lib/exercises/math/geometry/thales/thales.js +2 -2
- package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts +3 -4
- package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts.map +1 -1
- package/lib/exercises/math/geometry/thales/thalesCalcul.js +69 -78
- package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +3 -3
- package/lib/exercises/math/geometry/volumes/sphereVolume.js +1 -1
- package/lib/exercises/math/trigonometry/trigonometry.d.ts +2 -3
- package/lib/exercises/math/trigonometry/trigonometry.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/trigonometry.js +32 -31
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts +3 -2
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +18 -28
- package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts +5 -4
- package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/trigonometrySideCalcul.js +60 -56
- package/lib/exercises/pc/index.d.ts +0 -4
- package/lib/exercises/pc/index.d.ts.map +1 -1
- package/lib/exercises/pc/index.js +6 -4
- package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts +1 -0
- package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts.map +1 -1
- package/lib/exercises/vea/equationVEA.d.ts +2 -0
- package/lib/exercises/vea/equationVEA.d.ts.map +1 -0
- package/lib/exercises/vea/equationVEA.js +24 -0
- package/lib/exercises/vea/rationalVEA.d.ts.map +1 -1
- package/lib/exercises/vea/sqrtVEA.d.ts +6 -0
- package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -0
- package/lib/exercises/vea/sqrtVEA.js +30 -0
- package/lib/geogebra/geogebraConstructor.d.ts +2 -0
- package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
- package/lib/geogebra/geogebraConstructor.js +7 -0
- package/lib/index.d.ts +39 -46
- package/lib/index.d.ts.map +1 -1
- package/lib/math/complex/complex.d.ts +1 -1
- package/lib/math/geometry/angle.d.ts +47 -0
- package/lib/math/geometry/angle.d.ts.map +1 -0
- package/lib/math/geometry/angle.js +210 -0
- package/lib/math/geometry/line.d.ts +7 -1
- package/lib/math/geometry/line.d.ts.map +1 -1
- package/lib/math/geometry/line.js +33 -0
- package/lib/math/geometry/parallelogram.d.ts +23 -0
- package/lib/math/geometry/parallelogram.d.ts.map +1 -0
- package/lib/math/geometry/parallelogram.js +70 -0
- package/lib/math/geometry/point.d.ts +4 -0
- package/lib/math/geometry/point.d.ts.map +1 -1
- package/lib/math/geometry/point.js +20 -0
- package/lib/math/geometry/quadrilateral.d.ts +15 -0
- package/lib/math/geometry/quadrilateral.d.ts.map +1 -0
- package/lib/math/geometry/quadrilateral.js +38 -0
- package/lib/math/geometry/rectangle.d.ts +24 -0
- package/lib/math/geometry/rectangle.d.ts.map +1 -0
- package/lib/math/geometry/rectangle.js +64 -0
- package/lib/math/geometry/rhombus.d.ts +19 -0
- package/lib/math/geometry/rhombus.d.ts.map +1 -0
- package/lib/math/geometry/rhombus.js +46 -0
- package/lib/math/geometry/rightTriangle.d.ts +31 -0
- package/lib/math/geometry/rightTriangle.d.ts.map +1 -0
- package/lib/math/geometry/rightTriangle.js +113 -0
- package/lib/math/geometry/segment.d.ts +24 -6
- package/lib/math/geometry/segment.d.ts.map +1 -1
- package/lib/math/geometry/segment.js +70 -4
- package/lib/math/geometry/square.d.ts +22 -0
- package/lib/math/geometry/square.d.ts.map +1 -0
- package/lib/math/geometry/square.js +43 -0
- package/lib/math/geometry/triangle.d.ts +45 -45
- package/lib/math/geometry/triangle.d.ts.map +1 -1
- package/lib/math/geometry/triangle.js +159 -186
- package/lib/math/geometry/vector.d.ts +5 -2
- package/lib/math/geometry/vector.d.ts.map +1 -1
- package/lib/math/geometry/vector.js +27 -9
- package/lib/math/numbers/rationals/rational.d.ts +1 -1
- package/lib/math/numbers/reals/extendedRingElement.d.ts +1 -1
- package/lib/math/numbers/reals/real.d.ts.map +1 -1
- package/lib/math/numbers/reals/real.js +3 -0
- package/lib/math/polynomials/generalAffine.d.ts +3 -0
- package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
- package/lib/math/polynomials/generalAffine.js +5 -1
- package/lib/math/polynomials/polynomial.d.ts +1 -1
- package/lib/math/polynomials/trinom.d.ts +2 -2
- package/lib/math/utils/geometry/pythagoricianTriplets.d.ts +1 -0
- package/lib/math/utils/geometry/pythagoricianTriplets.d.ts.map +1 -1
- package/lib/math/utils/geometry/pythagoricianTriplets.js +14 -1
- package/lib/math/utils/random/randfloat.d.ts +1 -1
- package/lib/math/utils/random/randfloat.d.ts.map +1 -1
- package/lib/math/utils/random/randfloat.js +8 -1
- package/lib/math/utils/random/randint.d.ts +8 -1
- package/lib/math/utils/random/randint.d.ts.map +1 -1
- package/lib/math/utils/random/randint.js +6 -1
- package/lib/playground.d.ts.map +1 -1
- package/lib/playground.js +1 -8
- package/lib/tree/nodes/functions/absNode.d.ts +1 -1
- package/lib/tree/nodes/functions/functionNode.d.ts +2 -2
- package/lib/tree/nodes/functions/functionNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/oppositeNode.d.ts +5 -5
- package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
- package/lib/tree/nodes/node.d.ts +6 -2
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/node.js +3 -0
- package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
- package/lib/tree/nodes/nodeConstructor.js +8 -0
- package/lib/tree/nodes/numbers/numberNode.d.ts +2 -0
- package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
- package/lib/tree/nodes/numbers/numberNode.js +6 -1
- package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/addNode.js +123 -89
- package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/multiplyNode.js +3 -3
- package/lib/tree/nodes/polynomials/monomNode.d.ts +47 -0
- package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -0
- package/lib/tree/nodes/polynomials/monomNode.js +214 -0
- package/lib/tree/nodes/polynomials/trinomNode.d.ts +70 -0
- package/lib/tree/nodes/polynomials/trinomNode.d.ts.map +1 -0
- package/lib/tree/nodes/polynomials/trinomNode.js +156 -0
- package/lib/tree/nodes/variables/variableNode.d.ts.map +1 -1
- package/lib/tree/nodes/variables/variableNode.js +1 -1
- package/lib/tree/parsers/affineParser.d.ts.map +1 -1
- package/lib/tree/parsers/affineParser.js +2 -1
- package/lib/tree/parsers/discreteSetParser.d.ts +3 -0
- package/lib/tree/parsers/discreteSetParser.d.ts.map +1 -0
- package/lib/tree/parsers/discreteSetParser.js +23 -0
- package/lib/tree/parsers/equationSolutionParser.d.ts +1 -1
- package/lib/tree/parsers/equationSolutionParser.d.ts.map +1 -1
- package/lib/tree/parsers/equationSolutionParser.js +15 -4
- package/lib/tree/parsers/latexParser.d.ts +5 -1
- package/lib/tree/parsers/latexParser.d.ts.map +1 -1
- package/lib/tree/parsers/latexParser.js +17 -3
- package/lib/tree/parsers/monomParser.d.ts +2 -2
- package/lib/tree/parsers/monomParser.d.ts.map +1 -1
- package/lib/tree/parsers/monomParser.js +61 -8
- package/lib/tree/parsers/rationalParser.d.ts +1 -1
- package/lib/tree/parsers/rationalParser.d.ts.map +1 -1
- package/lib/tree/parsers/rationalParser.js +28 -24
- package/lib/tree/parsers/sqrtParser.d.ts +9 -0
- package/lib/tree/parsers/sqrtParser.d.ts.map +1 -0
- package/lib/tree/parsers/sqrtParser.js +52 -0
- package/lib/tree/parsers/trinomParser.d.ts +1 -1
- package/lib/tree/parsers/trinomParser.d.ts.map +1 -1
- package/lib/tree/parsers/trinomParser.js +14 -2
- package/lib/tree/utilities/functionComposition.d.ts +1 -1
- package/lib/tree/utilities/functionComposition.d.ts.map +1 -1
- package/lib/utils/arrays/rotation.d.ts +8 -0
- package/lib/utils/arrays/rotation.d.ts.map +1 -0
- package/lib/utils/arrays/rotation.js +17 -0
- package/package.json +1 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AlgebraicNode, SimplifyOptions } from "../algebraicNode";
|
|
2
|
+
import { Node, NodeIds, NodeOptions, NodeType } from "../node";
|
|
3
|
+
export declare const monom: (a: AlgebraicNode | number | string, degree: number, opts?: MonomNodeOptions) => MonomNode;
|
|
4
|
+
export declare function isMonomNode(a: Node): a is MonomNode;
|
|
5
|
+
export declare function parseToMonomNode(a: Node, variable?: string): false | MonomNode;
|
|
6
|
+
type MonomNodeOptions = {
|
|
7
|
+
variable: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* un monom est une expression du type ax^degree
|
|
11
|
+
* avec a réel !==0 et degree > 0 (convention)
|
|
12
|
+
*/
|
|
13
|
+
export declare class MonomNode implements AlgebraicNode {
|
|
14
|
+
a: AlgebraicNode;
|
|
15
|
+
degree: number;
|
|
16
|
+
isNumeric: boolean;
|
|
17
|
+
variable: string;
|
|
18
|
+
type: NodeType;
|
|
19
|
+
constructor(a: AlgebraicNode | number, degree: number, opts?: MonomNodeOptions);
|
|
20
|
+
derivative(varName?: string | undefined): AlgebraicNode;
|
|
21
|
+
equals(node: AlgebraicNode): boolean;
|
|
22
|
+
evaluate(vars?: Record<string, number>): number;
|
|
23
|
+
toDetailedEvaluation(vars: Record<string, AlgebraicNode>): AlgebraicNode;
|
|
24
|
+
simplify(opts?: SimplifyOptions): AlgebraicNode;
|
|
25
|
+
toAllValidTexs(opts?: NodeOptions | undefined): string[];
|
|
26
|
+
toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[];
|
|
27
|
+
toMathString(): string;
|
|
28
|
+
toTree(): AlgebraicNode;
|
|
29
|
+
toTex(): string;
|
|
30
|
+
toIdentifiers(): {
|
|
31
|
+
id: NodeIds;
|
|
32
|
+
a: {
|
|
33
|
+
id: NodeIds;
|
|
34
|
+
} & Record<string, any>;
|
|
35
|
+
degree: number;
|
|
36
|
+
opts: {
|
|
37
|
+
variable: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare const parseToMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: {
|
|
42
|
+
variable: string;
|
|
43
|
+
maxDegree: undefined;
|
|
44
|
+
minDegree: number;
|
|
45
|
+
}) => false | MonomNode;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=monomNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO/D,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,UAC1B,MAAM,SACP,gBAAgB,cAMxB,CAAC;AACF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAM,qBAGvD;AACD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAO7C;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;IAC7C,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAkB;gBAG9B,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB;IAUzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAMvC,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAG/B,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAG7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAGhD,YAAY;IAIZ,MAAM;IAIN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SACjB,aAAa;;;;uBAyIpB,CAAC"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseToMonom = exports.MonomNode = exports.parseToMonomNode = exports.isMonomNode = exports.monom = void 0;
|
|
4
|
+
const algebraicNode_1 = require("../algebraicNode");
|
|
5
|
+
const oppositeNode_1 = require("../functions/oppositeNode");
|
|
6
|
+
const node_1 = require("../node");
|
|
7
|
+
// import { NodeIdentifiers } from "../nodeConstructor";
|
|
8
|
+
const multiplyNode_1 = require("../operators/multiplyNode");
|
|
9
|
+
const powerNode_1 = require("../operators/powerNode");
|
|
10
|
+
const variableNode_1 = require("../variables/variableNode");
|
|
11
|
+
const monom = (a, degree, opts) => {
|
|
12
|
+
const coeff = typeof a === "number" ? a.toTree() : typeof a === "string" ? a.toTree() : a;
|
|
13
|
+
return new MonomNode(coeff, degree, opts);
|
|
14
|
+
};
|
|
15
|
+
exports.monom = monom;
|
|
16
|
+
function isMonomNode(a) {
|
|
17
|
+
return a.type === node_1.NodeType.monom;
|
|
18
|
+
}
|
|
19
|
+
exports.isMonomNode = isMonomNode;
|
|
20
|
+
function parseToMonomNode(a, variable = "x") {
|
|
21
|
+
if (!(0, algebraicNode_1.isAlgebraicNode)(a))
|
|
22
|
+
return false;
|
|
23
|
+
return (0, exports.parseToMonom)(a, { variable, minDegree: 1, maxDegree: undefined });
|
|
24
|
+
}
|
|
25
|
+
exports.parseToMonomNode = parseToMonomNode;
|
|
26
|
+
/**
|
|
27
|
+
* un monom est une expression du type ax^degree
|
|
28
|
+
* avec a réel !==0 et degree > 0 (convention)
|
|
29
|
+
*/
|
|
30
|
+
class MonomNode {
|
|
31
|
+
// roots: AlgebraicNode[];
|
|
32
|
+
constructor(a, degree, opts) {
|
|
33
|
+
this.type = node_1.NodeType.monom;
|
|
34
|
+
// super([c, b, a], opts?.variable ?? "x");
|
|
35
|
+
this.a = typeof a === "number" ? a.toTree() : a;
|
|
36
|
+
if (this.a.evaluate() === 0)
|
|
37
|
+
throw new Error("Monom with coeff null");
|
|
38
|
+
this.degree = degree;
|
|
39
|
+
this.isNumeric = false;
|
|
40
|
+
this.variable = opts?.variable ?? "x";
|
|
41
|
+
}
|
|
42
|
+
derivative(varName) {
|
|
43
|
+
return (0, multiplyNode_1.multiply)((0, multiplyNode_1.multiply)(this.a, this.degree), (0, powerNode_1.power)(this.variable, this.degree - 1)).simplify();
|
|
44
|
+
}
|
|
45
|
+
equals(node) {
|
|
46
|
+
return this.toTree().equals(node);
|
|
47
|
+
}
|
|
48
|
+
evaluate(vars) {
|
|
49
|
+
return this.toTree().evaluate(vars);
|
|
50
|
+
}
|
|
51
|
+
toDetailedEvaluation(vars) {
|
|
52
|
+
return this.toTree().toDetailedEvaluation(vars);
|
|
53
|
+
}
|
|
54
|
+
simplify(opts) {
|
|
55
|
+
return this.toTree().simplify(opts);
|
|
56
|
+
}
|
|
57
|
+
toAllValidTexs(opts) {
|
|
58
|
+
return this.toTree().toAllValidTexs(opts);
|
|
59
|
+
}
|
|
60
|
+
toEquivalentNodes(opts) {
|
|
61
|
+
return this.toTree().toEquivalentNodes(opts);
|
|
62
|
+
}
|
|
63
|
+
toMathString() {
|
|
64
|
+
return this.toTree().toMathString();
|
|
65
|
+
}
|
|
66
|
+
toTree() {
|
|
67
|
+
return (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.power)(this.variable, this.degree)).simplify();
|
|
68
|
+
}
|
|
69
|
+
toTex() {
|
|
70
|
+
return this.toTree().toTex();
|
|
71
|
+
}
|
|
72
|
+
toIdentifiers() {
|
|
73
|
+
return {
|
|
74
|
+
id: node_1.NodeIds.monom,
|
|
75
|
+
a: this.a.toIdentifiers(),
|
|
76
|
+
degree: this.degree,
|
|
77
|
+
opts: { variable: this.variable },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.MonomNode = MonomNode;
|
|
82
|
+
const parseToMonom = (node, { variable, maxDegree, minDegree } = {
|
|
83
|
+
variable: "x",
|
|
84
|
+
maxDegree: undefined,
|
|
85
|
+
minDegree: 1,
|
|
86
|
+
}) => {
|
|
87
|
+
variable = variable ?? "x";
|
|
88
|
+
maxDegree = maxDegree ?? undefined;
|
|
89
|
+
minDegree = minDegree ?? 1;
|
|
90
|
+
if (isMonomNode(node)) {
|
|
91
|
+
if (node.variable !== variable)
|
|
92
|
+
return false;
|
|
93
|
+
if (maxDegree && node.degree > maxDegree)
|
|
94
|
+
return false;
|
|
95
|
+
if (minDegree && node.degree < minDegree)
|
|
96
|
+
return false;
|
|
97
|
+
return node;
|
|
98
|
+
}
|
|
99
|
+
if (node.isNumeric)
|
|
100
|
+
return false;
|
|
101
|
+
if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
|
|
102
|
+
return new MonomNode(1, 1, { variable });
|
|
103
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) &&
|
|
104
|
+
(0, variableNode_1.isVariableNode)(node.child) &&
|
|
105
|
+
node.child.name === variable &&
|
|
106
|
+
minDegree < 2)
|
|
107
|
+
return new MonomNode(-1, 1, { variable });
|
|
108
|
+
if ((0, powerNode_1.isSquareNode)(node)) {
|
|
109
|
+
if (minDegree > 2)
|
|
110
|
+
return false;
|
|
111
|
+
if (maxDegree && maxDegree < 2)
|
|
112
|
+
return false;
|
|
113
|
+
if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
|
|
114
|
+
return false;
|
|
115
|
+
return new MonomNode(1, 2, { variable });
|
|
116
|
+
}
|
|
117
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
|
|
118
|
+
if (minDegree > 2)
|
|
119
|
+
return false;
|
|
120
|
+
if (maxDegree && maxDegree < 2)
|
|
121
|
+
return false;
|
|
122
|
+
if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
|
|
123
|
+
node.child.leftChild.name !== variable)
|
|
124
|
+
return false;
|
|
125
|
+
return new MonomNode(-1, 2, { variable });
|
|
126
|
+
}
|
|
127
|
+
if ((0, powerNode_1.isPowerNode)(node)) {
|
|
128
|
+
if (!node.rightChild.isNumeric)
|
|
129
|
+
return false;
|
|
130
|
+
const powerEv = node.rightChild.evaluate();
|
|
131
|
+
if (maxDegree && powerEv > maxDegree)
|
|
132
|
+
return false;
|
|
133
|
+
if (minDegree && powerEv < minDegree)
|
|
134
|
+
return false;
|
|
135
|
+
if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
|
|
136
|
+
return false;
|
|
137
|
+
return new MonomNode(1, powerEv, { variable });
|
|
138
|
+
}
|
|
139
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
|
|
140
|
+
if (!node.child.rightChild.isNumeric)
|
|
141
|
+
return false;
|
|
142
|
+
const powerEv = node.child.rightChild.evaluate();
|
|
143
|
+
if (maxDegree && powerEv > maxDegree)
|
|
144
|
+
return false;
|
|
145
|
+
if (minDegree && powerEv < minDegree)
|
|
146
|
+
return false;
|
|
147
|
+
if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
|
|
148
|
+
node.child.leftChild.name !== variable)
|
|
149
|
+
return false;
|
|
150
|
+
return new MonomNode(-1, powerEv, { variable });
|
|
151
|
+
}
|
|
152
|
+
if ((0, multiplyNode_1.isMultiplyNode)(node)) {
|
|
153
|
+
const numericChildPosition = node.leftChild.isNumeric
|
|
154
|
+
? "left"
|
|
155
|
+
: node.rightChild.isNumeric
|
|
156
|
+
? "right"
|
|
157
|
+
: undefined;
|
|
158
|
+
if (!numericChildPosition)
|
|
159
|
+
return false;
|
|
160
|
+
const numericChild = numericChildPosition === "left" ? node.leftChild : node.rightChild;
|
|
161
|
+
const varChild = numericChildPosition === "left" ? node.rightChild : node.leftChild;
|
|
162
|
+
if ((0, variableNode_1.isVariableNode)(varChild)) {
|
|
163
|
+
if (varChild.name !== variable || minDegree > 1)
|
|
164
|
+
return false;
|
|
165
|
+
else
|
|
166
|
+
return new MonomNode(numericChild, 1, { variable });
|
|
167
|
+
}
|
|
168
|
+
if ((0, powerNode_1.isSquareNode)(varChild)) {
|
|
169
|
+
if (minDegree > 2)
|
|
170
|
+
return false;
|
|
171
|
+
if (maxDegree && maxDegree < 2)
|
|
172
|
+
return false;
|
|
173
|
+
if (!(0, variableNode_1.isVariableNode)(varChild.leftChild) ||
|
|
174
|
+
varChild.leftChild.name !== variable)
|
|
175
|
+
return false;
|
|
176
|
+
return new MonomNode(numericChild, 2, { variable });
|
|
177
|
+
}
|
|
178
|
+
if ((0, oppositeNode_1.isOppositeNode)(varChild) && (0, powerNode_1.isSquareNode)(varChild.child)) {
|
|
179
|
+
if (minDegree > 2)
|
|
180
|
+
return false;
|
|
181
|
+
if (maxDegree && maxDegree < 2)
|
|
182
|
+
return false;
|
|
183
|
+
if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild) ||
|
|
184
|
+
varChild.child.leftChild.name !== variable)
|
|
185
|
+
return false;
|
|
186
|
+
return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, { variable });
|
|
187
|
+
}
|
|
188
|
+
if ((0, powerNode_1.isPowerNode)(varChild) &&
|
|
189
|
+
(0, variableNode_1.isVariableNode)(varChild.leftChild) &&
|
|
190
|
+
varChild.leftChild.name === variable &&
|
|
191
|
+
varChild.rightChild.isNumeric) {
|
|
192
|
+
const powerEv = varChild.rightChild.evaluate();
|
|
193
|
+
if (maxDegree && powerEv > maxDegree)
|
|
194
|
+
return false;
|
|
195
|
+
if (minDegree && powerEv < minDegree)
|
|
196
|
+
return false;
|
|
197
|
+
return new MonomNode(numericChild, powerEv, { variable });
|
|
198
|
+
}
|
|
199
|
+
if ((0, oppositeNode_1.isOppositeNode)(varChild) &&
|
|
200
|
+
(0, powerNode_1.isPowerNode)(varChild.child) &&
|
|
201
|
+
(0, variableNode_1.isVariableNode)(varChild.child.leftChild) &&
|
|
202
|
+
varChild.child.leftChild.name === variable &&
|
|
203
|
+
varChild.child.rightChild.isNumeric) {
|
|
204
|
+
const powerEv = varChild.child.rightChild.evaluate();
|
|
205
|
+
if (maxDegree && powerEv > maxDegree)
|
|
206
|
+
return false;
|
|
207
|
+
if (minDegree && powerEv < minDegree)
|
|
208
|
+
return false;
|
|
209
|
+
return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, { variable });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
};
|
|
214
|
+
exports.parseToMonom = parseToMonom;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AlgebraicNode, SimplifyOptions } from "../../../tree/nodes/algebraicNode";
|
|
2
|
+
import { NodeIds, NodeOptions, NodeType } from "../../../tree/nodes/node";
|
|
3
|
+
import { NodeIdentifiers } from "../../../tree/nodes/nodeConstructor";
|
|
4
|
+
export declare abstract class TrinomNodeConstructor {
|
|
5
|
+
static random(aOpts?: {
|
|
6
|
+
min?: number;
|
|
7
|
+
max?: number;
|
|
8
|
+
excludes?: number[];
|
|
9
|
+
}, bOpts?: {
|
|
10
|
+
min?: number;
|
|
11
|
+
max?: number;
|
|
12
|
+
excludes?: number[];
|
|
13
|
+
}, cOpts?: {
|
|
14
|
+
min?: number;
|
|
15
|
+
max?: number;
|
|
16
|
+
excludes?: number[];
|
|
17
|
+
}): TrinomNode;
|
|
18
|
+
static randomCanonical(aOpts?: {
|
|
19
|
+
min?: number;
|
|
20
|
+
max?: number;
|
|
21
|
+
excludes?: number[];
|
|
22
|
+
from?: number[];
|
|
23
|
+
}, alphaOpts?: {
|
|
24
|
+
min?: number;
|
|
25
|
+
max?: number;
|
|
26
|
+
excludes?: number[];
|
|
27
|
+
}, betaOpts?: {
|
|
28
|
+
min?: number;
|
|
29
|
+
max?: number;
|
|
30
|
+
excludes?: number[];
|
|
31
|
+
}): TrinomNode;
|
|
32
|
+
static randomNiceRoots(nbOfRoots?: number): TrinomNode;
|
|
33
|
+
static fromCoeffs(coeffs: number[]): TrinomNode;
|
|
34
|
+
static fromIdentifiers(identifiers: TrinomNodeIdentifiers): TrinomNode;
|
|
35
|
+
}
|
|
36
|
+
export type TrinomNodeIdentifiers = {
|
|
37
|
+
id: NodeIds.trinom;
|
|
38
|
+
a: number | NodeIdentifiers;
|
|
39
|
+
b: number | NodeIdentifiers;
|
|
40
|
+
c: number | NodeIdentifiers;
|
|
41
|
+
opts?: TrinomNodeOptions;
|
|
42
|
+
};
|
|
43
|
+
type TrinomNodeOptions = {
|
|
44
|
+
variable: string;
|
|
45
|
+
};
|
|
46
|
+
export declare class TrinomNode implements AlgebraicNode {
|
|
47
|
+
a: AlgebraicNode;
|
|
48
|
+
b: AlgebraicNode;
|
|
49
|
+
c: AlgebraicNode;
|
|
50
|
+
isNumeric: boolean;
|
|
51
|
+
variable: string;
|
|
52
|
+
type: NodeType;
|
|
53
|
+
constructor(a: AlgebraicNode | number, b: AlgebraicNode | number, c: AlgebraicNode | number, opts?: TrinomNodeOptions);
|
|
54
|
+
getDelta(): AlgebraicNode;
|
|
55
|
+
derivative(varName?: string | undefined): import("../../../tree/nodes/operators/addNode").AddNode;
|
|
56
|
+
equals(node: AlgebraicNode): boolean;
|
|
57
|
+
evaluate(vars?: Record<string, number>): number;
|
|
58
|
+
toDetailedEvaluation(vars: Record<string, AlgebraicNode>): import("../../../tree/nodes/operators/addNode").AddNode | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode;
|
|
59
|
+
simplify(opts?: SimplifyOptions): AlgebraicNode;
|
|
60
|
+
toAllValidTexs(opts?: NodeOptions | undefined): string[];
|
|
61
|
+
toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[] | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode[];
|
|
62
|
+
toMathString(): string;
|
|
63
|
+
getRoots(): AlgebraicNode[];
|
|
64
|
+
toTree(): import("../../../tree/nodes/operators/addNode").AddNode | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode;
|
|
65
|
+
toTex(): string;
|
|
66
|
+
getCoeffs(): number[];
|
|
67
|
+
toIdentifiers(): TrinomNodeIdentifiers;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=trinomNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trinomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/trinomNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrinomNode = exports.TrinomNodeConstructor = void 0;
|
|
4
|
+
const sqrtNode_1 = require("../../../tree/nodes/functions/sqrtNode");
|
|
5
|
+
const addNode_1 = require("../../../tree/nodes/operators/addNode");
|
|
6
|
+
const fractionNode_1 = require("../../../tree/nodes/operators/fractionNode");
|
|
7
|
+
const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
|
|
8
|
+
const powerNode_1 = require("../../../tree/nodes/operators/powerNode");
|
|
9
|
+
const substractNode_1 = require("../../../tree/nodes/operators/substractNode");
|
|
10
|
+
const oppositeNode_1 = require("../../../tree/nodes/functions/oppositeNode");
|
|
11
|
+
const randint_1 = require("../../../math/utils/random/randint");
|
|
12
|
+
const random_1 = require("../../../utils/alea/random");
|
|
13
|
+
const node_1 = require("../../../tree/nodes/node");
|
|
14
|
+
const nodeConstructor_1 = require("../../../tree/nodes/nodeConstructor");
|
|
15
|
+
class TrinomNodeConstructor {
|
|
16
|
+
static random(aOpts, bOpts, cOpts) {
|
|
17
|
+
const a = (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
|
|
18
|
+
const b = (0, randint_1.randint)(bOpts?.min ?? -9, bOpts?.max ?? 10, bOpts?.excludes ?? []);
|
|
19
|
+
const c = (0, randint_1.randint)(cOpts?.min ?? -9, cOpts?.max ?? 10, cOpts?.excludes ?? []);
|
|
20
|
+
return new TrinomNode(a, b, c);
|
|
21
|
+
}
|
|
22
|
+
static randomCanonical(aOpts, alphaOpts, betaOpts) {
|
|
23
|
+
const a = aOpts?.from
|
|
24
|
+
? (0, random_1.random)(aOpts.from)
|
|
25
|
+
: (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
|
|
26
|
+
const alpha = (0, randint_1.randint)(alphaOpts?.min ?? -9, alphaOpts?.max ?? 10, alphaOpts?.excludes ?? []);
|
|
27
|
+
const beta = (0, randint_1.randint)(betaOpts?.min ?? -9, betaOpts?.max ?? 10, betaOpts?.excludes ?? []);
|
|
28
|
+
const b = -2 * a * alpha;
|
|
29
|
+
const c = a * alpha ** 2 + beta;
|
|
30
|
+
return new TrinomNode(a, b, c);
|
|
31
|
+
}
|
|
32
|
+
static randomNiceRoots(nbOfRoots = 2) {
|
|
33
|
+
if (nbOfRoots === 0) {
|
|
34
|
+
//canonical +c
|
|
35
|
+
const a = (0, randint_1.randint)(-9, 10, [0]);
|
|
36
|
+
const root = (0, randint_1.randint)(-9, 10);
|
|
37
|
+
//a(x-root)^2 = ax^2 -2arootx + aroot^2
|
|
38
|
+
const c = a > 0 ? a * root ** 2 + (0, randint_1.randint)(1, 6) : a * root ** 2 - (0, randint_1.randint)(1, 6);
|
|
39
|
+
return new TrinomNode(a, -2 * a * root, c);
|
|
40
|
+
}
|
|
41
|
+
else if (nbOfRoots === 1) {
|
|
42
|
+
const a = (0, randint_1.randint)(-9, 10, [0]);
|
|
43
|
+
const root = (0, randint_1.randint)(-9, 10);
|
|
44
|
+
//a(x-root)^2 = ax^2 -2arootx + aroot^2
|
|
45
|
+
return new TrinomNode(a, -2 * a * root, a * root ** 2);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const a = (0, randint_1.randint)(-9, 10, [0]);
|
|
49
|
+
const x1 = (0, randint_1.randint)(-9, 10, []);
|
|
50
|
+
const x2 = (0, randint_1.randint)(-9, 10, [x1]);
|
|
51
|
+
return new TrinomNode(a, -a * (x1 + x2), a * x1 * x2);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
static fromCoeffs(coeffs) {
|
|
55
|
+
return new TrinomNode(coeffs[2], coeffs[1], coeffs[0]);
|
|
56
|
+
}
|
|
57
|
+
static fromIdentifiers(identifiers) {
|
|
58
|
+
return new TrinomNode(typeof identifiers.a === "number"
|
|
59
|
+
? identifiers.a
|
|
60
|
+
: nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.a), typeof identifiers.b === "number"
|
|
61
|
+
? identifiers.b
|
|
62
|
+
: nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.b), typeof identifiers.c === "number"
|
|
63
|
+
? identifiers.c
|
|
64
|
+
: nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.c), identifiers.opts);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.TrinomNodeConstructor = TrinomNodeConstructor;
|
|
68
|
+
class TrinomNode {
|
|
69
|
+
// roots: AlgebraicNode[];
|
|
70
|
+
constructor(a, b, c, opts) {
|
|
71
|
+
this.type = node_1.NodeType.trinom;
|
|
72
|
+
// super([c, b, a], opts?.variable ?? "x");
|
|
73
|
+
this.a = typeof a === "number" ? a.toTree() : a;
|
|
74
|
+
this.b = typeof b === "number" ? b.toTree() : b;
|
|
75
|
+
this.c = typeof c === "number" ? c.toTree() : c;
|
|
76
|
+
this.isNumeric = false;
|
|
77
|
+
this.variable = opts?.variable ?? "x";
|
|
78
|
+
}
|
|
79
|
+
getDelta() {
|
|
80
|
+
return (0, substractNode_1.substract)((0, powerNode_1.square)(this.b), (0, multiplyNode_1.multiply)(4, (0, multiplyNode_1.multiply)(this.a, this.c))).simplify();
|
|
81
|
+
}
|
|
82
|
+
// getRoots() {
|
|
83
|
+
// const delta = this.getDelta();
|
|
84
|
+
// if (delta < 0) return [];
|
|
85
|
+
// if (delta === 0) return [-this.b / (2 * this.a)];
|
|
86
|
+
// return [
|
|
87
|
+
// (-this.b - Math.sqrt(delta)) / (2 * this.a),
|
|
88
|
+
// (-this.b + Math.sqrt(delta)) / (2 * this.a),
|
|
89
|
+
// ].sort((a, b) => a - b);
|
|
90
|
+
// }
|
|
91
|
+
derivative(varName) {
|
|
92
|
+
return (0, addNode_1.add)((0, multiplyNode_1.multiply)(2, (0, multiplyNode_1.multiply)(this.a, "x")), this.b);
|
|
93
|
+
}
|
|
94
|
+
equals(node) {
|
|
95
|
+
return this.toTree().equals(node);
|
|
96
|
+
}
|
|
97
|
+
evaluate(vars) {
|
|
98
|
+
return this.toTree().evaluate(vars);
|
|
99
|
+
}
|
|
100
|
+
toDetailedEvaluation(vars) {
|
|
101
|
+
return this.toTree().toDetailedEvaluation(vars);
|
|
102
|
+
}
|
|
103
|
+
simplify(opts) {
|
|
104
|
+
return this.toTree().simplify(opts);
|
|
105
|
+
}
|
|
106
|
+
toAllValidTexs(opts) {
|
|
107
|
+
return this.toTree().toAllValidTexs(opts);
|
|
108
|
+
}
|
|
109
|
+
toEquivalentNodes(opts) {
|
|
110
|
+
return this.toTree().toEquivalentNodes(opts);
|
|
111
|
+
}
|
|
112
|
+
toMathString() {
|
|
113
|
+
return this.toTree().toMathString();
|
|
114
|
+
}
|
|
115
|
+
getRoots() {
|
|
116
|
+
const delta = this.getDelta();
|
|
117
|
+
const deltaEv = delta.evaluate();
|
|
118
|
+
if (deltaEv < 0)
|
|
119
|
+
return [];
|
|
120
|
+
if (deltaEv === 0)
|
|
121
|
+
return [(0, fractionNode_1.frac)((0, oppositeNode_1.opposite)(this.b), (0, multiplyNode_1.multiply)(2, this.a)).simplify()];
|
|
122
|
+
return [
|
|
123
|
+
(0, fractionNode_1.frac)((0, substractNode_1.substract)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
|
|
124
|
+
(0, fractionNode_1.frac)((0, addNode_1.add)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
|
|
125
|
+
].sort((a, b) => a.evaluate() - b.evaluate());
|
|
126
|
+
}
|
|
127
|
+
toTree() {
|
|
128
|
+
const bEv = this.b.evaluate();
|
|
129
|
+
const cEv = this.c.evaluate();
|
|
130
|
+
const highMonom = (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.square)(this.variable));
|
|
131
|
+
const middleMonom = (0, multiplyNode_1.multiply)(this.b, this.variable);
|
|
132
|
+
if (!bEv && !cEv)
|
|
133
|
+
return highMonom;
|
|
134
|
+
if (!cEv)
|
|
135
|
+
return (0, addNode_1.add)(highMonom, middleMonom);
|
|
136
|
+
if (!bEv)
|
|
137
|
+
return (0, addNode_1.add)(highMonom, this.c);
|
|
138
|
+
return (0, addNode_1.add)(highMonom, (0, addNode_1.add)(middleMonom, this.c));
|
|
139
|
+
}
|
|
140
|
+
toTex() {
|
|
141
|
+
return this.toTree().toTex();
|
|
142
|
+
}
|
|
143
|
+
getCoeffs() {
|
|
144
|
+
return [this.c.evaluate(), this.b.evaluate(), this.a.evaluate()];
|
|
145
|
+
}
|
|
146
|
+
toIdentifiers() {
|
|
147
|
+
return {
|
|
148
|
+
id: node_1.NodeIds.trinom,
|
|
149
|
+
a: this.a.toIdentifiers(),
|
|
150
|
+
b: this.b.toIdentifiers(),
|
|
151
|
+
c: this.c.toIdentifiers(),
|
|
152
|
+
opts: { variable: this.variable },
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.TrinomNode = TrinomNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQtC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAKxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAKxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,
|
|
1
|
+
{"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAuBzD,CAAC"}
|
|
@@ -7,6 +7,7 @@ const latexParser_1 = require("./latexParser");
|
|
|
7
7
|
const monomParser_1 = require("./monomParser");
|
|
8
8
|
const affineParser = (ans, variable = "x") => {
|
|
9
9
|
try {
|
|
10
|
+
//double parse, pas opti
|
|
10
11
|
const monom = (0, monomParser_1.monomParser)(ans, { variable, maxDegree: 1 });
|
|
11
12
|
if (monom)
|
|
12
13
|
return monom;
|
|
@@ -20,7 +21,7 @@ const affineParser = (ans, variable = "x") => {
|
|
|
20
21
|
if (!numericChild)
|
|
21
22
|
return false;
|
|
22
23
|
const varChild = numericChild === "left" ? parsed.rightChild : parsed.leftChild;
|
|
23
|
-
return (0, monomParser_1.
|
|
24
|
+
return (0, monomParser_1.isMonom)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
|
|
24
25
|
}
|
|
25
26
|
return false;
|
|
26
27
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discreteSetParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/discreteSetParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,iBAAiB,QAAS,MAAM,4BAe5C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.discreteSetParser = void 0;
|
|
4
|
+
const latexParser_1 = require("./latexParser");
|
|
5
|
+
const discreteSetParser = (str) => {
|
|
6
|
+
try {
|
|
7
|
+
const formated = str
|
|
8
|
+
.replace("S", "")
|
|
9
|
+
.replace("=", "")
|
|
10
|
+
.replace("\\left", "")
|
|
11
|
+
.replace("\\right", "")
|
|
12
|
+
.replace("\\{", "")
|
|
13
|
+
.replace("\\}", "");
|
|
14
|
+
const elements = formated.split(";").map((e) => (0, latexParser_1.parseAlgebraic)(e));
|
|
15
|
+
if (elements.some((e) => !e))
|
|
16
|
+
return false;
|
|
17
|
+
return elements;
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.discreteSetParser = discreteSetParser;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { AlgebraicNode } from "../nodes/algebraicNode";
|
|
2
|
-
export declare const equationSolutionParser: (str: string) => false | AlgebraicNode;
|
|
2
|
+
export declare const equationSolutionParser: (str: string, variable?: string) => false | AlgebraicNode;
|
|
3
3
|
//# sourceMappingURL=equationSolutionParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,sBAAsB,QAAS,MAAM,6CAyBjD,CAAC"}
|
|
@@ -3,19 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.equationSolutionParser = void 0;
|
|
4
4
|
const algebraicNode_1 = require("../nodes/algebraicNode");
|
|
5
5
|
const equalNode_1 = require("../nodes/equations/equalNode");
|
|
6
|
-
const
|
|
6
|
+
const variableNode_1 = require("../nodes/variables/variableNode");
|
|
7
7
|
const latexParser_1 = require("./latexParser");
|
|
8
|
-
const equationSolutionParser = (str) => {
|
|
8
|
+
const equationSolutionParser = (str, variable = "x") => {
|
|
9
9
|
try {
|
|
10
10
|
const parsed = (0, latexParser_1.parseLatex)(str);
|
|
11
11
|
if ((0, equalNode_1.isEqualNode)(parsed)) {
|
|
12
12
|
const children = [parsed.leftChild, parsed.rightChild];
|
|
13
|
-
const
|
|
14
|
-
|
|
13
|
+
const varNode = (0, variableNode_1.isVariableNode)(parsed.leftChild)
|
|
14
|
+
? 0
|
|
15
|
+
: (0, variableNode_1.isVariableNode)(parsed.rightChild)
|
|
16
|
+
? 1
|
|
17
|
+
: undefined;
|
|
18
|
+
if (varNode === undefined)
|
|
19
|
+
return false;
|
|
20
|
+
if (children[varNode].name !== "x")
|
|
21
|
+
return false;
|
|
22
|
+
const scalar = children[(varNode + 1) % 2];
|
|
23
|
+
if (!(0, algebraicNode_1.isAlgebraicNode)(scalar) || !scalar.isNumeric)
|
|
15
24
|
return false;
|
|
16
25
|
return scalar;
|
|
17
26
|
}
|
|
18
27
|
else if ((0, algebraicNode_1.isAlgebraicNode)(parsed)) {
|
|
28
|
+
if (!parsed.isNumeric)
|
|
29
|
+
return false;
|
|
19
30
|
return parsed;
|
|
20
31
|
}
|
|
21
32
|
else {
|
|
@@ -2,6 +2,10 @@ import { AlgebraicNode } from "../nodes/algebraicNode";
|
|
|
2
2
|
import { EqualNode } from "../nodes/equations/equalNode";
|
|
3
3
|
import { InequationNode } from "../nodes/inequations/inequationNode";
|
|
4
4
|
export declare const tokenize: (latex: string) => string[];
|
|
5
|
-
|
|
5
|
+
type ParserOptions = {
|
|
6
|
+
allowStartingPower?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const parseAlgebraic: (latex: string, opts?: ParserOptions) => AlgebraicNode;
|
|
6
9
|
export declare const parseLatex: (latex: string) => AlgebraicNode | EqualNode | InequationNode;
|
|
10
|
+
export {};
|
|
7
11
|
//# sourceMappingURL=latexParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,
|
|
1
|
+
{"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,cAAc,UAAW,MAAM,SAAS,aAAa,kBAyBjE,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,MAAM,+CA2CvC,CAAC"}
|