math-exercises 2.2.95 → 2.2.97

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 (62) hide show
  1. package/lib/exercises/math/calcul/index.js +1 -0
  2. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivity.d.ts.map +1 -1
  3. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivity.js +85 -32
  4. package/lib/exercises/math/calculLitteral/distributivity/firstIdentity.d.ts.map +1 -1
  5. package/lib/exercises/math/calculLitteral/distributivity/firstIdentity.js +82 -34
  6. package/lib/exercises/math/calculLitteral/distributivity/secondIdentity.d.ts.map +1 -1
  7. package/lib/exercises/math/calculLitteral/distributivity/secondIdentity.js +86 -36
  8. package/lib/exercises/math/calculLitteral/distributivity/simpleDistributivity.d.ts.map +1 -1
  9. package/lib/exercises/math/calculLitteral/distributivity/simpleDistributivity.js +17 -6
  10. package/lib/exercises/math/calculLitteral/distributivity/thirdIdentity.d.ts.map +1 -1
  11. package/lib/exercises/math/calculLitteral/distributivity/thirdIdentity.js +82 -32
  12. package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.d.ts.map +1 -1
  13. package/lib/exercises/math/calculLitteral/factorisation/factoType1Exercise.js +1 -0
  14. package/lib/exercises/math/calculLitteral/simplifying/distributeAndSimplify.d.ts.map +1 -1
  15. package/lib/exercises/math/calculLitteral/simplifying/distributeAndSimplify.js +38 -16
  16. package/lib/exercises/math/calculLitteral/simplifying/reduceExpression.d.ts +3 -3
  17. package/lib/exercises/math/calculLitteral/simplifying/reduceExpression.d.ts.map +1 -1
  18. package/lib/exercises/math/calculLitteral/simplifying/reduceExpression.js +171 -75
  19. package/lib/exercises/math/dataReading/index.d.ts +2 -0
  20. package/lib/exercises/math/dataReading/index.d.ts.map +1 -0
  21. package/lib/exercises/math/dataReading/index.js +17 -0
  22. package/lib/exercises/math/dataReading/tableReading.d.ts +8 -0
  23. package/lib/exercises/math/dataReading/tableReading.d.ts.map +1 -0
  24. package/lib/exercises/math/dataReading/tableReading.js +105 -0
  25. package/lib/exercises/math/derivation/derivative/powerCompositionDerivation.d.ts.map +1 -1
  26. package/lib/exercises/math/derivation/derivative/powerCompositionDerivation.js +75 -11
  27. package/lib/exercises/math/functions/affines/affineExpressionFromTwoImages.d.ts.map +1 -1
  28. package/lib/exercises/math/functions/affines/affineExpressionFromTwoImages.js +0 -1
  29. package/lib/exercises/math/functions/affines/affineExpressionReading.d.ts.map +1 -1
  30. package/lib/exercises/math/index.d.ts +1 -0
  31. package/lib/exercises/math/index.d.ts.map +1 -1
  32. package/lib/exercises/math/index.js +1 -0
  33. package/lib/exercises/math/probaStat/diceBasicProbas.d.ts.map +1 -1
  34. package/lib/exercises/math/probaStat/diceBasicProbas.js +72 -20
  35. package/lib/exercises/vea/rationalVEA.js +1 -1
  36. package/lib/index.d.ts +6 -3
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/tree/nodes/algebraicNode.d.ts +1 -0
  39. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  40. package/lib/tree/nodes/operators/addNode.d.ts +2 -1
  41. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  42. package/lib/tree/nodes/operators/addNode.js +21 -3
  43. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  44. package/lib/tree/nodes/operators/multiplyNode.d.ts +2 -1
  45. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  46. package/lib/tree/nodes/operators/multiplyNode.js +12 -0
  47. package/lib/tree/nodes/operators/operatorNode.d.ts +5 -0
  48. package/lib/tree/nodes/operators/operatorNode.d.ts.map +1 -1
  49. package/lib/tree/nodes/operators/operatorNode.js +5 -1
  50. package/lib/tree/nodes/polynomials/monomNode.d.ts +2 -6
  51. package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -1
  52. package/lib/tree/nodes/polynomials/monomNode.js +102 -94
  53. package/lib/tree/parsers/affineParser.d.ts +1 -1
  54. package/lib/tree/parsers/affineParser.d.ts.map +1 -1
  55. package/lib/tree/parsers/affineParser.js +16 -21
  56. package/lib/tree/parsers/polynomialParser.d.ts +5 -1
  57. package/lib/tree/parsers/polynomialParser.d.ts.map +1 -1
  58. package/lib/tree/parsers/polynomialParser.js +4 -3
  59. package/lib/tree/parsers/purifyLatex.d.ts +1 -1
  60. package/lib/tree/parsers/purifyLatex.js +1 -1
  61. package/lib/utils/alea/shuffle.js +1 -1
  62. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { AlgebraicNode, SimplifyOptions } from "../algebraicNode";
2
2
  import { Node, NodeIds, NodeOptions, NodeType } from "../node";
3
3
  export declare const monom: (a: AlgebraicNode | number | string, degree: number, opts?: MonomNodeOptions) => MonomNode;
4
4
  export declare function isMonomNode(a: Node): a is MonomNode;
5
- export declare function parseToMonomNode(a: Node, variable?: string): false | MonomNode;
5
+ export declare function parseToMonomNode(a: Node): false | MonomNode;
6
6
  type MonomNodeOptions = {
7
7
  variable: string;
8
8
  };
@@ -38,11 +38,7 @@ export declare class MonomNode implements AlgebraicNode {
38
38
  };
39
39
  };
40
40
  }
41
- export declare const parseToMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: {
42
- variable: string;
43
- maxDegree: undefined;
44
- minDegree: number;
45
- }) => false | MonomNode;
41
+ export declare const parseToMonom: (node: AlgebraicNode) => false | MonomNode;
46
42
  type Opts = {
47
43
  variable?: string;
48
44
  maxDegree?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAM/D,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,UAC1B,MAAM,SACP,gBAAgB,cAMxB,CAAC;AACF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAM,qBAGvD;AACD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAO7C;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;IAC7C,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAkB;gBAG9B,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB;IAUzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAMvC,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAG/B,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAG7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAGhD,YAAY;IAIZ,MAAM;IAMN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SACjB,aAAa;;;;uBAyIpB,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,OAAO,SACZ,aAAa,uCACiB,IAAI,YA8HzC,CAAC"}
1
+ {"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAM/D,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,UAC1B,MAAM,SACP,gBAAgB,cAMxB,CAAC;AACF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,qBAGvC;AACD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAO7C;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;IAC7C,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAkB;gBAG9B,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB;IAUzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAMvC,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAG/B,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAG7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAGhD,YAAY;IAIZ,MAAM;IAMN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SAAU,aAAa,sBAsJ/C,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,OAAO,SACZ,aAAa,uCACiB,IAAI,YAkJzC,CAAC"}
@@ -16,10 +16,10 @@ function isMonomNode(a) {
16
16
  return a.type === node_1.NodeType.monom;
17
17
  }
18
18
  exports.isMonomNode = isMonomNode;
19
- function parseToMonomNode(a, variable = "x") {
19
+ function parseToMonomNode(a) {
20
20
  if (!(0, algebraicNode_1.isAlgebraicNode)(a))
21
21
  return false;
22
- return (0, exports.parseToMonom)(a, { variable, minDegree: 1, maxDegree: undefined });
22
+ return (0, exports.parseToMonom)(a);
23
23
  }
24
24
  exports.parseToMonomNode = parseToMonomNode;
25
25
  /**
@@ -80,75 +80,70 @@ class MonomNode {
80
80
  }
81
81
  }
82
82
  exports.MonomNode = MonomNode;
83
- const parseToMonom = (node, { variable, maxDegree, minDegree } = {
84
- variable: "x",
85
- maxDegree: undefined,
86
- minDegree: 1,
87
- }) => {
88
- variable = variable ?? "x";
89
- maxDegree = maxDegree ?? undefined;
90
- minDegree = minDegree ?? 1;
83
+ const parseToMonom = (node) => {
84
+ // variable = variable ?? "x";
85
+ // maxDegree = maxDegree ?? undefined;
86
+ // minDegree = minDegree ?? 1;
91
87
  if (isMonomNode(node)) {
92
- if (node.variable !== variable)
93
- return false;
94
- if (maxDegree && node.degree > maxDegree)
95
- return false;
96
- if (minDegree && node.degree < minDegree)
97
- return false;
88
+ // if (node.variable !== variable) return false;
89
+ // if (maxDegree && node.degree > maxDegree) return false;
90
+ // if (minDegree && node.degree < minDegree) return false;
98
91
  return node;
99
92
  }
100
93
  if (node.isNumeric)
101
94
  return false;
102
- if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
103
- return new MonomNode(1, 1, { variable });
95
+ if ((0, variableNode_1.isVariableNode)(node))
96
+ return new MonomNode(1, 1, { variable: node.name });
104
97
  if ((0, oppositeNode_1.isOppositeNode)(node) &&
105
- (0, variableNode_1.isVariableNode)(node.child) &&
106
- node.child.name === variable &&
107
- minDegree < 2)
108
- return new MonomNode(-1, 1, { variable });
98
+ (0, variableNode_1.isVariableNode)(node.child)
99
+ // &&
100
+ // node.child.name === variable &&
101
+ // minDegree < 2
102
+ )
103
+ return new MonomNode(-1, 1, { variable: node.child.name });
109
104
  if ((0, powerNode_1.isSquareNode)(node)) {
110
- if (minDegree > 2)
105
+ // if (minDegree > 2) return false;
106
+ // if (maxDegree && maxDegree < 2) return false;
107
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild)
108
+ // || node.leftChild.name !== variable
109
+ )
111
110
  return false;
112
- if (maxDegree && maxDegree < 2)
113
- return false;
114
- if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
115
- return false;
116
- return new MonomNode(1, 2, { variable });
111
+ return new MonomNode(1, 2, { variable: node.leftChild.name });
117
112
  }
118
113
  if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
119
- if (minDegree > 2)
120
- return false;
121
- if (maxDegree && maxDegree < 2)
122
- return false;
123
- if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
124
- node.child.leftChild.name !== variable)
125
- return false;
126
- return new MonomNode(-1, 2, { variable });
114
+ // if (minDegree > 2) return false;
115
+ // if (maxDegree && maxDegree < 2) return false;
116
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild)
117
+ // ||
118
+ // node.child.leftChild.name !== variable
119
+ )
120
+ return false;
121
+ return new MonomNode(-1, 2, { variable: node.child.leftChild.name });
127
122
  }
128
123
  if ((0, powerNode_1.isPowerNode)(node)) {
129
124
  if (!node.rightChild.isNumeric)
130
125
  return false;
131
126
  const powerEv = node.rightChild.evaluate();
132
- if (maxDegree && powerEv > maxDegree)
133
- return false;
134
- if (minDegree && powerEv < minDegree)
127
+ // if (maxDegree && powerEv > maxDegree) return false;
128
+ // if (minDegree && powerEv < minDegree) return false;
129
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild)
130
+ // || node.leftChild.name !== variable
131
+ )
135
132
  return false;
136
- if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
137
- return false;
138
- return new MonomNode(1, powerEv, { variable });
133
+ return new MonomNode(1, powerEv, { variable: node.leftChild.name });
139
134
  }
140
135
  if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
141
136
  if (!node.child.rightChild.isNumeric)
142
137
  return false;
143
138
  const powerEv = node.child.rightChild.evaluate();
144
- if (maxDegree && powerEv > maxDegree)
145
- return false;
146
- if (minDegree && powerEv < minDegree)
147
- return false;
148
- if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
149
- node.child.leftChild.name !== variable)
150
- return false;
151
- return new MonomNode(-1, powerEv, { variable });
139
+ // if (maxDegree && powerEv > maxDegree) return false;
140
+ // if (minDegree && powerEv < minDegree) return false;
141
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild)
142
+ // ||
143
+ // node.child.leftChild.name !== variable
144
+ )
145
+ return false;
146
+ return new MonomNode(-1, powerEv, { variable: node.child.leftChild.name });
152
147
  }
153
148
  if ((0, multiplyNode_1.isMultiplyNode)(node)) {
154
149
  const numericChildPosition = node.leftChild.isNumeric
@@ -161,68 +156,71 @@ const parseToMonom = (node, { variable, maxDegree, minDegree } = {
161
156
  const numericChild = numericChildPosition === "left" ? node.leftChild : node.rightChild;
162
157
  const varChild = numericChildPosition === "left" ? node.rightChild : node.leftChild;
163
158
  if ((0, variableNode_1.isVariableNode)(varChild)) {
164
- if (varChild.name !== variable || minDegree > 1)
165
- return false;
166
- else
167
- return new MonomNode(numericChild, 1, { variable });
159
+ // if (varChild.name !== variable || minDegree > 1) return false;
160
+ // else
161
+ return new MonomNode(numericChild, 1, { variable: varChild.name });
168
162
  }
169
163
  if ((0, powerNode_1.isSquareNode)(varChild)) {
170
- if (minDegree > 2)
171
- return false;
172
- if (maxDegree && maxDegree < 2)
173
- return false;
174
- if (!(0, variableNode_1.isVariableNode)(varChild.leftChild) ||
175
- varChild.leftChild.name !== variable)
164
+ // if (minDegree > 2) return false;
165
+ // if (maxDegree && maxDegree < 2) return false;
166
+ if (!(0, variableNode_1.isVariableNode)(varChild.leftChild)
167
+ // ||
168
+ // varChild.leftChild.name !== variable
169
+ )
176
170
  return false;
177
- return new MonomNode(numericChild, 2, { variable });
171
+ return new MonomNode(numericChild, 2, {
172
+ variable: varChild.leftChild.name,
173
+ });
178
174
  }
179
175
  if ((0, oppositeNode_1.isOppositeNode)(varChild) && (0, powerNode_1.isSquareNode)(varChild.child)) {
180
- if (minDegree > 2)
181
- return false;
182
- if (maxDegree && maxDegree < 2)
176
+ // if (minDegree > 2) return false;
177
+ // if (maxDegree && maxDegree < 2) return false;
178
+ if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild)
179
+ // ||
180
+ // varChild.child.leftChild.name !== variable
181
+ )
183
182
  return false;
184
- if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild) ||
185
- varChild.child.leftChild.name !== variable)
186
- return false;
187
- return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, { variable });
183
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, {
184
+ variable: varChild.child.leftChild.name,
185
+ });
188
186
  }
189
187
  if ((0, powerNode_1.isPowerNode)(varChild) &&
190
188
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
191
- varChild.leftChild.name === variable &&
189
+ // varChild.leftChild.name === variable &&
192
190
  varChild.rightChild.isNumeric) {
193
191
  const powerEv = varChild.rightChild.evaluate();
194
- if (maxDegree && powerEv > maxDegree)
195
- return false;
196
- if (minDegree && powerEv < minDegree)
197
- return false;
198
- return new MonomNode(numericChild, powerEv, { variable });
192
+ // if (maxDegree && powerEv > maxDegree) return false;
193
+ // if (minDegree && powerEv < minDegree) return false;
194
+ return new MonomNode(numericChild, powerEv, {
195
+ variable: varChild.leftChild.name,
196
+ });
199
197
  }
200
198
  if ((0, oppositeNode_1.isOppositeNode)(varChild) &&
201
199
  (0, powerNode_1.isPowerNode)(varChild.child) &&
202
200
  (0, variableNode_1.isVariableNode)(varChild.child.leftChild) &&
203
- varChild.child.leftChild.name === variable &&
201
+ // varChild.child.leftChild.name === variable &&
204
202
  varChild.child.rightChild.isNumeric) {
205
203
  const powerEv = varChild.child.rightChild.evaluate();
206
- if (maxDegree && powerEv > maxDegree)
207
- return false;
208
- if (minDegree && powerEv < minDegree)
209
- return false;
210
- return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, { variable });
204
+ // if (maxDegree && powerEv > maxDegree) return false;
205
+ // if (minDegree && powerEv < minDegree) return false;
206
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, {
207
+ variable: varChild.child.leftChild.name,
208
+ });
211
209
  }
212
210
  }
213
211
  return false;
214
212
  };
215
213
  exports.parseToMonom = parseToMonom;
216
214
  const isMonom = (node, { variable, maxDegree, minDegree } = {
217
- variable: "x",
215
+ variable: undefined,
218
216
  maxDegree: undefined,
219
217
  minDegree: 0,
220
218
  }) => {
221
- variable = variable ?? "x";
219
+ variable = variable ?? undefined;
222
220
  maxDegree = maxDegree ?? undefined;
223
221
  minDegree = minDegree ?? 0;
224
222
  if (isMonomNode(node)) {
225
- if (node.variable !== variable)
223
+ if (variable && node.variable !== variable)
226
224
  return false;
227
225
  if (maxDegree && node.degree > maxDegree)
228
226
  return false;
@@ -233,12 +231,14 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
233
231
  if (node.isNumeric && minDegree === 0)
234
232
  return true;
235
233
  //not monom
236
- if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
234
+ if ((0, variableNode_1.isVariableNode)(node) &&
235
+ (!variable || node.name === variable) &&
236
+ minDegree < 2)
237
237
  return true;
238
238
  //new MonomNode(1, 1, { variable });
239
239
  if ((0, oppositeNode_1.isOppositeNode)(node) &&
240
240
  (0, variableNode_1.isVariableNode)(node.child) &&
241
- node.child.name === variable &&
241
+ (!variable || node.child.name === variable) &&
242
242
  minDegree < 2)
243
243
  return true;
244
244
  // new MonomNode(-1, 1, {variable})
@@ -247,14 +247,16 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
247
247
  return false;
248
248
  if (maxDegree && maxDegree < 2)
249
249
  return false;
250
- return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
250
+ return ((0, variableNode_1.isVariableNode)(node.leftChild) &&
251
+ (!variable || node.leftChild.name === variable));
251
252
  }
252
253
  if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
253
254
  if (minDegree > 2)
254
255
  return false;
255
256
  if (maxDegree && maxDegree < 2)
256
257
  return false;
257
- return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
258
+ return ((0, variableNode_1.isVariableNode)(node.child.leftChild) &&
259
+ (!variable || node.child.leftChild.name === variable));
258
260
  }
259
261
  if ((0, powerNode_1.isPowerNode)(node)) {
260
262
  if (!node.rightChild.isNumeric)
@@ -264,7 +266,8 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
264
266
  return false;
265
267
  if (minDegree && powerEv < minDegree)
266
268
  return false;
267
- return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
269
+ return ((0, variableNode_1.isVariableNode)(node.leftChild) &&
270
+ (!variable || node.leftChild.name === variable));
268
271
  }
269
272
  if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
270
273
  if (!node.child.rightChild.isNumeric)
@@ -274,7 +277,8 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
274
277
  return false;
275
278
  if (minDegree && powerEv < minDegree)
276
279
  return false;
277
- return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
280
+ return ((0, variableNode_1.isVariableNode)(node.child.leftChild) &&
281
+ (!variable || node.child.leftChild.name === variable));
278
282
  }
279
283
  if ((0, multiplyNode_1.isMultiplyNode)(node)) {
280
284
  const numericChild = node.leftChild.isNumeric
@@ -285,11 +289,13 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
285
289
  if (!numericChild)
286
290
  return false;
287
291
  const varChild = numericChild === "left" ? node.rightChild : node.leftChild;
288
- if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
292
+ if ((0, variableNode_1.isVariableNode)(varChild) &&
293
+ (!variable || varChild.name === variable) &&
294
+ minDegree < 2)
289
295
  return true;
290
296
  if ((0, powerNode_1.isSquareNode)(varChild) &&
291
297
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
292
- varChild.leftChild.name === variable) {
298
+ (!variable || varChild.leftChild.name === variable)) {
293
299
  if (maxDegree && maxDegree < 2)
294
300
  return false;
295
301
  if (minDegree > 2)
@@ -299,7 +305,7 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
299
305
  }
300
306
  if ((0, powerNode_1.isPowerNode)(varChild) &&
301
307
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
302
- varChild.leftChild.name === variable &&
308
+ (!variable || varChild.leftChild.name === variable) &&
303
309
  varChild.rightChild.isNumeric) {
304
310
  const powerEv = varChild.rightChild.evaluate();
305
311
  if (maxDegree && powerEv > maxDegree)
@@ -319,12 +325,14 @@ const isMonom = (node, { variable, maxDegree, minDegree } = {
319
325
  if (!numericChild)
320
326
  return false;
321
327
  const varChild = numericChild === "left" ? node.child.rightChild : node.child.leftChild;
322
- if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
328
+ if ((0, variableNode_1.isVariableNode)(varChild) &&
329
+ (!variable || varChild.name === variable) &&
330
+ minDegree < 2)
323
331
  return true;
324
332
  //new MonomNode(numericChild, 1, {variable});
325
333
  if ((0, powerNode_1.isPowerNode)(varChild) &&
326
334
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
327
- varChild.leftChild.name === variable &&
335
+ (!variable || varChild.leftChild.name === variable) &&
328
336
  varChild.rightChild.isNumeric) {
329
337
  const powerEv = varChild.rightChild.evaluate();
330
338
  if (maxDegree && powerEv > maxDegree)
@@ -1,2 +1,2 @@
1
- export declare const affineParser: (ans: string, variable?: string) => false | import("../nodes/algebraicNode").AlgebraicNode | import("../nodes/operators/substractNode").SubstractNode | import("../nodes/operators/addNode").AddNode;
1
+ export declare const affineParser: (ans: string, variable?: string) => false;
2
2
  //# sourceMappingURL=affineParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAuBzD,CAAC"}
1
+ {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,UAwBzD,CAAC"}
@@ -2,30 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.affineParser = void 0;
4
4
  const handleVEAError_1 = require("../../utils/errors/handleVEAError");
5
- const addNode_1 = require("../nodes/operators/addNode");
6
- const substractNode_1 = require("../nodes/operators/substractNode");
7
- const monomNode_1 = require("../nodes/polynomials/monomNode");
8
- const latexParser_1 = require("./latexParser");
9
- const monomParser_1 = require("./monomParser");
10
5
  const affineParser = (ans, variable = "x") => {
11
6
  try {
7
+ throw new Error("not sure this works");
12
8
  //double parse, pas opti
13
- const monom = (0, monomParser_1.monomParser)(ans, { variable, maxDegree: 1 });
14
- if (monom)
15
- return monom;
16
- const parsed = (0, latexParser_1.parseAlgebraic)(ans);
17
- if ((0, addNode_1.isAddNode)(parsed) || (0, substractNode_1.isSubstractNode)(parsed)) {
18
- const numericChild = parsed.leftChild.isNumeric
19
- ? "left"
20
- : parsed.rightChild.isNumeric
21
- ? "right"
22
- : undefined;
23
- if (!numericChild)
24
- return false;
25
- const varChild = numericChild === "left" ? parsed.rightChild : parsed.leftChild;
26
- return (0, monomNode_1.isMonom)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
27
- }
28
- return false;
9
+ // const monom = monomParser(ans, { variable, maxDegree: 1 });
10
+ // if (monom) return monom;
11
+ // const parsed = parseAlgebraic(ans);
12
+ // if (isAddNode(parsed) || isSubstractNode(parsed)) {
13
+ // const numericChild = parsed.leftChild.isNumeric
14
+ // ? "left"
15
+ // : parsed.rightChild.isNumeric
16
+ // ? "right"
17
+ // : undefined;
18
+ // if (!numericChild) return false;
19
+ // const varChild =
20
+ // numericChild === "left" ? parsed.rightChild : parsed.leftChild;
21
+ // return isMonom(varChild, { variable, maxDegree: 1 }) ? parsed : false;
22
+ // }
23
+ // return false;
29
24
  }
30
25
  catch (err) {
31
26
  return (0, handleVEAError_1.handleVEAError)(err);
@@ -1,3 +1,7 @@
1
1
  import { AlgebraicNode } from "../nodes/algebraicNode";
2
- export declare const polynomialParser: (ans: string) => false | AlgebraicNode | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/operators/substractNode").SubstractNode | import("../nodes/operators/addNode").AddNode;
2
+ type Opts = {
3
+ variable?: string;
4
+ };
5
+ export declare const polynomialParser: (ans: string, opts?: Opts) => false | AlgebraicNode | import("../nodes/numbers/constantNode").ConstantNode | import("../nodes/numbers/numberNode").NumberNode | import("../nodes/operators/substractNode").SubstractNode | import("../nodes/operators/addNode").AddNode;
6
+ export {};
3
7
  //# sourceMappingURL=polynomialParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"polynomialParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/polynomialParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAWvD,eAAO,MAAM,gBAAgB,QAAS,MAAM,8OAmC3C,CAAC"}
1
+ {"version":3,"file":"polynomialParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/polynomialParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AASvD,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAIF,eAAO,MAAM,gBAAgB,QAAS,MAAM,SAAS,IAAI,8OAkCxD,CAAC"}
@@ -10,14 +10,15 @@ const latexParser_1 = require("./latexParser");
10
10
  const monomParser_1 = require("./monomParser");
11
11
  const numberParser_1 = require("./numberParser");
12
12
  //!parses polynomes sous forme développée
13
+ //! ne surtout pas transformer ça en un parse généraliste (qui pourrait parse une forme factorisée par exemple)
13
14
  //minDegree = 0, max = undefined
14
- const polynomialParser = (ans) => {
15
+ const polynomialParser = (ans, opts) => {
15
16
  try {
16
17
  const nb = (0, numberParser_1.numberParser)(ans);
17
18
  if (nb !== false) {
18
19
  return nb.unfrenchify().toTree();
19
20
  }
20
- const monom = (0, monomParser_1.monomParser)(ans);
21
+ const monom = (0, monomParser_1.monomParser)(ans, opts);
21
22
  if (monom)
22
23
  return monom;
23
24
  const parsed = (0, latexParser_1.parseAlgebraic)(ans);
@@ -39,7 +40,7 @@ const polynomialParser = (ans) => {
39
40
  }
40
41
  };
41
42
  recursive(parsed);
42
- if (externals.every((node) => (0, monomNode_1.isMonom)(node))) {
43
+ if (externals.every((node) => (0, monomNode_1.isMonom)(node, opts))) {
43
44
  return parsed;
44
45
  }
45
46
  }
@@ -2,7 +2,7 @@
2
2
  * supprime les éléments superflus sans aucun calcul maths
3
3
  * ex : transforme (2) en 2
4
4
  * ex : transforme (9)/3 en 9/3 mais pas en 3
5
- * doit-il transformer 1*x en x ?
5
+ * doit-il transformer 1*x en x ? -> je dirais que non
6
6
  * @param str réponse élève
7
7
  */
8
8
  export declare const purifyLatex: (str: string) => void;
@@ -5,7 +5,7 @@ exports.purifyLatex = void 0;
5
5
  * supprime les éléments superflus sans aucun calcul maths
6
6
  * ex : transforme (2) en 2
7
7
  * ex : transforme (9)/3 en 9/3 mais pas en 3
8
- * doit-il transformer 1*x en x ?
8
+ * doit-il transformer 1*x en x ? -> je dirais que non
9
9
  * @param str réponse élève
10
10
  */
11
11
  const purifyLatex = (str) => {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.shuffle = void 0;
4
- /* Randomize array in-place using Durstenfeld shuffle algorithm */
4
+ /* Randomize array using Durstenfeld shuffle algorithm */
5
5
  function shuffle(array) {
6
6
  const res = [...array];
7
7
  for (var i = res.length - 1; i > 0; i--) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "math-exercises",
3
- "version": "2.2.95",
3
+ "version": "2.2.97",
4
4
  "description": "Math exercises generator for middle school and high school",
5
5
  "main": "lib/index.js",
6
6
  "files": [