math-exercises 2.2.70 → 2.2.72
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/fractions/fractionsOperations.d.ts.map +1 -1
- package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -2
- 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/identitiesWithNonIntegers.d.ts +10 -0
- package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.js +138 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +2 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/distributivity/index.js +2 -0
- 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/euclidianConstructions/pointImageFromTranslation.js +1 -1
- package/lib/exercises/math/geometry/index.d.ts +1 -0
- package/lib/exercises/math/geometry/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/index.js +1 -0
- package/lib/exercises/math/geometry/volumes/parallelepipedVolume.d.ts.map +1 -1
- package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +0 -1
- package/lib/exercises/math/probaStat/stats1var/index.d.ts +6 -0
- package/lib/exercises/math/probaStat/stats1var/index.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/stats1var/index.js +6 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.js +93 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.js +98 -0
- package/lib/exercises/math/probaStat/stats1var/quartilesList.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.js +131 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.js +144 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.js +121 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.js +133 -0
- package/lib/exercises/vea/sqrtVEA.d.ts +2 -1
- package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -1
- package/lib/exercises/vea/sqrtVEA.js +6 -3
- package/lib/index.d.ts +30 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/math/geometry/angle.d.ts +22 -1
- package/lib/math/geometry/angle.d.ts.map +1 -1
- package/lib/math/geometry/angle.js +138 -1
- package/lib/math/geometry/line.d.ts +2 -0
- package/lib/math/geometry/line.d.ts.map +1 -1
- package/lib/math/geometry/line.js +16 -0
- package/lib/math/geometry/point.d.ts +1 -0
- package/lib/math/geometry/point.d.ts.map +1 -1
- package/lib/math/geometry/point.js +4 -0
- package/lib/math/geometry/vector.d.ts +3 -0
- package/lib/math/geometry/vector.d.ts.map +1 -1
- package/lib/math/geometry/vector.js +9 -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 +4 -0
- package/lib/math/utils/quartiles.d.ts +3 -0
- package/lib/math/utils/quartiles.d.ts.map +1 -0
- package/lib/math/utils/quartiles.js +47 -0
- package/lib/math/utils/standardDeviation.d.ts +3 -0
- package/lib/math/utils/standardDeviation.d.ts.map +1 -0
- package/lib/math/utils/standardDeviation.js +13 -0
- package/lib/math/utils/variance.d.ts +1 -0
- package/lib/math/utils/variance.d.ts.map +1 -1
- package/lib/math/utils/variance.js +9 -1
- package/lib/playground.d.ts.map +1 -1
- package/lib/tree/nodes/node.d.ts +4 -2
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/node.js +2 -0
- package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
- package/lib/tree/nodes/nodeConstructor.js +4 -0
- package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/addNode.js +123 -90
- package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/multiplyNode.js +8 -0
- 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 +216 -0
- package/lib/tree/parsers/affineParser.js +1 -1
- 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 +84 -6
- package/lib/tree/parsers/polynomialParser.d.ts +3 -0
- package/lib/tree/parsers/polynomialParser.d.ts.map +1 -0
- package/lib/tree/parsers/polynomialParser.js +50 -0
- package/lib/tree/parsers/powerParser.d.ts +1 -1
- package/lib/tree/parsers/trinomParser.js +1 -1
- package/lib/utils/average.d.ts +1 -0
- package/lib/utils/average.d.ts.map +1 -1
- package/lib/utils/average.js +9 -1
- package/lib/utils/latex/approxOrEqual.d.ts +2 -0
- package/lib/utils/latex/approxOrEqual.d.ts.map +1 -0
- package/lib/utils/latex/approxOrEqual.js +11 -0
- package/lib/utils/variance.d.ts +2 -0
- package/lib/utils/variance.d.ts.map +1 -0
- package/lib/utils/variance.js +12 -0
- package/package.json +1 -1
|
@@ -0,0 +1,216 @@
|
|
|
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
|
+
forceDistributeFractions: true,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
toTex() {
|
|
72
|
+
return this.toTree().toTex();
|
|
73
|
+
}
|
|
74
|
+
toIdentifiers() {
|
|
75
|
+
return {
|
|
76
|
+
id: node_1.NodeIds.monom,
|
|
77
|
+
a: this.a.toIdentifiers(),
|
|
78
|
+
degree: this.degree,
|
|
79
|
+
opts: { variable: this.variable },
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.MonomNode = MonomNode;
|
|
84
|
+
const parseToMonom = (node, { variable, maxDegree, minDegree } = {
|
|
85
|
+
variable: "x",
|
|
86
|
+
maxDegree: undefined,
|
|
87
|
+
minDegree: 1,
|
|
88
|
+
}) => {
|
|
89
|
+
variable = variable ?? "x";
|
|
90
|
+
maxDegree = maxDegree ?? undefined;
|
|
91
|
+
minDegree = minDegree ?? 1;
|
|
92
|
+
if (isMonomNode(node)) {
|
|
93
|
+
if (node.variable !== variable)
|
|
94
|
+
return false;
|
|
95
|
+
if (maxDegree && node.degree > maxDegree)
|
|
96
|
+
return false;
|
|
97
|
+
if (minDegree && node.degree < minDegree)
|
|
98
|
+
return false;
|
|
99
|
+
return node;
|
|
100
|
+
}
|
|
101
|
+
if (node.isNumeric)
|
|
102
|
+
return false;
|
|
103
|
+
if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
|
|
104
|
+
return new MonomNode(1, 1, { variable });
|
|
105
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) &&
|
|
106
|
+
(0, variableNode_1.isVariableNode)(node.child) &&
|
|
107
|
+
node.child.name === variable &&
|
|
108
|
+
minDegree < 2)
|
|
109
|
+
return new MonomNode(-1, 1, { variable });
|
|
110
|
+
if ((0, powerNode_1.isSquareNode)(node)) {
|
|
111
|
+
if (minDegree > 2)
|
|
112
|
+
return false;
|
|
113
|
+
if (maxDegree && maxDegree < 2)
|
|
114
|
+
return false;
|
|
115
|
+
if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
|
|
116
|
+
return false;
|
|
117
|
+
return new MonomNode(1, 2, { variable });
|
|
118
|
+
}
|
|
119
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
|
|
120
|
+
if (minDegree > 2)
|
|
121
|
+
return false;
|
|
122
|
+
if (maxDegree && maxDegree < 2)
|
|
123
|
+
return false;
|
|
124
|
+
if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
|
|
125
|
+
node.child.leftChild.name !== variable)
|
|
126
|
+
return false;
|
|
127
|
+
return new MonomNode(-1, 2, { variable });
|
|
128
|
+
}
|
|
129
|
+
if ((0, powerNode_1.isPowerNode)(node)) {
|
|
130
|
+
if (!node.rightChild.isNumeric)
|
|
131
|
+
return false;
|
|
132
|
+
const powerEv = node.rightChild.evaluate();
|
|
133
|
+
if (maxDegree && powerEv > maxDegree)
|
|
134
|
+
return false;
|
|
135
|
+
if (minDegree && powerEv < minDegree)
|
|
136
|
+
return false;
|
|
137
|
+
if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
|
|
138
|
+
return false;
|
|
139
|
+
return new MonomNode(1, powerEv, { variable });
|
|
140
|
+
}
|
|
141
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
|
|
142
|
+
if (!node.child.rightChild.isNumeric)
|
|
143
|
+
return false;
|
|
144
|
+
const powerEv = node.child.rightChild.evaluate();
|
|
145
|
+
if (maxDegree && powerEv > maxDegree)
|
|
146
|
+
return false;
|
|
147
|
+
if (minDegree && powerEv < minDegree)
|
|
148
|
+
return false;
|
|
149
|
+
if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
|
|
150
|
+
node.child.leftChild.name !== variable)
|
|
151
|
+
return false;
|
|
152
|
+
return new MonomNode(-1, powerEv, { variable });
|
|
153
|
+
}
|
|
154
|
+
if ((0, multiplyNode_1.isMultiplyNode)(node)) {
|
|
155
|
+
const numericChildPosition = node.leftChild.isNumeric
|
|
156
|
+
? "left"
|
|
157
|
+
: node.rightChild.isNumeric
|
|
158
|
+
? "right"
|
|
159
|
+
: undefined;
|
|
160
|
+
if (!numericChildPosition)
|
|
161
|
+
return false;
|
|
162
|
+
const numericChild = numericChildPosition === "left" ? node.leftChild : node.rightChild;
|
|
163
|
+
const varChild = numericChildPosition === "left" ? node.rightChild : node.leftChild;
|
|
164
|
+
if ((0, variableNode_1.isVariableNode)(varChild)) {
|
|
165
|
+
if (varChild.name !== variable || minDegree > 1)
|
|
166
|
+
return false;
|
|
167
|
+
else
|
|
168
|
+
return new MonomNode(numericChild, 1, { variable });
|
|
169
|
+
}
|
|
170
|
+
if ((0, powerNode_1.isSquareNode)(varChild)) {
|
|
171
|
+
if (minDegree > 2)
|
|
172
|
+
return false;
|
|
173
|
+
if (maxDegree && maxDegree < 2)
|
|
174
|
+
return false;
|
|
175
|
+
if (!(0, variableNode_1.isVariableNode)(varChild.leftChild) ||
|
|
176
|
+
varChild.leftChild.name !== variable)
|
|
177
|
+
return false;
|
|
178
|
+
return new MonomNode(numericChild, 2, { variable });
|
|
179
|
+
}
|
|
180
|
+
if ((0, oppositeNode_1.isOppositeNode)(varChild) && (0, powerNode_1.isSquareNode)(varChild.child)) {
|
|
181
|
+
if (minDegree > 2)
|
|
182
|
+
return false;
|
|
183
|
+
if (maxDegree && maxDegree < 2)
|
|
184
|
+
return false;
|
|
185
|
+
if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild) ||
|
|
186
|
+
varChild.child.leftChild.name !== variable)
|
|
187
|
+
return false;
|
|
188
|
+
return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, { variable });
|
|
189
|
+
}
|
|
190
|
+
if ((0, powerNode_1.isPowerNode)(varChild) &&
|
|
191
|
+
(0, variableNode_1.isVariableNode)(varChild.leftChild) &&
|
|
192
|
+
varChild.leftChild.name === variable &&
|
|
193
|
+
varChild.rightChild.isNumeric) {
|
|
194
|
+
const powerEv = varChild.rightChild.evaluate();
|
|
195
|
+
if (maxDegree && powerEv > maxDegree)
|
|
196
|
+
return false;
|
|
197
|
+
if (minDegree && powerEv < minDegree)
|
|
198
|
+
return false;
|
|
199
|
+
return new MonomNode(numericChild, powerEv, { variable });
|
|
200
|
+
}
|
|
201
|
+
if ((0, oppositeNode_1.isOppositeNode)(varChild) &&
|
|
202
|
+
(0, powerNode_1.isPowerNode)(varChild.child) &&
|
|
203
|
+
(0, variableNode_1.isVariableNode)(varChild.child.leftChild) &&
|
|
204
|
+
varChild.child.leftChild.name === variable &&
|
|
205
|
+
varChild.child.rightChild.isNumeric) {
|
|
206
|
+
const powerEv = varChild.child.rightChild.evaluate();
|
|
207
|
+
if (maxDegree && powerEv > maxDegree)
|
|
208
|
+
return false;
|
|
209
|
+
if (minDegree && powerEv < minDegree)
|
|
210
|
+
return false;
|
|
211
|
+
return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, { variable });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
};
|
|
216
|
+
exports.parseToMonom = parseToMonom;
|
|
@@ -21,7 +21,7 @@ const affineParser = (ans, variable = "x") => {
|
|
|
21
21
|
if (!numericChild)
|
|
22
22
|
return false;
|
|
23
23
|
const varChild = numericChild === "left" ? parsed.rightChild : parsed.leftChild;
|
|
24
|
-
return (0, monomParser_1.
|
|
24
|
+
return (0, monomParser_1.isMonom)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
|
|
25
25
|
}
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AlgebraicNode } from "../nodes/algebraicNode";
|
|
2
2
|
type Opts = {
|
|
3
|
-
variable
|
|
3
|
+
variable?: string;
|
|
4
4
|
maxDegree?: number;
|
|
5
5
|
minDegree?: number;
|
|
6
6
|
};
|
|
7
7
|
export declare const monomParser: (str: string, { variable, maxDegree, minDegree }?: Opts) => false | AlgebraicNode;
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const isMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: Opts) => boolean;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=monomParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/monomParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"monomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/monomParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,WAAW,QACjB,MAAM,uCACyB,IAAI,0BAgBzC,CAAC;AAEF,eAAO,MAAM,OAAO,SACZ,aAAa,uCACiB,IAAI,YAoHzC,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isMonom = exports.monomParser = void 0;
|
|
4
|
+
const oppositeNode_1 = require("../nodes/functions/oppositeNode");
|
|
4
5
|
const fractionNode_1 = require("../nodes/operators/fractionNode");
|
|
5
6
|
const multiplyNode_1 = require("../nodes/operators/multiplyNode");
|
|
6
7
|
const powerNode_1 = require("../nodes/operators/powerNode");
|
|
8
|
+
const monomNode_1 = require("../nodes/polynomials/monomNode");
|
|
7
9
|
const variableNode_1 = require("../nodes/variables/variableNode");
|
|
8
10
|
const latexParser_1 = require("./latexParser");
|
|
9
11
|
const monomParser = (str, { variable, maxDegree, minDegree } = {
|
|
@@ -13,9 +15,7 @@ const monomParser = (str, { variable, maxDegree, minDegree } = {
|
|
|
13
15
|
}) => {
|
|
14
16
|
try {
|
|
15
17
|
const parsed = (0, latexParser_1.parseAlgebraic)(str);
|
|
16
|
-
return (0, exports.
|
|
17
|
-
? parsed
|
|
18
|
-
: false;
|
|
18
|
+
return (0, exports.isMonom)(parsed, { variable, maxDegree, minDegree }) ? parsed : false;
|
|
19
19
|
if ((0, fractionNode_1.isFractionNode)(parsed)) {
|
|
20
20
|
//!unimplemented
|
|
21
21
|
return false;
|
|
@@ -28,7 +28,7 @@ const monomParser = (str, { variable, maxDegree, minDegree } = {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
exports.monomParser = monomParser;
|
|
31
|
-
const
|
|
31
|
+
const isMonom = (node, { variable, maxDegree, minDegree } = {
|
|
32
32
|
variable: "x",
|
|
33
33
|
maxDegree: undefined,
|
|
34
34
|
minDegree: 0,
|
|
@@ -36,10 +36,61 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
|
|
|
36
36
|
variable = variable ?? "x";
|
|
37
37
|
maxDegree = maxDegree ?? undefined;
|
|
38
38
|
minDegree = minDegree ?? 0;
|
|
39
|
+
if ((0, monomNode_1.isMonomNode)(node)) {
|
|
40
|
+
if (node.variable !== variable)
|
|
41
|
+
return false;
|
|
42
|
+
if (maxDegree && node.degree > maxDegree)
|
|
43
|
+
return false;
|
|
44
|
+
if (minDegree && node.degree < minDegree)
|
|
45
|
+
return false;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
39
48
|
if (node.isNumeric && minDegree === 0)
|
|
40
49
|
return true;
|
|
50
|
+
//not monom
|
|
41
51
|
if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
|
|
42
52
|
return true;
|
|
53
|
+
//new MonomNode(1, 1, { variable });
|
|
54
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) &&
|
|
55
|
+
(0, variableNode_1.isVariableNode)(node.child) &&
|
|
56
|
+
node.child.name === variable &&
|
|
57
|
+
minDegree < 2)
|
|
58
|
+
return true;
|
|
59
|
+
// new MonomNode(-1, 1, {variable})
|
|
60
|
+
if ((0, powerNode_1.isSquareNode)(node)) {
|
|
61
|
+
if (minDegree > 2)
|
|
62
|
+
return false;
|
|
63
|
+
if (maxDegree && maxDegree < 2)
|
|
64
|
+
return false;
|
|
65
|
+
return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
|
|
66
|
+
}
|
|
67
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
|
|
68
|
+
if (minDegree > 2)
|
|
69
|
+
return false;
|
|
70
|
+
if (maxDegree && maxDegree < 2)
|
|
71
|
+
return false;
|
|
72
|
+
return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
|
|
73
|
+
}
|
|
74
|
+
if ((0, powerNode_1.isPowerNode)(node)) {
|
|
75
|
+
if (!node.rightChild.isNumeric)
|
|
76
|
+
return false;
|
|
77
|
+
const powerEv = node.rightChild.evaluate();
|
|
78
|
+
if (maxDegree && powerEv > maxDegree)
|
|
79
|
+
return false;
|
|
80
|
+
if (minDegree && powerEv < minDegree)
|
|
81
|
+
return false;
|
|
82
|
+
return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
|
|
83
|
+
}
|
|
84
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
|
|
85
|
+
if (!node.child.rightChild.isNumeric)
|
|
86
|
+
return false;
|
|
87
|
+
const powerEv = node.child.rightChild.evaluate();
|
|
88
|
+
if (maxDegree && powerEv > maxDegree)
|
|
89
|
+
return false;
|
|
90
|
+
if (minDegree && powerEv < minDegree)
|
|
91
|
+
return false;
|
|
92
|
+
return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
|
|
93
|
+
}
|
|
43
94
|
if ((0, multiplyNode_1.isMultiplyNode)(node)) {
|
|
44
95
|
const numericChild = node.leftChild.isNumeric
|
|
45
96
|
? "left"
|
|
@@ -51,6 +102,32 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
|
|
|
51
102
|
const varChild = numericChild === "left" ? node.rightChild : node.leftChild;
|
|
52
103
|
if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
|
|
53
104
|
return true;
|
|
105
|
+
//new MonomNode(numericChild, 1, {variable});
|
|
106
|
+
if ((0, powerNode_1.isPowerNode)(varChild) &&
|
|
107
|
+
(0, variableNode_1.isVariableNode)(varChild.leftChild) &&
|
|
108
|
+
varChild.leftChild.name === variable &&
|
|
109
|
+
varChild.rightChild.isNumeric) {
|
|
110
|
+
const powerEv = varChild.rightChild.evaluate();
|
|
111
|
+
if (maxDegree && powerEv > maxDegree)
|
|
112
|
+
return false;
|
|
113
|
+
if (minDegree && powerEv < minDegree)
|
|
114
|
+
return false;
|
|
115
|
+
// new MonomNode(numericChild, powerEv, { variable });
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if ((0, oppositeNode_1.isOppositeNode)(node) && (0, multiplyNode_1.isMultiplyNode)(node.child)) {
|
|
120
|
+
const numericChild = node.child.leftChild.isNumeric
|
|
121
|
+
? "left"
|
|
122
|
+
: node.child.rightChild.isNumeric
|
|
123
|
+
? "right"
|
|
124
|
+
: undefined;
|
|
125
|
+
if (!numericChild)
|
|
126
|
+
return false;
|
|
127
|
+
const varChild = numericChild === "left" ? node.child.rightChild : node.child.leftChild;
|
|
128
|
+
if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
|
|
129
|
+
return true;
|
|
130
|
+
//new MonomNode(numericChild, 1, {variable});
|
|
54
131
|
if ((0, powerNode_1.isPowerNode)(varChild) &&
|
|
55
132
|
(0, variableNode_1.isVariableNode)(varChild.leftChild) &&
|
|
56
133
|
varChild.leftChild.name === variable &&
|
|
@@ -60,9 +137,10 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
|
|
|
60
137
|
return false;
|
|
61
138
|
if (minDegree && powerEv < minDegree)
|
|
62
139
|
return false;
|
|
140
|
+
// new MonomNode(numericChild, powerEv, { variable });
|
|
63
141
|
return true;
|
|
64
142
|
}
|
|
65
143
|
}
|
|
66
144
|
return false;
|
|
67
145
|
};
|
|
68
|
-
exports.
|
|
146
|
+
exports.isMonom = isMonom;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AlgebraicNode } from "../nodes/algebraicNode";
|
|
2
|
+
export declare const polynomialParser: (ans: string) => false | AlgebraicNode | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/operators/substractNode").SubstractNode | import("../nodes/operators/addNode").AddNode;
|
|
3
|
+
//# sourceMappingURL=polynomialParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polynomialParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/polynomialParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,eAAO,MAAM,gBAAgB,QAAS,MAAM,8OAmC3C,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.polynomialParser = void 0;
|
|
4
|
+
const oppositeNode_1 = require("../nodes/functions/oppositeNode");
|
|
5
|
+
const addNode_1 = require("../nodes/operators/addNode");
|
|
6
|
+
const substractNode_1 = require("../nodes/operators/substractNode");
|
|
7
|
+
const latexParser_1 = require("./latexParser");
|
|
8
|
+
const monomParser_1 = require("./monomParser");
|
|
9
|
+
const numberParser_1 = require("./numberParser");
|
|
10
|
+
//!parses polynomes sous forme développée
|
|
11
|
+
//minDegree = 0, max = undefined
|
|
12
|
+
const polynomialParser = (ans) => {
|
|
13
|
+
try {
|
|
14
|
+
const nb = (0, numberParser_1.numberParser)(ans);
|
|
15
|
+
if (nb !== false) {
|
|
16
|
+
return nb.unfrenchify().toTree();
|
|
17
|
+
}
|
|
18
|
+
const monom = (0, monomParser_1.monomParser)(ans);
|
|
19
|
+
if (monom)
|
|
20
|
+
return monom;
|
|
21
|
+
const parsed = (0, latexParser_1.parseAlgebraic)(ans);
|
|
22
|
+
if (!parsed)
|
|
23
|
+
return false;
|
|
24
|
+
if ((0, addNode_1.isAddNode)(parsed) || (0, substractNode_1.isSubstractNode)(parsed)) {
|
|
25
|
+
const externals = [];
|
|
26
|
+
const recursive = (node) => {
|
|
27
|
+
if ((0, addNode_1.isAddNode)(node)) {
|
|
28
|
+
recursive(node.leftChild);
|
|
29
|
+
recursive(node.rightChild);
|
|
30
|
+
}
|
|
31
|
+
else if ((0, substractNode_1.isSubstractNode)(node)) {
|
|
32
|
+
recursive(node.leftChild);
|
|
33
|
+
recursive(new oppositeNode_1.OppositeNode(node.rightChild));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
externals.push(node);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
recursive(parsed);
|
|
40
|
+
if (externals.every((node) => (0, monomParser_1.isMonom)(node))) {
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.polynomialParser = polynomialParser;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const powerParser: (ans: string) => false | import("../nodes/operators/
|
|
1
|
+
export declare const powerParser: (ans: string) => false | import("../nodes/operators/powerNode").PowerNode | import("../nodes/operators/fractionNode").FractionNode;
|
|
2
2
|
//# sourceMappingURL=powerParser.d.ts.map
|
|
@@ -13,7 +13,7 @@ const trinomParser = (ans, variable = "x") => {
|
|
|
13
13
|
const parsed = (0, latexParser_1.parseAlgebraic)(ans);
|
|
14
14
|
if (!parsed)
|
|
15
15
|
return false;
|
|
16
|
-
if ((0, monomParser_1.
|
|
16
|
+
if ((0, monomParser_1.isMonom)(parsed, { variable, maxDegree: 2, minDegree: 2 }))
|
|
17
17
|
return parsed;
|
|
18
18
|
if ((0, addNode_1.isAddNode)(parsed) || (0, substractNode_1.isSubstractNode)(parsed)) {
|
|
19
19
|
const children = [parsed.leftChild, parsed.rightChild];
|
package/lib/utils/average.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../src/utils/average.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,QAAS,MAAM,EAAE,WAGpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../src/utils/average.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,QAAS,MAAM,EAAE,WAGpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,WAAY,MAAM,EAAE,aAAa,MAAM,EAAE,WAOzE,CAAC"}
|
package/lib/utils/average.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.average = void 0;
|
|
3
|
+
exports.averageWithEffectifs = exports.average = void 0;
|
|
4
4
|
const average = (arr) => {
|
|
5
5
|
if (!arr.length)
|
|
6
6
|
return 0;
|
|
7
7
|
return arr.reduce((acc, curr) => acc + curr) / arr.length;
|
|
8
8
|
};
|
|
9
9
|
exports.average = average;
|
|
10
|
+
const averageWithEffectifs = (values, effectifs) => {
|
|
11
|
+
if (!values.length || !effectifs.length || values.length !== effectifs.length)
|
|
12
|
+
throw Error("Malformed data in average");
|
|
13
|
+
const N = effectifs.reduce((acc, curr) => acc + curr, 0);
|
|
14
|
+
const avg = values.reduce((acc, value, index) => acc + value * effectifs[index], 0) / N;
|
|
15
|
+
return avg;
|
|
16
|
+
};
|
|
17
|
+
exports.averageWithEffectifs = averageWithEffectifs;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approxOrEqual.d.ts","sourceRoot":"","sources":["../../../src/utils/latex/approxOrEqual.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,UAAW,MAAM,WAAW,MAAM,aAI3D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.approxOrEqual = void 0;
|
|
4
|
+
const round_1 = require("../../math/utils/round");
|
|
5
|
+
const approxOrEqual = (value, roundTo) => {
|
|
6
|
+
const rounded = (0, round_1.round)(value, roundTo);
|
|
7
|
+
if (rounded === value)
|
|
8
|
+
return ["=", value.frenchify()];
|
|
9
|
+
return ["\\approx", rounded.frenchify()];
|
|
10
|
+
};
|
|
11
|
+
exports.approxOrEqual = approxOrEqual;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variance.d.ts","sourceRoot":"","sources":["../../src/utils/variance.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,QAAS,MAAM,EAAE,WAMrC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.variance = void 0;
|
|
4
|
+
const average_1 = require("./average");
|
|
5
|
+
const variance = (arr) => {
|
|
6
|
+
if (!arr.length)
|
|
7
|
+
return 0;
|
|
8
|
+
const avg = (0, average_1.average)(arr);
|
|
9
|
+
const n = arr.length;
|
|
10
|
+
return arr.reduce((acc, curr) => acc + (curr - avg) ** 2) / n;
|
|
11
|
+
};
|
|
12
|
+
exports.variance = variance;
|