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.
Files changed (97) hide show
  1. package/lib/exercises/math/calculLitteral/equation/choseOperationToSolveEquation.d.ts.map +1 -1
  2. package/lib/exercises/math/calculLitteral/equation/choseOperationToSolveEquation.js +65 -13
  3. package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.d.ts.map +1 -1
  4. package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.js +43 -0
  5. package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.d.ts.map +1 -1
  6. package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.js +23 -0
  7. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.d.ts.map +1 -1
  8. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.js +23 -0
  9. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.d.ts.map +1 -1
  10. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.js +49 -0
  11. package/lib/exercises/math/conversion/capacityConversion.d.ts.map +1 -1
  12. package/lib/exercises/math/conversion/capacityConversion.js +68 -12
  13. package/lib/exercises/math/conversion/hoursToDecimal.d.ts.map +1 -1
  14. package/lib/exercises/math/conversion/hoursToDecimal.js +73 -15
  15. package/lib/exercises/math/conversion/lengthConversion.d.ts.map +1 -1
  16. package/lib/exercises/math/conversion/lengthConversion.js +55 -6
  17. package/lib/exercises/math/conversion/massConversion.d.ts.map +1 -1
  18. package/lib/exercises/math/conversion/massConversion.js +72 -16
  19. package/lib/exercises/math/conversion/volumeConversion.d.ts.map +1 -1
  20. package/lib/exercises/math/conversion/volumeConversion.js +72 -12
  21. package/lib/exercises/math/functions/affines/signFunction.d.ts.map +1 -1
  22. package/lib/exercises/math/functions/affines/signFunction.js +23 -11
  23. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.d.ts.map +1 -1
  24. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.js +12 -5
  25. package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.d.ts.map +1 -1
  26. package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.js +68 -29
  27. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.d.ts.map +1 -1
  28. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.js +56 -4
  29. package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.d.ts.map +1 -1
  30. package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.js +71 -25
  31. package/lib/exercises/math/limits/polynomLimit.d.ts +1 -1
  32. package/lib/exercises/math/limits/polynomLimit.d.ts.map +1 -1
  33. package/lib/exercises/math/limits/polynomLimit.js +28 -9
  34. package/lib/exercises/math/limits/polynomLimitNoFI.d.ts +1 -1
  35. package/lib/exercises/math/limits/polynomLimitNoFI.d.ts.map +1 -1
  36. package/lib/exercises/math/limits/polynomLimitNoFI.js +29 -10
  37. package/lib/exercises/math/powers/calculateNegativePower.d.ts.map +1 -1
  38. package/lib/exercises/math/powers/calculateNegativePower.js +59 -16
  39. package/lib/exercises/math/powers/decimalToScientific.d.ts.map +1 -1
  40. package/lib/exercises/math/powers/decimalToScientific.js +55 -11
  41. package/lib/exercises/math/powers/index.d.ts +1 -0
  42. package/lib/exercises/math/powers/index.d.ts.map +1 -1
  43. package/lib/exercises/math/powers/index.js +1 -0
  44. package/lib/exercises/math/powers/powersDivision.d.ts +5 -2
  45. package/lib/exercises/math/powers/powersDivision.d.ts.map +1 -1
  46. package/lib/exercises/math/powers/powersDivision.js +68 -53
  47. package/lib/exercises/math/powers/powersMixOperations.d.ts +1 -0
  48. package/lib/exercises/math/powers/powersMixOperations.d.ts.map +1 -1
  49. package/lib/exercises/math/powers/powersMixOperations.js +88 -17
  50. package/lib/exercises/math/powers/powersOfTenMixOperations.d.ts +10 -0
  51. package/lib/exercises/math/powers/powersOfTenMixOperations.d.ts.map +1 -0
  52. package/lib/exercises/math/powers/powersOfTenMixOperations.js +129 -0
  53. package/lib/exercises/math/powers/powersOfTenToDecimal.d.ts.map +1 -1
  54. package/lib/exercises/math/powers/powersOfTenToDecimal.js +32 -3
  55. package/lib/exercises/math/powers/powersProduct.d.ts.map +1 -1
  56. package/lib/exercises/math/powers/powersProduct.js +1 -0
  57. package/lib/exercises/math/powers/scientificToDecimal.d.ts.map +1 -1
  58. package/lib/exercises/math/powers/scientificToDecimal.js +50 -10
  59. package/lib/exercises/math/primitive/polynomialPrimitive.d.ts.map +1 -1
  60. package/lib/exercises/math/primitive/polynomialPrimitive.js +1 -0
  61. package/lib/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.d.ts.map +1 -1
  62. package/lib/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.js +40 -2
  63. package/lib/exercises/math/sequences/geometric/geometricFirstTermsSum.d.ts.map +1 -1
  64. package/lib/exercises/math/sequences/geometric/geometricFirstTermsSum.js +32 -0
  65. package/lib/exercises/math/trigonometry/trigonometry.d.ts.map +1 -1
  66. package/lib/exercises/math/trigonometry/trigonometry.js +67 -1
  67. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts.map +1 -1
  68. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +89 -0
  69. package/lib/index.d.ts +14 -4
  70. package/lib/index.d.ts.map +1 -1
  71. package/lib/math/geometry/angle.d.ts.map +1 -1
  72. package/lib/math/geometry/angle.js +0 -5
  73. package/lib/math/geometry/vector.d.ts +1 -0
  74. package/lib/math/geometry/vector.d.ts.map +1 -1
  75. package/lib/math/geometry/vector.js +19 -0
  76. package/lib/math/numbers/decimals/decimal.d.ts +1 -0
  77. package/lib/math/numbers/decimals/decimal.d.ts.map +1 -1
  78. package/lib/math/numbers/decimals/decimal.js +2 -0
  79. package/lib/math/systems/generalSystem.d.ts +6 -1
  80. package/lib/math/systems/generalSystem.d.ts.map +1 -1
  81. package/lib/math/systems/generalSystem.js +137 -0
  82. package/lib/math/utils/arithmetic/lcm.js +1 -1
  83. package/lib/playground.d.ts.map +1 -1
  84. package/lib/playground.js +1 -36
  85. package/lib/tree/nodes/algebraicNode.d.ts +1 -0
  86. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  87. package/lib/tree/nodes/equations/equalNode.d.ts +7 -1
  88. package/lib/tree/nodes/equations/equalNode.d.ts.map +1 -1
  89. package/lib/tree/nodes/equations/equalNode.js +17 -9
  90. package/lib/tree/nodes/operators/addNode.js +1 -1
  91. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  92. package/lib/tree/nodes/operators/fractionNode.js +31 -11
  93. package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
  94. package/lib/tree/nodes/operators/powerNode.js +5 -0
  95. package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
  96. package/lib/tree/nodes/sets/intervalNode.js +3 -1
  97. 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
  }
@@ -1,5 +1,5 @@
1
1
  import { gcd } from "./gcd.js";
2
2
  export const lcm = (a, b) => {
3
3
  const pgcd = gcd(a, b);
4
- return (a * b) / pgcd;
4
+ return Math.abs((a * b) / pgcd);
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,UAAU,YAmCtB,CAAC"}
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 = () => { };
@@ -9,6 +9,7 @@ export type SimplifyOptions = {
9
9
  decimalToFractionsPrecisionAllowed?: boolean;
10
10
  forbidAdditions?: boolean;
11
11
  forbidTrigo?: boolean;
12
+ calculatePowers?: boolean;
12
13
  };
13
14
  export type EvaluateOptions = {
14
15
  degreeMode?: boolean;
@@ -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;CACvB,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"}
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;IAiGvB,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;CAMrE;AAED,eAAO,MAAM,qBAAqB,MAC7B,aAAa,KACb,aAAa,KACb,aAAa,KACb,aAAa,sBA2DjB,CAAC"}
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("Isolation only implemented for basic operations yet");
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)
@@ -420,6 +420,6 @@ const addSimplifyMonoms = (a, b, opts) => {
420
420
  return new NumberNode(0);
421
421
  return new MonomNode(sum, aMonom.degree, {
422
422
  variable: aMonom.variable,
423
- });
423
+ }).toTree();
424
424
  }
425
425
  };
@@ -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;IA2M/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"}
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.variable.toTree()).simplify(opts);
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
- //!ya mieux à faire pour gérer tous les cas d'un coup
234
- //!s'insiprer de multiply
235
- if (isPowerNode(num) &&
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;IA8C/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"}
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;IAwDnC,YAAY;IAIZ,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,iBAAiB;CAkDhE"}
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
- return new DiscreteSetNode([ordered[1].a]);
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) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "math-exercises",
3
3
  "type": "module",
4
- "version": "3.0.56",
4
+ "version": "3.0.57",
5
5
  "description": "Math exercises generator for middle school and high school",
6
6
  "main": "lib/index.js",
7
7
  "files": [