math-exercises 3.0.56 → 3.0.57
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/calculLitteral/equation/choseOperationToSolveEquation.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/choseOperationToSolveEquation.js +65 -13
- package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.js +43 -0
- package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.js +23 -0
- package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.js +23 -0
- package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.js +49 -0
- package/lib/exercises/math/conversion/capacityConversion.d.ts.map +1 -1
- package/lib/exercises/math/conversion/capacityConversion.js +68 -12
- package/lib/exercises/math/conversion/hoursToDecimal.d.ts.map +1 -1
- package/lib/exercises/math/conversion/hoursToDecimal.js +73 -15
- package/lib/exercises/math/conversion/lengthConversion.d.ts.map +1 -1
- package/lib/exercises/math/conversion/lengthConversion.js +55 -6
- package/lib/exercises/math/conversion/massConversion.d.ts.map +1 -1
- package/lib/exercises/math/conversion/massConversion.js +72 -16
- package/lib/exercises/math/conversion/volumeConversion.d.ts.map +1 -1
- package/lib/exercises/math/conversion/volumeConversion.js +72 -12
- package/lib/exercises/math/functions/affines/signFunction.d.ts.map +1 -1
- package/lib/exercises/math/functions/affines/signFunction.js +23 -11
- package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.d.ts.map +1 -1
- package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.js +12 -5
- package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.d.ts.map +1 -1
- package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.js +68 -29
- package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.d.ts.map +1 -1
- package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.js +56 -4
- package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.d.ts.map +1 -1
- package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.js +71 -25
- package/lib/exercises/math/limits/polynomLimit.d.ts +1 -1
- package/lib/exercises/math/limits/polynomLimit.d.ts.map +1 -1
- package/lib/exercises/math/limits/polynomLimit.js +28 -9
- package/lib/exercises/math/limits/polynomLimitNoFI.d.ts +1 -1
- package/lib/exercises/math/limits/polynomLimitNoFI.d.ts.map +1 -1
- package/lib/exercises/math/limits/polynomLimitNoFI.js +29 -10
- package/lib/exercises/math/powers/calculateNegativePower.d.ts.map +1 -1
- package/lib/exercises/math/powers/calculateNegativePower.js +59 -16
- package/lib/exercises/math/powers/decimalToScientific.d.ts.map +1 -1
- package/lib/exercises/math/powers/decimalToScientific.js +55 -11
- package/lib/exercises/math/powers/index.d.ts +1 -0
- package/lib/exercises/math/powers/index.d.ts.map +1 -1
- package/lib/exercises/math/powers/index.js +1 -0
- package/lib/exercises/math/powers/powersDivision.d.ts +5 -2
- package/lib/exercises/math/powers/powersDivision.d.ts.map +1 -1
- package/lib/exercises/math/powers/powersDivision.js +68 -53
- package/lib/exercises/math/powers/powersMixOperations.d.ts +1 -0
- package/lib/exercises/math/powers/powersMixOperations.d.ts.map +1 -1
- package/lib/exercises/math/powers/powersMixOperations.js +88 -17
- package/lib/exercises/math/powers/powersOfTenMixOperations.d.ts +10 -0
- package/lib/exercises/math/powers/powersOfTenMixOperations.d.ts.map +1 -0
- package/lib/exercises/math/powers/powersOfTenMixOperations.js +129 -0
- package/lib/exercises/math/powers/powersOfTenToDecimal.d.ts.map +1 -1
- package/lib/exercises/math/powers/powersOfTenToDecimal.js +32 -3
- package/lib/exercises/math/powers/powersProduct.d.ts.map +1 -1
- package/lib/exercises/math/powers/powersProduct.js +1 -0
- package/lib/exercises/math/powers/scientificToDecimal.d.ts.map +1 -1
- package/lib/exercises/math/powers/scientificToDecimal.js +50 -10
- package/lib/exercises/math/primitive/polynomialPrimitive.d.ts.map +1 -1
- package/lib/exercises/math/primitive/polynomialPrimitive.js +1 -0
- package/lib/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.js +40 -2
- package/lib/exercises/math/sequences/geometric/geometricFirstTermsSum.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricFirstTermsSum.js +32 -0
- package/lib/exercises/math/trigonometry/trigonometry.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/trigonometry.js +67 -1
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +89 -0
- package/lib/index.d.ts +14 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/math/geometry/angle.d.ts.map +1 -1
- package/lib/math/geometry/angle.js +0 -5
- package/lib/math/geometry/vector.d.ts +1 -0
- package/lib/math/geometry/vector.d.ts.map +1 -1
- package/lib/math/geometry/vector.js +19 -0
- package/lib/math/numbers/decimals/decimal.d.ts +1 -0
- package/lib/math/numbers/decimals/decimal.d.ts.map +1 -1
- package/lib/math/numbers/decimals/decimal.js +2 -0
- package/lib/math/systems/generalSystem.d.ts +6 -1
- package/lib/math/systems/generalSystem.d.ts.map +1 -1
- package/lib/math/systems/generalSystem.js +137 -0
- package/lib/math/utils/arithmetic/lcm.js +1 -1
- package/lib/playground.d.ts.map +1 -1
- package/lib/playground.js +1 -36
- package/lib/tree/nodes/algebraicNode.d.ts +1 -0
- package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
- package/lib/tree/nodes/equations/equalNode.d.ts +7 -1
- package/lib/tree/nodes/equations/equalNode.d.ts.map +1 -1
- package/lib/tree/nodes/equations/equalNode.js +17 -9
- package/lib/tree/nodes/operators/addNode.js +1 -1
- package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/fractionNode.js +31 -11
- package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/powerNode.js +5 -0
- package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/intervalNode.js +3 -1
- package/package.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { equal, EqualNode } from "../../tree/nodes/equations/equalNode.js";
|
|
1
2
|
import { reifyAlgebraic, } from "../../tree/nodes/nodeConstructor.js";
|
|
2
3
|
import { AddNode, add } from "../../tree/nodes/operators/addNode.js";
|
|
3
4
|
import { frac } from "../../tree/nodes/operators/fractionNode.js";
|
|
4
5
|
import { multiply, } from "../../tree/nodes/operators/multiplyNode.js";
|
|
5
6
|
import { substract, } from "../../tree/nodes/operators/substractNode.js";
|
|
6
7
|
import { doWhile } from "../../utils/doWhile.js";
|
|
8
|
+
import { alignTex } from "../../utils/latex/alignTex.js";
|
|
9
|
+
import { lcm } from "../utils/arithmetic/lcm.js";
|
|
7
10
|
import { randint } from "../utils/random/randint.js";
|
|
8
11
|
export class GeneralSystemConstructor {
|
|
9
12
|
static random() {
|
|
@@ -48,12 +51,34 @@ export class GeneralSystem {
|
|
|
48
51
|
coeffsIds: this.coeffs.map((row) => row.map((e) => e.toIdentifiers())),
|
|
49
52
|
};
|
|
50
53
|
}
|
|
54
|
+
simplify(opts) {
|
|
55
|
+
const simpCoeffs = this.coeffs.map((row) => row.map((c) => c.simplify(opts)));
|
|
56
|
+
return new GeneralSystem(simpCoeffs);
|
|
57
|
+
}
|
|
58
|
+
getEqualNodes() {
|
|
59
|
+
const [a, b, c] = this.coeffs[0];
|
|
60
|
+
const [d, e, f] = this.coeffs[1];
|
|
61
|
+
return [
|
|
62
|
+
new EqualNode(add(multiply(a, "x"), multiply(b, "y")), c),
|
|
63
|
+
new EqualNode(add(multiply(d, "x"), multiply(e, "y")), f),
|
|
64
|
+
];
|
|
65
|
+
}
|
|
51
66
|
checkCouple(x, y) {
|
|
52
67
|
const [a, b, c] = this.coeffs[0];
|
|
53
68
|
const [d, e, f] = this.coeffs[1];
|
|
54
69
|
return (add(multiply(a, x), multiply(b, y)).simplify().equals(c.simplify()) &&
|
|
55
70
|
add(multiply(d, x), multiply(e, y)).simplify().equals(f.simplify()));
|
|
56
71
|
}
|
|
72
|
+
multiplyEquation(nodes) {
|
|
73
|
+
return new GeneralSystem([
|
|
74
|
+
nodes[0].evaluate() !== 1
|
|
75
|
+
? this.coeffs[0].map((c) => multiply(c, nodes[0]))
|
|
76
|
+
: this.coeffs[0],
|
|
77
|
+
nodes[1].evaluate() !== 1
|
|
78
|
+
? this.coeffs[1].map((c) => multiply(c, nodes[1]))
|
|
79
|
+
: this.coeffs[1],
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
57
82
|
solve() {
|
|
58
83
|
if (this.coeffs.length !== 2)
|
|
59
84
|
throw Error("General system resolution not implemented yet");
|
|
@@ -110,4 +135,116 @@ ${add(multiply(this.coeffs[0][0], "x"), multiply(this.coeffs[0][1], "y")).toTex(
|
|
|
110
135
|
${new AddNode(multiply(this.coeffs[1][0], "x"), multiply(this.coeffs[1][1], "y")).toTex()}=${this.coeffs[1][2].toTex()}
|
|
111
136
|
\\end{matrix}\\right.`;
|
|
112
137
|
}
|
|
138
|
+
toCorrectionTex() {
|
|
139
|
+
let [equa1, equa2] = this.getEqualNodes();
|
|
140
|
+
const coeffs1 = this.coeffs[0];
|
|
141
|
+
const coeffs2 = this.coeffs[1];
|
|
142
|
+
let corr = "";
|
|
143
|
+
const unitCoeffIndex = [
|
|
144
|
+
coeffs1[0],
|
|
145
|
+
coeffs1[1],
|
|
146
|
+
coeffs2[0],
|
|
147
|
+
coeffs2[1],
|
|
148
|
+
].findIndex((e) => Math.abs(e.evaluate()) === 1);
|
|
149
|
+
//si une var est à coeff |1|, substitution
|
|
150
|
+
//sinon, cl :
|
|
151
|
+
const solveBySub = unitCoeffIndex > -1;
|
|
152
|
+
if (solveBySub) {
|
|
153
|
+
const isFirstEqua = unitCoeffIndex < 2;
|
|
154
|
+
const isX = unitCoeffIndex % 2 === 0;
|
|
155
|
+
const varName = isX ? "x" : "y";
|
|
156
|
+
const varName2 = isX ? "y" : "x";
|
|
157
|
+
const isolated = isFirstEqua
|
|
158
|
+
? equa1.isolate(varName)
|
|
159
|
+
: equa2.isolate(varName);
|
|
160
|
+
corr += `
|
|
161
|
+
|
|
162
|
+
On peut isoler $${varName}$ dans la ${isFirstEqua ? "première" : "deuxième"} équation :
|
|
163
|
+
|
|
164
|
+
$$
|
|
165
|
+
${isolated.toTex()}
|
|
166
|
+
$$`;
|
|
167
|
+
const substituted = (isFirstEqua ? equa2 : equa1).toDetailedEvaluation({
|
|
168
|
+
[varName]: isolated.rightChild,
|
|
169
|
+
});
|
|
170
|
+
const subSimp = substituted.simplify({
|
|
171
|
+
towardsDistribute: true,
|
|
172
|
+
forbidFactorize: true,
|
|
173
|
+
});
|
|
174
|
+
const isolated2 = subSimp.isolate(isX ? "y" : "x");
|
|
175
|
+
const varFinal = isolated.toDetailedEvaluation({
|
|
176
|
+
[varName2]: isolated2.rightChild,
|
|
177
|
+
});
|
|
178
|
+
const varFinalSimp = varFinal.simplify();
|
|
179
|
+
corr += `
|
|
180
|
+
|
|
181
|
+
On peut alors remplacer $${varName}$ dans la ${isFirstEqua ? "deuxième" : "première"} équation, pour en déduire $${isX ? "y" : "x"}$ :
|
|
182
|
+
|
|
183
|
+
${alignTex([[substituted.toTex()], [subSimp.toTex()], [isolated2.toTex()]])}
|
|
184
|
+
|
|
185
|
+
On a donc :
|
|
186
|
+
|
|
187
|
+
${alignTex([[isolated.toTex()], [varFinal.toTex()], [varFinalSimp.toTex()]])}
|
|
188
|
+
`;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
const coeffsEv = [coeffs1[0], coeffs1[1], coeffs2[0], coeffs2[1]].map((e) => e.evaluate());
|
|
192
|
+
const ppcms = [
|
|
193
|
+
lcm(coeffsEv[0], coeffsEv[2]),
|
|
194
|
+
lcm(coeffsEv[1], coeffsEv[3]),
|
|
195
|
+
];
|
|
196
|
+
const minPpcm = Math.min(...ppcms);
|
|
197
|
+
const isX = minPpcm === ppcms[0];
|
|
198
|
+
let firstEquaMultiple = minPpcm / Math.abs(coeffsEv[isX ? 0 : 1]);
|
|
199
|
+
let secondEquaMultiple = minPpcm / Math.abs(coeffsEv[isX ? 2 : 3]);
|
|
200
|
+
const areSameSign = coeffsEv[isX ? 0 : 1] * coeffsEv[isX ? 2 : 3] > 0;
|
|
201
|
+
if (areSameSign) {
|
|
202
|
+
firstEquaMultiple *= -1;
|
|
203
|
+
}
|
|
204
|
+
const shouldHandleFirst = firstEquaMultiple !== 1;
|
|
205
|
+
const shouldHandleSecond = secondEquaMultiple !== 1;
|
|
206
|
+
const sysMultiplied = this.multiplyEquation([
|
|
207
|
+
firstEquaMultiple.toTree(),
|
|
208
|
+
secondEquaMultiple.toTree(),
|
|
209
|
+
]).simplify();
|
|
210
|
+
if (shouldHandleFirst || shouldHandleSecond) {
|
|
211
|
+
corr += `
|
|
212
|
+
|
|
213
|
+
On multiple la ${shouldHandleFirst
|
|
214
|
+
? `première équation par $${firstEquaMultiple}$`
|
|
215
|
+
: `second équation par $${secondEquaMultiple}$`} ${shouldHandleFirst && shouldHandleSecond
|
|
216
|
+
? ` et la deuxième équation par $${secondEquaMultiple}$`
|
|
217
|
+
: ""} :
|
|
218
|
+
|
|
219
|
+
$$
|
|
220
|
+
${sysMultiplied.toTex()}
|
|
221
|
+
$$
|
|
222
|
+
|
|
223
|
+
`;
|
|
224
|
+
}
|
|
225
|
+
const equaMul = sysMultiplied.getEqualNodes();
|
|
226
|
+
const added = equal(add(equaMul[0].leftChild, equaMul[1].leftChild), add(equaMul[0].rightChild, equaMul[1].rightChild)).simplify();
|
|
227
|
+
const varName = isX ? "y" : "x";
|
|
228
|
+
const isolated = added.isolate(varName);
|
|
229
|
+
const sub = equa1.toDetailedEvaluation({
|
|
230
|
+
[varName]: isolated.rightChild,
|
|
231
|
+
});
|
|
232
|
+
const subSimp = sub.simplify({
|
|
233
|
+
forbidFactorize: true,
|
|
234
|
+
forceDistributeFractions: true,
|
|
235
|
+
towardsDistribute: true,
|
|
236
|
+
});
|
|
237
|
+
const subSimpToIsolateButWeShouldnt = sub.simplify({});
|
|
238
|
+
const isolated2 = subSimpToIsolateButWeShouldnt.isolate(isX ? "x" : "y");
|
|
239
|
+
corr += `On peut alors additionner les deux équations pour éliminer une des variables et isoler l'autre :
|
|
240
|
+
|
|
241
|
+
${alignTex([[added.toTex()], [isolated.toTex()]])}
|
|
242
|
+
|
|
243
|
+
On remplace maintenant dans la première équation :
|
|
244
|
+
|
|
245
|
+
${alignTex([[sub.toTex()], [subSimp.toTex()], [isolated2.toTex()]])}
|
|
246
|
+
`;
|
|
247
|
+
}
|
|
248
|
+
return corr;
|
|
249
|
+
}
|
|
113
250
|
}
|
package/lib/playground.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,UAAU,YAAW,CAAC"}
|
package/lib/playground.js
CHANGED
|
@@ -1,36 +1 @@
|
|
|
1
|
-
export const playground = () => {
|
|
2
|
-
// console.log(frac(1.1526241304, 3.5199999999).simplify().toTex());
|
|
3
|
-
// const ans = "3\\times 4 + 5"
|
|
4
|
-
// const res = "13"
|
|
5
|
-
// const allowedNumbers = []
|
|
6
|
-
// const min = 0
|
|
7
|
-
// const max = 100
|
|
8
|
-
// const inAscendingOrder = coinFlip()
|
|
9
|
-
// try {
|
|
10
|
-
// const parsed = parseAlgebraic(ans)
|
|
11
|
-
// const parsedRes = valueParser(res)
|
|
12
|
-
// if(parsedRes === false){
|
|
13
|
-
// return "Résultat incompris"
|
|
14
|
-
// }
|
|
15
|
-
// const simp = parsed.simplify()
|
|
16
|
-
// if(simp.evaluate() !== parsedRes){
|
|
17
|
-
// //assert résultat est bon
|
|
18
|
-
// return "Mauvais calcul"
|
|
19
|
-
// }
|
|
20
|
-
// if(parsedRes>max || parsedRes < min){
|
|
21
|
-
// return "Pas dans l'intervalle"
|
|
22
|
-
// }
|
|
23
|
-
// const usedNumbers = []
|
|
24
|
-
// if(usedNumbers.some((e)=>)){
|
|
25
|
-
// return "Vous ne pouvez utiliser chaque nombre qu'une fois"
|
|
26
|
-
// }
|
|
27
|
-
// if(usedNumbers.length !== allowedNumbers.length){
|
|
28
|
-
// return "Vous devez utiliser tous ces nombres et uniquement ceux ci"
|
|
29
|
-
// }
|
|
30
|
-
//assert tous les nombres utilisés
|
|
31
|
-
//assert pas d'autre nombres utilisés
|
|
32
|
-
//assert utilisés dans l'ordre croissant
|
|
33
|
-
// } catch(err){
|
|
34
|
-
// return "Erreur de syntaxe"
|
|
35
|
-
// }
|
|
36
|
-
};
|
|
1
|
+
export const playground = () => { };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algebraicNode.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/algebraicNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"algebraicNode.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/algebraicNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AACF,MAAM,WAAW,aAAc,SAAQ,IAAI;IACzC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;IAC5E,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,aAAa,CAAC;IAC7E,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,aAAa,EAAE,CAAC;IAC3D,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,aAAa,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;CACjD;AACD,8BAAsB,cAAc;;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB;AACD,eAAO,MAAM,eAAe,SAAU,IAAI,KAAG,IAAI,IAAI,aACX,CAAC"}
|
|
@@ -12,6 +12,10 @@ export declare abstract class EqualNodeConstructor {
|
|
|
12
12
|
static fromIdentifiers(identifiers: EqualNodeIdentifiers): EqualNode;
|
|
13
13
|
}
|
|
14
14
|
export declare const isEqualNode: (node: AlgebraicNode) => node is EqualNode;
|
|
15
|
+
type IsolateOptions = {
|
|
16
|
+
simpOpts?: SimplifyOptions;
|
|
17
|
+
steps?: string[];
|
|
18
|
+
};
|
|
15
19
|
export declare class EqualNode implements AlgebraicNode {
|
|
16
20
|
leftChild: AlgebraicNode;
|
|
17
21
|
rightChild: AlgebraicNode;
|
|
@@ -27,11 +31,13 @@ export declare class EqualNode implements AlgebraicNode {
|
|
|
27
31
|
simplify(opts?: SimplifyOptions): EqualNode;
|
|
28
32
|
shuffle(): EqualNode;
|
|
29
33
|
reverse(): EqualNode;
|
|
30
|
-
isolate(varName: string): EqualNode;
|
|
34
|
+
isolate(varName: string, opts?: IsolateOptions): EqualNode;
|
|
31
35
|
derivative(varName?: string): AlgebraicNode;
|
|
32
36
|
equals(node: AlgebraicNode): boolean;
|
|
33
37
|
evaluate(vars?: Record<string, number>, opts?: EvaluateOptions): number;
|
|
34
38
|
toDetailedEvaluation(vars: Record<string, AlgebraicNode>): EqualNode;
|
|
39
|
+
isVerified(): boolean;
|
|
35
40
|
}
|
|
36
41
|
export declare const equationResolutionTex: (a: AlgebraicNode, b: AlgebraicNode, c: AlgebraicNode, d: AlgebraicNode) => string | string[];
|
|
42
|
+
export {};
|
|
37
43
|
//# sourceMappingURL=equalNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/equations/equalNode.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAEL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAQ/B,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,cAOnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,8BAAsB,oBAAoB;IACxC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,GAAG,SAAS;CAOrE;AAED,eAAO,MAAM,WAAW,SAAU,aAAa,KAAG,IAAI,IAAI,SACzB,CAAC;AAElC,qBAAa,SAAU,YAAW,aAAa;IAC7C,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IASpB,aAAa,IAAI,oBAAoB;IAQrC,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAmBpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAM5C,YAAY,IAAI,MAAM;IAGtB,KAAK,IAAI,MAAM;IAIf,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAQ/B,OAAO;IAIP,OAAO;IAIP,OAAO,CAAC,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"equalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/equations/equalNode.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAEL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAQ/B,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,cAOnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,8BAAsB,oBAAoB;IACxC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,GAAG,SAAS;CAOrE;AAED,eAAO,MAAM,WAAW,SAAU,aAAa,KAAG,IAAI,IAAI,SACzB,CAAC;AAElC,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AACF,qBAAa,SAAU,YAAW,aAAa;IAC7C,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IASpB,aAAa,IAAI,oBAAoB;IAQrC,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAmBpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAM5C,YAAY,IAAI,MAAM;IAGtB,KAAK,IAAI,MAAM;IAIf,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAQ/B,OAAO;IAIP,OAAO;IAIP,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAsG9C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;IAG3C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAGpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM;IAGvE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,SAAS;IAMpE,UAAU;CAIX;AAED,eAAO,MAAM,qBAAqB,MAC7B,aAAa,KACb,aAAa,KACb,aAAa,KACb,aAAa,sBA2DjB,CAAC"}
|
|
@@ -77,7 +77,7 @@ export class EqualNode {
|
|
|
77
77
|
reverse() {
|
|
78
78
|
return new EqualNode(this.rightChild, this.leftChild, this.opts);
|
|
79
79
|
}
|
|
80
|
-
isolate(varName) {
|
|
80
|
+
isolate(varName, opts) {
|
|
81
81
|
//! bcp d'erreurs ne sont pas gérées, n'utiliser qu'en contexte sain
|
|
82
82
|
//! ne gère que des équations de premier degré
|
|
83
83
|
//!régler le pb des monomNode : faudrait les virer en fait
|
|
@@ -91,8 +91,9 @@ export class EqualNode {
|
|
|
91
91
|
///simp et recur
|
|
92
92
|
/// si x est dénum, appliquer fct inverse
|
|
93
93
|
///simp et recur
|
|
94
|
+
const steps = opts?.steps;
|
|
94
95
|
let right = (0).toTree();
|
|
95
|
-
const simpOpts = {
|
|
96
|
+
const simpOpts = opts?.simpOpts ?? {
|
|
96
97
|
towardsDistribute: true,
|
|
97
98
|
forbidFactorize: true,
|
|
98
99
|
forceDistributeFractions: false,
|
|
@@ -101,6 +102,9 @@ export class EqualNode {
|
|
|
101
102
|
// let simp = new EqualNode(left, right);
|
|
102
103
|
let i = 0;
|
|
103
104
|
const recur = () => {
|
|
105
|
+
if (steps) {
|
|
106
|
+
steps.push(equal(left, right).toTex());
|
|
107
|
+
}
|
|
104
108
|
i++;
|
|
105
109
|
if (i > 100)
|
|
106
110
|
throw new Error("too many iterations in isolate");
|
|
@@ -134,12 +138,12 @@ export class EqualNode {
|
|
|
134
138
|
else if (isMultiplyNode(left)) {
|
|
135
139
|
const xIsLeft = hasVariableNode(left.leftChild, varName);
|
|
136
140
|
if (xIsLeft) {
|
|
137
|
-
right = frac(right, left.rightChild).simplify();
|
|
138
|
-
left = frac(left, left.rightChild).simplify();
|
|
141
|
+
right = frac(right, left.rightChild).simplify(simpOpts);
|
|
142
|
+
left = frac(left, left.rightChild).simplify(simpOpts);
|
|
139
143
|
}
|
|
140
144
|
else {
|
|
141
|
-
right = frac(right, left.leftChild).simplify();
|
|
142
|
-
left = frac(left, left.leftChild).simplify();
|
|
145
|
+
right = frac(right, left.leftChild).simplify(simpOpts);
|
|
146
|
+
left = frac(left, left.leftChild).simplify(simpOpts);
|
|
143
147
|
}
|
|
144
148
|
}
|
|
145
149
|
else if (isFractionNode(left)) {
|
|
@@ -161,11 +165,11 @@ export class EqualNode {
|
|
|
161
165
|
}
|
|
162
166
|
}
|
|
163
167
|
else if (isOppositeNode(left)) {
|
|
164
|
-
left = opposite(left).simplify();
|
|
165
|
-
right = opposite(right).simplify();
|
|
168
|
+
left = opposite(left).simplify(simpOpts);
|
|
169
|
+
right = opposite(right).simplify(simpOpts);
|
|
166
170
|
}
|
|
167
171
|
else {
|
|
168
|
-
throw new Error(
|
|
172
|
+
throw new Error(`Isolation only implemented for basic operations yet, var ${varName}, equa ${left.toTex()}=${right.toTex()}`);
|
|
169
173
|
}
|
|
170
174
|
recur();
|
|
171
175
|
};
|
|
@@ -190,6 +194,10 @@ export class EqualNode {
|
|
|
190
194
|
toDetailedEvaluation(vars) {
|
|
191
195
|
return new EqualNode(this.leftChild.toDetailedEvaluation(vars), this.rightChild.toDetailedEvaluation(vars));
|
|
192
196
|
}
|
|
197
|
+
isVerified() {
|
|
198
|
+
//!trèèèès basique, ca marhce pour mon cas en cours mais pas en général
|
|
199
|
+
return this.leftChild.simplify().equals(this.rightChild.simplify());
|
|
200
|
+
}
|
|
193
201
|
}
|
|
194
202
|
export const equationResolutionTex = (a, b, c, d) => {
|
|
195
203
|
//(+-a)x(+-b) = (+-c)x(+-d)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,IAAI,MACZ,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AACF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAiBpB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,uBAAuB;IAQxC,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,SAAS;IAUT,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IA6BrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;
|
|
1
|
+
{"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,IAAI,MACZ,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AACF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAiBpB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,uBAAuB;IAQxC,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,SAAS;IAUT,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IA6BrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAgM/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,mBAAmB;IAQnB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAGxD"}
|
|
@@ -9,7 +9,7 @@ import { Rational } from "../../../math/numbers/rationals/rational.js";
|
|
|
9
9
|
import { operatorComposition } from "../../../tree/utilities/operatorComposition.js";
|
|
10
10
|
import { AddNode, isAddNode } from "./addNode.js";
|
|
11
11
|
import { PowerNode, isPowerNode } from "./powerNode.js";
|
|
12
|
-
import { SubstractNode, isSubstractNode } from "./substractNode.js";
|
|
12
|
+
import { SubstractNode, isSubstractNode, substract } from "./substractNode.js";
|
|
13
13
|
import { parseToMonomNode } from "../polynomials/monomNode.js";
|
|
14
14
|
export function isFractionNode(a) {
|
|
15
15
|
return isOperatorNode(a) && a.id === OperatorIds.fraction;
|
|
@@ -225,20 +225,14 @@ export class FractionNode {
|
|
|
225
225
|
if (opts?.forceDistributeFractions &&
|
|
226
226
|
isNumberNode(denum) &&
|
|
227
227
|
parsedMonom) {
|
|
228
|
-
return new MultiplyNode(new FractionNode(parsedMonom.a, denum), parsedMonom.
|
|
228
|
+
return new MultiplyNode(new FractionNode(parsedMonom.a, denum), parsedMonom.toTree()).simplify(opts);
|
|
229
229
|
}
|
|
230
230
|
if (isFractionNode(denum) && isFractionNode(num)) {
|
|
231
231
|
return new MultiplyNode(num, new FractionNode(denum.rightChild, denum.leftChild)).simplify(opts);
|
|
232
232
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
isPowerNode(denum) &&
|
|
237
|
-
num.rightChild.isNumeric &&
|
|
238
|
-
denum.rightChild.isNumeric &&
|
|
239
|
-
num.rightChild.evaluate() === denum.rightChild.evaluate()) {
|
|
240
|
-
return new PowerNode(new FractionNode(num.leftChild, denum.leftChild), num.rightChild).simplify(opts);
|
|
241
|
-
}
|
|
233
|
+
const powerSimp = powerSimplify(num, denum, opts);
|
|
234
|
+
if (powerSimp)
|
|
235
|
+
return powerSimp;
|
|
242
236
|
if (num.equals(denum))
|
|
243
237
|
return new NumberNode(1);
|
|
244
238
|
return null;
|
|
@@ -312,3 +306,29 @@ export class FractionNode {
|
|
|
312
306
|
throw new Error("unimplemented derivative");
|
|
313
307
|
}
|
|
314
308
|
}
|
|
309
|
+
const powerSimplify = (num, denum, opts) => {
|
|
310
|
+
//!ya mieux à faire pour gérer tous les cas d'un coup
|
|
311
|
+
//!s'insiprer de multiply
|
|
312
|
+
if (isPowerNode(num) &&
|
|
313
|
+
isPowerNode(denum) &&
|
|
314
|
+
num.leftChild.evaluate() === denum.leftChild.evaluate()) {
|
|
315
|
+
return new PowerNode(num.leftChild, substract(num.rightChild, denum.rightChild)).simplify(opts);
|
|
316
|
+
}
|
|
317
|
+
if (isPowerNode(num) &&
|
|
318
|
+
isNumberNode(denum) &&
|
|
319
|
+
num.leftChild.evaluate() === denum.evaluate()) {
|
|
320
|
+
return new PowerNode(num.leftChild, substract(num.rightChild, 1)).simplify(opts);
|
|
321
|
+
}
|
|
322
|
+
if (isPowerNode(denum) &&
|
|
323
|
+
isNumberNode(num) &&
|
|
324
|
+
num.evaluate() === denum.leftChild.evaluate()) {
|
|
325
|
+
return new PowerNode(num, substract(1, denum.rightChild)).simplify(opts);
|
|
326
|
+
}
|
|
327
|
+
if (isPowerNode(num) &&
|
|
328
|
+
isPowerNode(denum) &&
|
|
329
|
+
num.rightChild.isNumeric &&
|
|
330
|
+
denum.rightChild.isNumeric &&
|
|
331
|
+
num.rightChild.evaluate() === denum.rightChild.evaluate()) {
|
|
332
|
+
return new PowerNode(new FractionNode(num.leftChild, denum.leftChild), num.rightChild).simplify(opts);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powerNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/powerNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,UAAU,CAErD;AACD,eAAO,MAAM,MAAM,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,eAKxD,CAAC;AAEF,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,cAOnB,CAAC;AAEF,qBAAa,SAAU,YAAW,YAAY;IAC5C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,YAAY,IAAI,MAAM;IAGtB,aAAa;;;;;;;;;IAOb,iBAAiB;IAqBjB,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM;IAuBlC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;
|
|
1
|
+
{"version":3,"file":"powerNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/powerNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,UAAU,CAErD;AACD,eAAO,MAAM,MAAM,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,eAKxD,CAAC;AAEF,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,cAOnB,CAAC;AAEF,qBAAa,SAAU,YAAW,YAAY;IAC5C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,YAAY,IAAI,MAAM;IAGtB,aAAa;;;;;;;;;IAOb,iBAAiB;IAqBjB,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM;IAuBlC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAqD/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAcxD;AAED,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;CAIrD"}
|
|
@@ -112,6 +112,11 @@ export class PowerNode {
|
|
|
112
112
|
if (isNumberNode(rightSimplified) && rightSimplified.value === 1) {
|
|
113
113
|
return leftSimplified;
|
|
114
114
|
}
|
|
115
|
+
if (opts?.calculatePowers &&
|
|
116
|
+
isNumberNode(leftSimplified) &&
|
|
117
|
+
isNumberNode(rightSimplified)) {
|
|
118
|
+
return new NumberNode(leftSimplified.value ** rightSimplified.value);
|
|
119
|
+
}
|
|
115
120
|
if (isPowerNode(leftSimplified)) {
|
|
116
121
|
return new PowerNode(leftSimplified.leftChild, new MultiplyNode(rightSimplified, leftSimplified.rightChild).simplify(opts)).simplify(opts);
|
|
117
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/intervalNode.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,eAAe,EAAkB,MAAM,uBAAuB,CAAC;AAOxE,OAAO,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,8BAAsB,uBAAuB;IAC3C,MAAM,CAAC,MAAM;IA2Cb,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM;IAYlC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB;CAQpD;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AACF,qBAAa,YAAa,YAAW,OAAO;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;gBAGjB,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,EAChB,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,WAAW;IAYpB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW;IAMjC,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAoBpC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa;IA4BxC,YAAY;IAIZ,MAAM,CAAC,CAAC,EAAE,aAAa;IASvB,iBAAiB;IAGjB,qBAAqB;IAGrB,sBAAsB;IAGtB,wBAAwB;IAYxB,YAAY;IAkCZ,KAAK;IAWL,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAOvC,aAAa,IAAI,uBAAuB;IAUxC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IAiB7C,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAQ/B,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;IAG3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe;IAG9D,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IASxD,YAAY;IAGZ,aAAa;IAGb,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO;IAanC,UAAU,CAAC,QAAQ,EAAE,YAAY;IAEjC,YAAY,CAAC,QAAQ,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"intervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/intervalNode.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,eAAe,EAAkB,MAAM,uBAAuB,CAAC;AAOxE,OAAO,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,8BAAsB,uBAAuB;IAC3C,MAAM,CAAC,MAAM;IA2Cb,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM;IAYlC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB;CAQpD;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AACF,qBAAa,YAAa,YAAW,OAAO;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;gBAGjB,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,EAChB,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,WAAW;IAYpB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW;IAMjC,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAoBpC,YAAY,CAAC,WAAW,CAAC,EAAE,aAAa;IA4BxC,YAAY;IAIZ,MAAM,CAAC,CAAC,EAAE,aAAa;IASvB,iBAAiB;IAGjB,qBAAqB;IAGrB,sBAAsB;IAGtB,wBAAwB;IAYxB,YAAY;IAkCZ,KAAK;IAWL,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAOvC,aAAa,IAAI,uBAAuB;IAUxC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IAiB7C,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAQ/B,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;IAG3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe;IAG9D,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IASxD,YAAY;IAGZ,aAAa;IAGb,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO;IAanC,UAAU,CAAC,QAAQ,EAAE,YAAY;IAEjC,YAAY,CAAC,QAAQ,EAAE,YAAY;IA0DnC,YAAY;IAIZ,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,iBAAiB;CAkDhE"}
|
|
@@ -252,7 +252,9 @@ export class IntervalNode {
|
|
|
252
252
|
if (ordered[0].includes(ordered[1].a) ||
|
|
253
253
|
Math.abs(thisA - otherA) < 0.0000000001) {
|
|
254
254
|
if (Math.abs(orderedEv[0][1] - orderedEv[1][0]) < 0.0000000001) {
|
|
255
|
-
|
|
255
|
+
if (ordered[0].isRightClosed() && ordered[1].isLeftClosed())
|
|
256
|
+
return new DiscreteSetNode([ordered[1].a]);
|
|
257
|
+
return EmptySet;
|
|
256
258
|
}
|
|
257
259
|
let leftBracket = "[";
|
|
258
260
|
if (Math.abs(thisA - otherA) < 0.0000000001) {
|