math-exercises 2.2.68 → 2.2.70

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 (210) hide show
  1. package/lib/exercises/math/calcul/arithmetics/divisorsList.d.ts.map +1 -1
  2. package/lib/exercises/math/calcul/arithmetics/divisorsList.js +2 -1
  3. package/lib/exercises/math/calcul/arithmetics/primeNumbers.d.ts.map +1 -1
  4. package/lib/exercises/math/calcul/arithmetics/primeNumbers.js +2 -1
  5. package/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
  6. package/lib/exercises/math/calcul/fractions/fractionsOperations.js +1 -0
  7. package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.d.ts.map +1 -1
  8. package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.js +3 -6
  9. package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.d.ts.map +1 -1
  10. package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.js +3 -8
  11. package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.d.ts.map +1 -1
  12. package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.js +7 -9
  13. package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.d.ts.map +1 -1
  14. package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.js +6 -19
  15. package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts +8 -0
  16. package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts.map +1 -0
  17. package/lib/exercises/math/calculLitteral/factorisation/factoByX.js +146 -0
  18. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts +1 -0
  19. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts.map +1 -1
  20. package/lib/exercises/math/calculLitteral/factorisation/index.js +1 -0
  21. package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.d.ts +9 -0
  22. package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.d.ts.map +1 -0
  23. package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.js +175 -0
  24. package/lib/exercises/math/functions/absolute/index.d.ts +1 -0
  25. package/lib/exercises/math/functions/absolute/index.d.ts.map +1 -1
  26. package/lib/exercises/math/functions/absolute/index.js +1 -0
  27. package/lib/exercises/math/functions/trinoms/coefficientsIdentification.js +3 -3
  28. package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts +2 -2
  29. package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts.map +1 -1
  30. package/lib/exercises/math/functions/trinoms/findSecondRoot.js +5 -5
  31. package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts +2 -2
  32. package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts.map +1 -1
  33. package/lib/exercises/math/functions/trinoms/rootsProduct.js +7 -7
  34. package/lib/exercises/math/functions/trinoms/rootsSum.d.ts +2 -2
  35. package/lib/exercises/math/functions/trinoms/rootsSum.d.ts.map +1 -1
  36. package/lib/exercises/math/functions/trinoms/rootsSum.js +9 -10
  37. package/lib/exercises/math/functions/trinoms/trinomSignFromRoots.js +6 -6
  38. package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts +3 -1
  39. package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts.map +1 -1
  40. package/lib/exercises/math/geometry/areas/rightTriangleArea.js +10 -22
  41. package/lib/exercises/math/geometry/areas/triangleArea.d.ts +6 -1
  42. package/lib/exercises/math/geometry/areas/triangleArea.d.ts.map +1 -1
  43. package/lib/exercises/math/geometry/areas/triangleArea.js +34 -48
  44. package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.d.ts.map +1 -1
  45. package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +4 -1
  46. package/lib/exercises/math/geometry/index.d.ts +1 -0
  47. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  48. package/lib/exercises/math/geometry/index.js +1 -0
  49. package/lib/exercises/math/geometry/pythagore/isTriangleRight.d.ts.map +1 -1
  50. package/lib/exercises/math/geometry/pythagore/pythagore.d.ts +0 -3
  51. package/lib/exercises/math/geometry/pythagore/pythagore.d.ts.map +1 -1
  52. package/lib/exercises/math/geometry/pythagore/pythagore.js +19 -25
  53. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts +1 -2
  54. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts.map +1 -1
  55. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.js +30 -65
  56. package/lib/exercises/math/geometry/quadrilaterals/index.d.ts +2 -0
  57. package/lib/exercises/math/geometry/quadrilaterals/index.d.ts.map +1 -0
  58. package/lib/exercises/math/geometry/quadrilaterals/index.js +17 -0
  59. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts +14 -0
  60. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts.map +1 -0
  61. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.js +221 -0
  62. package/lib/exercises/math/geometry/thales/index.d.ts.map +1 -1
  63. package/lib/exercises/math/geometry/thales/index.js +0 -1
  64. package/lib/exercises/math/geometry/thales/thales.js +2 -2
  65. package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts +3 -4
  66. package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts.map +1 -1
  67. package/lib/exercises/math/geometry/thales/thalesCalcul.js +69 -78
  68. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.d.ts.map +1 -1
  69. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +4 -3
  70. package/lib/exercises/math/geometry/volumes/sphereVolume.js +1 -1
  71. package/lib/exercises/math/trigonometry/trigonometry.d.ts +2 -3
  72. package/lib/exercises/math/trigonometry/trigonometry.d.ts.map +1 -1
  73. package/lib/exercises/math/trigonometry/trigonometry.js +32 -31
  74. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts +3 -2
  75. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts.map +1 -1
  76. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +18 -28
  77. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts +5 -4
  78. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts.map +1 -1
  79. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.js +60 -56
  80. package/lib/exercises/pc/index.d.ts +0 -4
  81. package/lib/exercises/pc/index.d.ts.map +1 -1
  82. package/lib/exercises/pc/index.js +6 -4
  83. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts +1 -0
  84. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts.map +1 -1
  85. package/lib/exercises/vea/equationVEA.d.ts +2 -0
  86. package/lib/exercises/vea/equationVEA.d.ts.map +1 -0
  87. package/lib/exercises/vea/equationVEA.js +24 -0
  88. package/lib/exercises/vea/rationalVEA.d.ts.map +1 -1
  89. package/lib/exercises/vea/sqrtVEA.d.ts +6 -0
  90. package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -0
  91. package/lib/exercises/vea/sqrtVEA.js +30 -0
  92. package/lib/geogebra/geogebraConstructor.d.ts +2 -0
  93. package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
  94. package/lib/geogebra/geogebraConstructor.js +7 -0
  95. package/lib/index.d.ts +31 -46
  96. package/lib/index.d.ts.map +1 -1
  97. package/lib/math/complex/complex.d.ts +1 -1
  98. package/lib/math/geometry/angle.d.ts +26 -0
  99. package/lib/math/geometry/angle.d.ts.map +1 -0
  100. package/lib/math/geometry/angle.js +73 -0
  101. package/lib/math/geometry/line.d.ts +5 -1
  102. package/lib/math/geometry/line.d.ts.map +1 -1
  103. package/lib/math/geometry/line.js +17 -0
  104. package/lib/math/geometry/parallelogram.d.ts +23 -0
  105. package/lib/math/geometry/parallelogram.d.ts.map +1 -0
  106. package/lib/math/geometry/parallelogram.js +70 -0
  107. package/lib/math/geometry/point.d.ts +3 -0
  108. package/lib/math/geometry/point.d.ts.map +1 -1
  109. package/lib/math/geometry/point.js +16 -0
  110. package/lib/math/geometry/quadrilateral.d.ts +15 -0
  111. package/lib/math/geometry/quadrilateral.d.ts.map +1 -0
  112. package/lib/math/geometry/quadrilateral.js +38 -0
  113. package/lib/math/geometry/rectangle.d.ts +24 -0
  114. package/lib/math/geometry/rectangle.d.ts.map +1 -0
  115. package/lib/math/geometry/rectangle.js +64 -0
  116. package/lib/math/geometry/rhombus.d.ts +19 -0
  117. package/lib/math/geometry/rhombus.d.ts.map +1 -0
  118. package/lib/math/geometry/rhombus.js +46 -0
  119. package/lib/math/geometry/rightTriangle.d.ts +31 -0
  120. package/lib/math/geometry/rightTriangle.d.ts.map +1 -0
  121. package/lib/math/geometry/rightTriangle.js +113 -0
  122. package/lib/math/geometry/segment.d.ts +24 -6
  123. package/lib/math/geometry/segment.d.ts.map +1 -1
  124. package/lib/math/geometry/segment.js +70 -4
  125. package/lib/math/geometry/square.d.ts +22 -0
  126. package/lib/math/geometry/square.d.ts.map +1 -0
  127. package/lib/math/geometry/square.js +43 -0
  128. package/lib/math/geometry/triangle.d.ts +45 -45
  129. package/lib/math/geometry/triangle.d.ts.map +1 -1
  130. package/lib/math/geometry/triangle.js +159 -186
  131. package/lib/math/geometry/vector.d.ts +2 -2
  132. package/lib/math/geometry/vector.d.ts.map +1 -1
  133. package/lib/math/geometry/vector.js +18 -9
  134. package/lib/math/numbers/nombre.d.ts +5 -0
  135. package/lib/math/numbers/nombre.d.ts.map +1 -1
  136. package/lib/math/numbers/nombre.js +12 -0
  137. package/lib/math/numbers/rationals/rational.d.ts +1 -1
  138. package/lib/math/numbers/reals/extendedRingElement.d.ts +1 -1
  139. package/lib/math/numbers/reals/real.d.ts.map +1 -1
  140. package/lib/math/numbers/reals/real.js +3 -0
  141. package/lib/math/polynomials/generalAffine.d.ts +13 -0
  142. package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
  143. package/lib/math/polynomials/generalAffine.js +25 -1
  144. package/lib/math/polynomials/polynomial.d.ts +1 -1
  145. package/lib/math/polynomials/trinom.d.ts +2 -2
  146. package/lib/math/utils/geometry/pythagoricianTriplets.d.ts +1 -0
  147. package/lib/math/utils/geometry/pythagoricianTriplets.d.ts.map +1 -1
  148. package/lib/math/utils/geometry/pythagoricianTriplets.js +14 -1
  149. package/lib/math/utils/random/randfloat.d.ts +1 -1
  150. package/lib/math/utils/random/randfloat.d.ts.map +1 -1
  151. package/lib/math/utils/random/randfloat.js +8 -1
  152. package/lib/math/utils/random/randint.d.ts +8 -1
  153. package/lib/math/utils/random/randint.d.ts.map +1 -1
  154. package/lib/math/utils/random/randint.js +6 -1
  155. package/lib/playground.d.ts.map +1 -1
  156. package/lib/tree/nodes/functions/absNode.d.ts +2 -1
  157. package/lib/tree/nodes/functions/absNode.d.ts.map +1 -1
  158. package/lib/tree/nodes/functions/absNode.js +6 -1
  159. package/lib/tree/nodes/functions/functionNode.d.ts +2 -2
  160. package/lib/tree/nodes/functions/functionNode.d.ts.map +1 -1
  161. package/lib/tree/nodes/functions/oppositeNode.d.ts +5 -5
  162. package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
  163. package/lib/tree/nodes/node.d.ts +3 -1
  164. package/lib/tree/nodes/node.d.ts.map +1 -1
  165. package/lib/tree/nodes/node.js +1 -0
  166. package/lib/tree/nodes/nodeConstructor.d.ts +3 -0
  167. package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
  168. package/lib/tree/nodes/nodeConstructor.js +9 -1
  169. package/lib/tree/nodes/numbers/numberNode.d.ts +2 -0
  170. package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
  171. package/lib/tree/nodes/numbers/numberNode.js +6 -1
  172. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  173. package/lib/tree/nodes/operators/addNode.js +2 -1
  174. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  175. package/lib/tree/nodes/operators/fractionNode.js +6 -1
  176. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  177. package/lib/tree/nodes/operators/multiplyNode.js +3 -3
  178. package/lib/tree/nodes/polynomials/trinomNode.d.ts +70 -0
  179. package/lib/tree/nodes/polynomials/trinomNode.d.ts.map +1 -0
  180. package/lib/tree/nodes/polynomials/trinomNode.js +156 -0
  181. package/lib/tree/nodes/variables/variableNode.d.ts.map +1 -1
  182. package/lib/tree/nodes/variables/variableNode.js +1 -1
  183. package/lib/tree/parsers/affineParser.d.ts.map +1 -1
  184. package/lib/tree/parsers/affineParser.js +1 -0
  185. package/lib/tree/parsers/discreteSetParser.d.ts +3 -0
  186. package/lib/tree/parsers/discreteSetParser.d.ts.map +1 -0
  187. package/lib/tree/parsers/discreteSetParser.js +23 -0
  188. package/lib/tree/parsers/equationSolutionParser.d.ts +1 -1
  189. package/lib/tree/parsers/equationSolutionParser.d.ts.map +1 -1
  190. package/lib/tree/parsers/equationSolutionParser.js +15 -4
  191. package/lib/tree/parsers/latexParser.d.ts +5 -1
  192. package/lib/tree/parsers/latexParser.d.ts.map +1 -1
  193. package/lib/tree/parsers/latexParser.js +17 -3
  194. package/lib/tree/parsers/monomParser.js +2 -2
  195. package/lib/tree/parsers/powerParser.d.ts +1 -1
  196. package/lib/tree/parsers/rationalParser.d.ts +1 -1
  197. package/lib/tree/parsers/rationalParser.d.ts.map +1 -1
  198. package/lib/tree/parsers/rationalParser.js +29 -24
  199. package/lib/tree/parsers/sqrtParser.d.ts +9 -0
  200. package/lib/tree/parsers/sqrtParser.d.ts.map +1 -0
  201. package/lib/tree/parsers/sqrtParser.js +52 -0
  202. package/lib/tree/parsers/trinomParser.d.ts +1 -1
  203. package/lib/tree/parsers/trinomParser.d.ts.map +1 -1
  204. package/lib/tree/parsers/trinomParser.js +14 -2
  205. package/lib/tree/utilities/functionComposition.d.ts +1 -1
  206. package/lib/tree/utilities/functionComposition.d.ts.map +1 -1
  207. package/lib/utils/arrays/rotation.d.ts +8 -0
  208. package/lib/utils/arrays/rotation.d.ts.map +1 -0
  209. package/lib/utils/arrays/rotation.js +17 -0
  210. package/package.json +1 -1
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrinomNode = exports.TrinomNodeConstructor = void 0;
4
+ const sqrtNode_1 = require("../../../tree/nodes/functions/sqrtNode");
5
+ const addNode_1 = require("../../../tree/nodes/operators/addNode");
6
+ const fractionNode_1 = require("../../../tree/nodes/operators/fractionNode");
7
+ const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
8
+ const powerNode_1 = require("../../../tree/nodes/operators/powerNode");
9
+ const substractNode_1 = require("../../../tree/nodes/operators/substractNode");
10
+ const oppositeNode_1 = require("../../../tree/nodes/functions/oppositeNode");
11
+ const randint_1 = require("../../../math/utils/random/randint");
12
+ const random_1 = require("../../../utils/alea/random");
13
+ const node_1 = require("../../../tree/nodes/node");
14
+ const nodeConstructor_1 = require("../../../tree/nodes/nodeConstructor");
15
+ class TrinomNodeConstructor {
16
+ static random(aOpts, bOpts, cOpts) {
17
+ const a = (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
18
+ const b = (0, randint_1.randint)(bOpts?.min ?? -9, bOpts?.max ?? 10, bOpts?.excludes ?? []);
19
+ const c = (0, randint_1.randint)(cOpts?.min ?? -9, cOpts?.max ?? 10, cOpts?.excludes ?? []);
20
+ return new TrinomNode(a, b, c);
21
+ }
22
+ static randomCanonical(aOpts, alphaOpts, betaOpts) {
23
+ const a = aOpts?.from
24
+ ? (0, random_1.random)(aOpts.from)
25
+ : (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
26
+ const alpha = (0, randint_1.randint)(alphaOpts?.min ?? -9, alphaOpts?.max ?? 10, alphaOpts?.excludes ?? []);
27
+ const beta = (0, randint_1.randint)(betaOpts?.min ?? -9, betaOpts?.max ?? 10, betaOpts?.excludes ?? []);
28
+ const b = -2 * a * alpha;
29
+ const c = a * alpha ** 2 + beta;
30
+ return new TrinomNode(a, b, c);
31
+ }
32
+ static randomNiceRoots(nbOfRoots = 2) {
33
+ if (nbOfRoots === 0) {
34
+ //canonical +c
35
+ const a = (0, randint_1.randint)(-9, 10, [0]);
36
+ const root = (0, randint_1.randint)(-9, 10);
37
+ //a(x-root)^2 = ax^2 -2arootx + aroot^2
38
+ const c = a > 0 ? a * root ** 2 + (0, randint_1.randint)(1, 6) : a * root ** 2 - (0, randint_1.randint)(1, 6);
39
+ return new TrinomNode(a, -2 * a * root, c);
40
+ }
41
+ else if (nbOfRoots === 1) {
42
+ const a = (0, randint_1.randint)(-9, 10, [0]);
43
+ const root = (0, randint_1.randint)(-9, 10);
44
+ //a(x-root)^2 = ax^2 -2arootx + aroot^2
45
+ return new TrinomNode(a, -2 * a * root, a * root ** 2);
46
+ }
47
+ else {
48
+ const a = (0, randint_1.randint)(-9, 10, [0]);
49
+ const x1 = (0, randint_1.randint)(-9, 10, []);
50
+ const x2 = (0, randint_1.randint)(-9, 10, [x1]);
51
+ return new TrinomNode(a, -a * (x1 + x2), a * x1 * x2);
52
+ }
53
+ }
54
+ static fromCoeffs(coeffs) {
55
+ return new TrinomNode(coeffs[2], coeffs[1], coeffs[0]);
56
+ }
57
+ static fromIdentifiers(identifiers) {
58
+ return new TrinomNode(typeof identifiers.a === "number"
59
+ ? identifiers.a
60
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.a), typeof identifiers.b === "number"
61
+ ? identifiers.b
62
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.b), typeof identifiers.c === "number"
63
+ ? identifiers.c
64
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.c), identifiers.opts);
65
+ }
66
+ }
67
+ exports.TrinomNodeConstructor = TrinomNodeConstructor;
68
+ class TrinomNode {
69
+ // roots: AlgebraicNode[];
70
+ constructor(a, b, c, opts) {
71
+ this.type = node_1.NodeType.trinom;
72
+ // super([c, b, a], opts?.variable ?? "x");
73
+ this.a = typeof a === "number" ? a.toTree() : a;
74
+ this.b = typeof b === "number" ? b.toTree() : b;
75
+ this.c = typeof c === "number" ? c.toTree() : c;
76
+ this.isNumeric = false;
77
+ this.variable = opts?.variable ?? "x";
78
+ }
79
+ getDelta() {
80
+ return (0, substractNode_1.substract)((0, powerNode_1.square)(this.b), (0, multiplyNode_1.multiply)(4, (0, multiplyNode_1.multiply)(this.a, this.c))).simplify();
81
+ }
82
+ // getRoots() {
83
+ // const delta = this.getDelta();
84
+ // if (delta < 0) return [];
85
+ // if (delta === 0) return [-this.b / (2 * this.a)];
86
+ // return [
87
+ // (-this.b - Math.sqrt(delta)) / (2 * this.a),
88
+ // (-this.b + Math.sqrt(delta)) / (2 * this.a),
89
+ // ].sort((a, b) => a - b);
90
+ // }
91
+ derivative(varName) {
92
+ return (0, addNode_1.add)((0, multiplyNode_1.multiply)(2, (0, multiplyNode_1.multiply)(this.a, "x")), this.b);
93
+ }
94
+ equals(node) {
95
+ return this.toTree().equals(node);
96
+ }
97
+ evaluate(vars) {
98
+ return this.toTree().evaluate(vars);
99
+ }
100
+ toDetailedEvaluation(vars) {
101
+ return this.toTree().toDetailedEvaluation(vars);
102
+ }
103
+ simplify(opts) {
104
+ return this.toTree().simplify(opts);
105
+ }
106
+ toAllValidTexs(opts) {
107
+ return this.toTree().toAllValidTexs(opts);
108
+ }
109
+ toEquivalentNodes(opts) {
110
+ return this.toTree().toEquivalentNodes(opts);
111
+ }
112
+ toMathString() {
113
+ return this.toTree().toMathString();
114
+ }
115
+ getRoots() {
116
+ const delta = this.getDelta();
117
+ const deltaEv = delta.evaluate();
118
+ if (deltaEv < 0)
119
+ return [];
120
+ if (deltaEv === 0)
121
+ return [(0, fractionNode_1.frac)((0, oppositeNode_1.opposite)(this.b), (0, multiplyNode_1.multiply)(2, this.a)).simplify()];
122
+ return [
123
+ (0, fractionNode_1.frac)((0, substractNode_1.substract)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
124
+ (0, fractionNode_1.frac)((0, addNode_1.add)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
125
+ ].sort((a, b) => a.evaluate() - b.evaluate());
126
+ }
127
+ toTree() {
128
+ const bEv = this.b.evaluate();
129
+ const cEv = this.c.evaluate();
130
+ const highMonom = (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.square)(this.variable));
131
+ const middleMonom = (0, multiplyNode_1.multiply)(this.b, this.variable);
132
+ if (!bEv && !cEv)
133
+ return highMonom;
134
+ if (!cEv)
135
+ return (0, addNode_1.add)(highMonom, middleMonom);
136
+ if (!bEv)
137
+ return (0, addNode_1.add)(highMonom, this.c);
138
+ return (0, addNode_1.add)(highMonom, (0, addNode_1.add)(middleMonom, this.c));
139
+ }
140
+ toTex() {
141
+ return this.toTree().toTex();
142
+ }
143
+ getCoeffs() {
144
+ return [this.c.evaluate(), this.b.evaluate(), this.a.evaluate()];
145
+ }
146
+ toIdentifiers() {
147
+ return {
148
+ id: node_1.NodeIds.trinom,
149
+ a: this.a.toIdentifiers(),
150
+ b: this.b.toIdentifiers(),
151
+ c: this.c.toIdentifiers(),
152
+ opts: { variable: this.variable },
153
+ };
154
+ }
155
+ }
156
+ exports.TrinomNode = TrinomNode;
@@ -1 +1 @@
1
- {"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAStC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAKxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAKxD"}
1
+ {"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQtC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAKxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAKxD"}
@@ -36,7 +36,7 @@ class VariableNode {
36
36
  evaluate(vars) {
37
37
  const value = vars?.[this.name];
38
38
  if (value === undefined)
39
- throw Error(`Can't evaluate variable ${this.name}`);
39
+ return Number.NaN;
40
40
  return value;
41
41
  }
42
42
  // simplify(): Node {
@@ -1 +1 @@
1
- {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAqBzD,CAAC"}
1
+ {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAuBzD,CAAC"}
@@ -7,6 +7,7 @@ const latexParser_1 = require("./latexParser");
7
7
  const monomParser_1 = require("./monomParser");
8
8
  const affineParser = (ans, variable = "x") => {
9
9
  try {
10
+ //double parse, pas opti
10
11
  const monom = (0, monomParser_1.monomParser)(ans, { variable, maxDegree: 1 });
11
12
  if (monom)
12
13
  return monom;
@@ -0,0 +1,3 @@
1
+ import { AlgebraicNode } from "../nodes/algebraicNode";
2
+ export declare const discreteSetParser: (str: string) => false | AlgebraicNode[];
3
+ //# sourceMappingURL=discreteSetParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discreteSetParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/discreteSetParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,iBAAiB,QAAS,MAAM,4BAe5C,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discreteSetParser = void 0;
4
+ const latexParser_1 = require("./latexParser");
5
+ const discreteSetParser = (str) => {
6
+ try {
7
+ const formated = str
8
+ .replace("S", "")
9
+ .replace("=", "")
10
+ .replace("\\left", "")
11
+ .replace("\\right", "")
12
+ .replace("\\{", "")
13
+ .replace("\\}", "");
14
+ const elements = formated.split(";").map((e) => (0, latexParser_1.parseAlgebraic)(e));
15
+ if (elements.some((e) => !e))
16
+ return false;
17
+ return elements;
18
+ }
19
+ catch (err) {
20
+ return false;
21
+ }
22
+ };
23
+ exports.discreteSetParser = discreteSetParser;
@@ -1,3 +1,3 @@
1
1
  import { AlgebraicNode } from "../nodes/algebraicNode";
2
- export declare const equationSolutionParser: (str: string) => false | AlgebraicNode;
2
+ export declare const equationSolutionParser: (str: string, variable?: string) => false | AlgebraicNode;
3
3
  //# sourceMappingURL=equationSolutionParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAKxE,eAAO,MAAM,sBAAsB,QAAS,MAAM,0BAgBjD,CAAC"}
1
+ {"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,sBAAsB,QAAS,MAAM,6CAyBjD,CAAC"}
@@ -3,19 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.equationSolutionParser = void 0;
4
4
  const algebraicNode_1 = require("../nodes/algebraicNode");
5
5
  const equalNode_1 = require("../nodes/equations/equalNode");
6
- const hasVariableNode_1 = require("../nodes/hasVariableNode");
6
+ const variableNode_1 = require("../nodes/variables/variableNode");
7
7
  const latexParser_1 = require("./latexParser");
8
- const equationSolutionParser = (str) => {
8
+ const equationSolutionParser = (str, variable = "x") => {
9
9
  try {
10
10
  const parsed = (0, latexParser_1.parseLatex)(str);
11
11
  if ((0, equalNode_1.isEqualNode)(parsed)) {
12
12
  const children = [parsed.leftChild, parsed.rightChild];
13
- const scalar = children.find((e) => !(0, hasVariableNode_1.hasVariableNode)(e));
14
- if (!scalar)
13
+ const varNode = (0, variableNode_1.isVariableNode)(parsed.leftChild)
14
+ ? 0
15
+ : (0, variableNode_1.isVariableNode)(parsed.rightChild)
16
+ ? 1
17
+ : undefined;
18
+ if (varNode === undefined)
19
+ return false;
20
+ if (children[varNode].name !== "x")
21
+ return false;
22
+ const scalar = children[(varNode + 1) % 2];
23
+ if (!(0, algebraicNode_1.isAlgebraicNode)(scalar) || !scalar.isNumeric)
15
24
  return false;
16
25
  return scalar;
17
26
  }
18
27
  else if ((0, algebraicNode_1.isAlgebraicNode)(parsed)) {
28
+ if (!parsed.isNumeric)
29
+ return false;
19
30
  return parsed;
20
31
  }
21
32
  else {
@@ -2,6 +2,10 @@ import { AlgebraicNode } from "../nodes/algebraicNode";
2
2
  import { EqualNode } from "../nodes/equations/equalNode";
3
3
  import { InequationNode } from "../nodes/inequations/inequationNode";
4
4
  export declare const tokenize: (latex: string) => string[];
5
- export declare const parseAlgebraic: (latex: string) => AlgebraicNode;
5
+ type ParserOptions = {
6
+ allowStartingPower?: boolean;
7
+ };
8
+ export declare const parseAlgebraic: (latex: string, opts?: ParserOptions) => AlgebraicNode;
6
9
  export declare const parseLatex: (latex: string) => AlgebraicNode | EqualNode | InequationNode;
10
+ export {};
7
11
  //# sourceMappingURL=latexParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,kBAa3C,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,MAAM,+CA2CvC,CAAC"}
1
+ {"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,cAAc,UAAW,MAAM,SAAS,aAAa,kBAyBjE,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,MAAM,+CA2CvC,CAAC"}
@@ -79,12 +79,26 @@ const tokenize = (latex) => {
79
79
  return tokens;
80
80
  };
81
81
  exports.tokenize = tokenize;
82
- const parseAlgebraic = (latex) => {
83
- const formattedLatex = latex
82
+ const parseAlgebraic = (latex, opts) => {
83
+ let formatedLatex = latex;
84
+ if (!opts?.allowStartingPower && latex.startsWith("^")) {
85
+ if (latex[1] === "{") {
86
+ const endIndex = latex.indexOf("}");
87
+ if (endIndex < 1)
88
+ formatedLatex = latex.slice(2, latex.length);
89
+ else
90
+ formatedLatex =
91
+ latex.slice(2, endIndex) + latex.slice(endIndex + 1, latex.length);
92
+ }
93
+ else {
94
+ formatedLatex.replace("^", "");
95
+ }
96
+ }
97
+ formatedLatex = formatedLatex
84
98
  .replaceAll("\\left", "")
85
99
  .replaceAll("\\right", "");
86
100
  try {
87
- const tokens = (0, exports.tokenize)(formattedLatex);
101
+ const tokens = (0, exports.tokenize)(formatedLatex);
88
102
  if (!isDyck(tokens))
89
103
  throw Error("Problème de parenthèses.");
90
104
  const parsed = buildTree(tokens);
@@ -49,11 +49,11 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
49
49
  if (!numericChild)
50
50
  return false;
51
51
  const varChild = numericChild === "left" ? node.rightChild : node.leftChild;
52
- if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === "x" && minDegree < 2)
52
+ if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
53
53
  return true;
54
54
  if ((0, powerNode_1.isPowerNode)(varChild) &&
55
55
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
56
- varChild.leftChild.name === "x" &&
56
+ varChild.leftChild.name === variable &&
57
57
  varChild.rightChild.isNumeric) {
58
58
  const powerEv = varChild.rightChild.evaluate();
59
59
  if (maxDegree && powerEv > maxDegree)
@@ -1,2 +1,2 @@
1
- export declare const powerParser: (ans: string) => false | import("../nodes/operators/powerNode").PowerNode | import("../nodes/operators/fractionNode").FractionNode;
1
+ export declare const powerParser: (ans: string) => false | import("../nodes/operators/fractionNode").FractionNode | import("../nodes/operators/powerNode").PowerNode;
2
2
  //# sourceMappingURL=powerParser.d.ts.map
@@ -1,3 +1,3 @@
1
1
  import { FractionNode } from "../nodes/operators/fractionNode";
2
- export declare const rationalParser: (ans: string) => false | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/functions/oppositeNode").OppositeNode | FractionNode | undefined;
2
+ export declare const rationalParser: (ans: string) => false | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/functions/oppositeNode").OppositeNode<import("../nodes/algebraicNode").AlgebraicNode> | FractionNode;
3
3
  //# sourceMappingURL=rationalParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rationalParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/rationalParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAQ,MAAM,iCAAiC,CAAC;AAGrE,eAAO,MAAM,cAAc,QAAS,MAAM,wMA0BzC,CAAC"}
1
+ {"version":3,"file":"rationalParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/rationalParser.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAGb,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,cAAc,QAAS,MAAM,4OA0CzC,CAAC"}
@@ -2,39 +2,44 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rationalParser = void 0;
4
4
  const oppositeNode_1 = require("../nodes/functions/oppositeNode");
5
+ const numberNode_1 = require("../nodes/numbers/numberNode");
5
6
  const fractionNode_1 = require("../nodes/operators/fractionNode");
7
+ const latexParser_1 = require("./latexParser");
6
8
  const numberParser_1 = require("./numberParser");
7
9
  const rationalParser = (ans) => {
8
10
  const nb = (0, numberParser_1.numberParser)(ans);
9
11
  if (nb !== false) {
10
12
  return nb.unfrenchify().toTree();
11
13
  }
12
- if (!ans.includes("\\frac"))
14
+ const parsed = (0, latexParser_1.parseAlgebraic)(ans);
15
+ if (!parsed)
13
16
  return false;
14
- if (ans.startsWith("\\frac")) {
15
- const fracs = ans.replaceAll("}", "").split("{").slice(1);
16
- if (fracs.length !== 2)
17
- return false;
18
- const parsedFracs = fracs.map((e) => (0, numberParser_1.numberParser)(e));
19
- if (parsedFracs.some((e) => e === false))
20
- return false;
21
- const nodeFracs = fracs.map((e) => e.unfrenchify().toTree());
22
- if (nodeFracs[1].evaluate() === 0)
23
- return false;
24
- return (0, fractionNode_1.frac)(nodeFracs[0], nodeFracs[1]);
17
+ if ((0, fractionNode_1.isFractionNode)(parsed)) {
18
+ if ((0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.leftChild) &&
19
+ (0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.rightChild)) {
20
+ if (parsed.rightChild.evaluate() === 0)
21
+ return false;
22
+ return parsed;
23
+ }
25
24
  }
26
- if (ans.startsWith("-")) {
27
- const fracString = ans.slice(1);
28
- const fracs = fracString.replaceAll("}", "").split("{").slice(1);
29
- if (fracs.length !== 2)
30
- return false;
31
- const parsedFracs = fracs.map((e) => (0, numberParser_1.numberParser)(e));
32
- if (parsedFracs.some((e) => e === false))
33
- return false;
34
- const nodeFracs = fracs.map((e) => e.unfrenchify().toTree());
35
- if (nodeFracs[1].evaluate() === 0)
36
- return false;
37
- return (0, oppositeNode_1.opposite)((0, fractionNode_1.frac)(nodeFracs[0], nodeFracs[1]));
25
+ if ((0, oppositeNode_1.isOppositeNode)(parsed) && (0, fractionNode_1.isFractionNode)(parsed.child)) {
26
+ if ((0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.leftChild) &&
27
+ (0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.rightChild)) {
28
+ if (parsed.child.rightChild.evaluate() === 0)
29
+ return false;
30
+ return parsed;
31
+ }
38
32
  }
33
+ if ((0, oppositeNode_1.isOppositeNode)(parsed) &&
34
+ (0, oppositeNode_1.isOppositeNode)(parsed.child) &&
35
+ (0, fractionNode_1.isFractionNode)(parsed.child.child)) {
36
+ if ((0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.child.leftChild) &&
37
+ (0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.child.rightChild)) {
38
+ if (parsed.child.child.rightChild.evaluate() === 0)
39
+ return false;
40
+ return parsed;
41
+ }
42
+ }
43
+ return false;
39
44
  };
40
45
  exports.rationalParser = rationalParser;
@@ -0,0 +1,9 @@
1
+ /**parses :
2
+ * number
3
+ * sqrt(a)
4
+ * -sqrt(a)
5
+ * sqrt(a) * b
6
+ * -sqrt(a) * b
7
+ */
8
+ export declare const sqrtParser: (ans: string) => false | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/operators/multiplyNode").MultiplyNode | import("../nodes/functions/oppositeNode").OppositeNode<import("../nodes/algebraicNode").AlgebraicNode> | import("../nodes/functions/sqrtNode").SqrtNode;
9
+ //# sourceMappingURL=sqrtParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqrtParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/sqrtParser.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAS,MAAM,uUAuCrC,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sqrtParser = void 0;
4
+ const oppositeNode_1 = require("../nodes/functions/oppositeNode");
5
+ const sqrtNode_1 = require("../nodes/functions/sqrtNode");
6
+ const numberNode_1 = require("../nodes/numbers/numberNode");
7
+ const multiplyNode_1 = require("../nodes/operators/multiplyNode");
8
+ const latexParser_1 = require("./latexParser");
9
+ const numberParser_1 = require("./numberParser");
10
+ /**parses :
11
+ * number
12
+ * sqrt(a)
13
+ * -sqrt(a)
14
+ * sqrt(a) * b
15
+ * -sqrt(a) * b
16
+ */
17
+ const sqrtParser = (ans) => {
18
+ try {
19
+ const nb = (0, numberParser_1.numberParser)(ans);
20
+ if (nb !== false) {
21
+ return nb.unfrenchify().toTree();
22
+ }
23
+ const parsed = (0, latexParser_1.parseAlgebraic)(ans);
24
+ if (!parsed)
25
+ return false;
26
+ if ((0, sqrtNode_1.isSqrtNode)(parsed)) {
27
+ return parsed;
28
+ }
29
+ if ((0, oppositeNode_1.isOppositeNode)(parsed) && (0, sqrtNode_1.isSqrtNode)(parsed.child)) {
30
+ return parsed;
31
+ }
32
+ if ((0, multiplyNode_1.isMultiplyNode)(parsed)) {
33
+ if (((0, sqrtNode_1.isSqrtNode)(parsed.leftChild) &&
34
+ (0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.rightChild)) ||
35
+ ((0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.leftChild) &&
36
+ (0, sqrtNode_1.isSqrtNode)(parsed.rightChild)))
37
+ return parsed;
38
+ }
39
+ if ((0, oppositeNode_1.isOppositeNode)(parsed) && (0, multiplyNode_1.isMultiplyNode)(parsed.child)) {
40
+ if (((0, sqrtNode_1.isSqrtNode)(parsed.child.leftChild) &&
41
+ (0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.rightChild)) ||
42
+ ((0, numberNode_1.isNumberOrOppositeNumberNode)(parsed.child.leftChild) &&
43
+ (0, sqrtNode_1.isSqrtNode)(parsed.child.rightChild)))
44
+ return parsed;
45
+ }
46
+ return false;
47
+ }
48
+ catch (err) {
49
+ return false;
50
+ }
51
+ };
52
+ exports.sqrtParser = sqrtParser;
@@ -1,2 +1,2 @@
1
- export declare const trinomParser: (ans: string, variable?: string) => false | undefined;
1
+ export declare const trinomParser: (ans: string, variable?: string) => false | import("../nodes/algebraicNode").AlgebraicNode | undefined;
2
2
  //# sourceMappingURL=trinomParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trinomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/trinomParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,sBAyBzD,CAAC"}
1
+ {"version":3,"file":"trinomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/trinomParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,uEAgCzD,CAAC"}
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.trinomParser = void 0;
4
+ const addNode_1 = require("../nodes/operators/addNode");
5
+ const substractNode_1 = require("../nodes/operators/substractNode");
6
+ const latexParser_1 = require("./latexParser");
7
+ const monomParser_1 = require("./monomParser");
4
8
  const trinomParser = (ans, variable = "x") => {
5
9
  try {
6
10
  //! difficile !
7
- //! peut etre que je fais fausse, il faut peut etre simplifier canoniquement et checker si ca ressemble à un trinome
8
- //! mais ce qui m'embete dans cette approche c'est que la simplification va etre trop "gentille", on va accepter des trucs qu'on aurait pas du ...
11
+ //! peut etre que je fais fausse route, il faut peut etre simplifier canoniquement et checker si ca ressemble à un trinome
12
+ //! mais ce qui m'embete dans cette approche c'est que la simplification va etre trop gentille, on va accepter des trucs qu'on aurait pas du ...*
13
+ const parsed = (0, latexParser_1.parseAlgebraic)(ans);
14
+ if (!parsed)
15
+ return false;
16
+ if ((0, monomParser_1.isMonomNode)(parsed, { variable, maxDegree: 2, minDegree: 2 }))
17
+ return parsed;
18
+ if ((0, addNode_1.isAddNode)(parsed) || (0, substractNode_1.isSubstractNode)(parsed)) {
19
+ const children = [parsed.leftChild, parsed.rightChild];
20
+ }
9
21
  // const monom = monomParser(ans, { variable, maxDegree: 2, minDegree: 2 });
10
22
  // if (monom) return monom;
11
23
  // const parsed = parseAlgebraic(ans);
@@ -1,5 +1,5 @@
1
1
  import { Class } from '../../types/class';
2
2
  import { FunctionNode } from '../nodes/functions/functionNode';
3
3
  import { Node } from '../nodes/node';
4
- export declare const functionComposition: <T extends Class<FunctionNode>>(Compositor: T, arr: Node[]) => FunctionNode;
4
+ export declare const functionComposition: <T extends Class<FunctionNode<import("../nodes/algebraicNode").AlgebraicNode>>>(Compositor: T, arr: Node[]) => FunctionNode<import("../nodes/algebraicNode").AlgebraicNode>;
5
5
  //# sourceMappingURL=functionComposition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"functionComposition.d.ts","sourceRoot":"","sources":["../../../src/tree/utilities/functionComposition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,eAAO,MAAM,mBAAmB,sDAAuD,IAAI,EAAE,iBAU5F,CAAC"}
1
+ {"version":3,"file":"functionComposition.d.ts","sourceRoot":"","sources":["../../../src/tree/utilities/functionComposition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,eAAO,MAAM,mBAAmB,sGAAuD,IAAI,EAAE,iEAU5F,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ * @param arr
4
+ * @param angle
5
+ * @returns [t_angle, t_angle+1, ..., t_0, t_1]
6
+ */
7
+ export declare function arrayRotation<T>(arr: T[], angle: number): T[];
8
+ //# sourceMappingURL=rotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../../../src/utils/arrays/rotation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,OAIvD"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.arrayRotation = void 0;
4
+ /**
5
+ *
6
+ * @param arr
7
+ * @param angle
8
+ * @returns [t_angle, t_angle+1, ..., t_0, t_1]
9
+ */
10
+ function arrayRotation(arr, angle) {
11
+ if (angle < 0 || angle > arr.length - 1)
12
+ return [];
13
+ if (angle === 0)
14
+ return [...arr];
15
+ return [...arr.slice(angle), ...arr.slice(0, angle)];
16
+ }
17
+ exports.arrayRotation = arrayRotation;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "math-exercises",
3
- "version": "2.2.68",
3
+ "version": "2.2.70",
4
4
  "description": "Math exercises generator for middle school and high school",
5
5
  "main": "lib/index.js",
6
6
  "files": [