math-exercises 2.2.70 → 2.2.71

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 (55) hide show
  1. package/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
  2. package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -2
  3. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts +12 -0
  4. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts.map +1 -0
  5. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.js +128 -0
  6. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +1 -0
  7. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
  8. package/lib/exercises/math/calculLitteral/distributivity/index.js +1 -0
  9. package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
  10. package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -0
  11. package/lib/exercises/math/geometry/angles/index.js +17 -0
  12. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +11 -0
  13. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -0
  14. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +272 -0
  15. package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +1 -1
  16. package/lib/exercises/math/geometry/index.d.ts +1 -0
  17. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  18. package/lib/exercises/math/geometry/index.js +1 -0
  19. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.d.ts.map +1 -1
  20. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +0 -1
  21. package/lib/index.d.ts +11 -0
  22. package/lib/index.d.ts.map +1 -1
  23. package/lib/math/geometry/angle.d.ts +22 -1
  24. package/lib/math/geometry/angle.d.ts.map +1 -1
  25. package/lib/math/geometry/angle.js +138 -1
  26. package/lib/math/geometry/line.d.ts +2 -0
  27. package/lib/math/geometry/line.d.ts.map +1 -1
  28. package/lib/math/geometry/line.js +16 -0
  29. package/lib/math/geometry/point.d.ts +1 -0
  30. package/lib/math/geometry/point.d.ts.map +1 -1
  31. package/lib/math/geometry/point.js +4 -0
  32. package/lib/math/geometry/vector.d.ts +3 -0
  33. package/lib/math/geometry/vector.d.ts.map +1 -1
  34. package/lib/math/geometry/vector.js +9 -0
  35. package/lib/math/polynomials/generalAffine.d.ts +3 -0
  36. package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
  37. package/lib/math/polynomials/generalAffine.js +4 -0
  38. package/lib/playground.d.ts.map +1 -1
  39. package/lib/tree/nodes/node.d.ts +4 -2
  40. package/lib/tree/nodes/node.d.ts.map +1 -1
  41. package/lib/tree/nodes/node.js +2 -0
  42. package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
  43. package/lib/tree/nodes/nodeConstructor.js +4 -0
  44. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  45. package/lib/tree/nodes/operators/addNode.js +123 -90
  46. package/lib/tree/nodes/polynomials/monomNode.d.ts +47 -0
  47. package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -0
  48. package/lib/tree/nodes/polynomials/monomNode.js +214 -0
  49. package/lib/tree/parsers/affineParser.js +1 -1
  50. package/lib/tree/parsers/monomParser.d.ts +2 -2
  51. package/lib/tree/parsers/monomParser.d.ts.map +1 -1
  52. package/lib/tree/parsers/monomParser.js +59 -6
  53. package/lib/tree/parsers/powerParser.d.ts +1 -1
  54. package/lib/tree/parsers/trinomParser.js +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ import { AlgebraicNode, SimplifyOptions } from "../algebraicNode";
2
+ import { Node, NodeIds, NodeOptions, NodeType } from "../node";
3
+ export declare const monom: (a: AlgebraicNode | number | string, degree: number, opts?: MonomNodeOptions) => MonomNode;
4
+ export declare function isMonomNode(a: Node): a is MonomNode;
5
+ export declare function parseToMonomNode(a: Node, variable?: string): false | MonomNode;
6
+ type MonomNodeOptions = {
7
+ variable: string;
8
+ };
9
+ /**
10
+ * un monom est une expression du type ax^degree
11
+ * avec a réel !==0 et degree > 0 (convention)
12
+ */
13
+ export declare class MonomNode implements AlgebraicNode {
14
+ a: AlgebraicNode;
15
+ degree: number;
16
+ isNumeric: boolean;
17
+ variable: string;
18
+ type: NodeType;
19
+ constructor(a: AlgebraicNode | number, degree: number, opts?: MonomNodeOptions);
20
+ derivative(varName?: string | undefined): AlgebraicNode;
21
+ equals(node: AlgebraicNode): boolean;
22
+ evaluate(vars?: Record<string, number>): number;
23
+ toDetailedEvaluation(vars: Record<string, AlgebraicNode>): AlgebraicNode;
24
+ simplify(opts?: SimplifyOptions): AlgebraicNode;
25
+ toAllValidTexs(opts?: NodeOptions | undefined): string[];
26
+ toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[];
27
+ toMathString(): string;
28
+ toTree(): AlgebraicNode;
29
+ toTex(): string;
30
+ toIdentifiers(): {
31
+ id: NodeIds;
32
+ a: {
33
+ id: NodeIds;
34
+ } & Record<string, any>;
35
+ degree: number;
36
+ opts: {
37
+ variable: string;
38
+ };
39
+ };
40
+ }
41
+ export declare const parseToMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: {
42
+ variable: string;
43
+ maxDegree: undefined;
44
+ minDegree: number;
45
+ }) => false | MonomNode;
46
+ export {};
47
+ //# sourceMappingURL=monomNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO/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;IAIN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SACjB,aAAa;;;;uBAyIpB,CAAC"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseToMonom = exports.MonomNode = exports.parseToMonomNode = exports.isMonomNode = exports.monom = void 0;
4
+ const algebraicNode_1 = require("../algebraicNode");
5
+ const oppositeNode_1 = require("../functions/oppositeNode");
6
+ const node_1 = require("../node");
7
+ // import { NodeIdentifiers } from "../nodeConstructor";
8
+ const multiplyNode_1 = require("../operators/multiplyNode");
9
+ const powerNode_1 = require("../operators/powerNode");
10
+ const variableNode_1 = require("../variables/variableNode");
11
+ const monom = (a, degree, opts) => {
12
+ const coeff = typeof a === "number" ? a.toTree() : typeof a === "string" ? a.toTree() : a;
13
+ return new MonomNode(coeff, degree, opts);
14
+ };
15
+ exports.monom = monom;
16
+ function isMonomNode(a) {
17
+ return a.type === node_1.NodeType.monom;
18
+ }
19
+ exports.isMonomNode = isMonomNode;
20
+ function parseToMonomNode(a, variable = "x") {
21
+ if (!(0, algebraicNode_1.isAlgebraicNode)(a))
22
+ return false;
23
+ return (0, exports.parseToMonom)(a, { variable, minDegree: 1, maxDegree: undefined });
24
+ }
25
+ exports.parseToMonomNode = parseToMonomNode;
26
+ /**
27
+ * un monom est une expression du type ax^degree
28
+ * avec a réel !==0 et degree > 0 (convention)
29
+ */
30
+ class MonomNode {
31
+ // roots: AlgebraicNode[];
32
+ constructor(a, degree, opts) {
33
+ this.type = node_1.NodeType.monom;
34
+ // super([c, b, a], opts?.variable ?? "x");
35
+ this.a = typeof a === "number" ? a.toTree() : a;
36
+ if (this.a.evaluate() === 0)
37
+ throw new Error("Monom with coeff null");
38
+ this.degree = degree;
39
+ this.isNumeric = false;
40
+ this.variable = opts?.variable ?? "x";
41
+ }
42
+ derivative(varName) {
43
+ return (0, multiplyNode_1.multiply)((0, multiplyNode_1.multiply)(this.a, this.degree), (0, powerNode_1.power)(this.variable, this.degree - 1)).simplify();
44
+ }
45
+ equals(node) {
46
+ return this.toTree().equals(node);
47
+ }
48
+ evaluate(vars) {
49
+ return this.toTree().evaluate(vars);
50
+ }
51
+ toDetailedEvaluation(vars) {
52
+ return this.toTree().toDetailedEvaluation(vars);
53
+ }
54
+ simplify(opts) {
55
+ return this.toTree().simplify(opts);
56
+ }
57
+ toAllValidTexs(opts) {
58
+ return this.toTree().toAllValidTexs(opts);
59
+ }
60
+ toEquivalentNodes(opts) {
61
+ return this.toTree().toEquivalentNodes(opts);
62
+ }
63
+ toMathString() {
64
+ return this.toTree().toMathString();
65
+ }
66
+ toTree() {
67
+ return (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.power)(this.variable, this.degree)).simplify();
68
+ }
69
+ toTex() {
70
+ return this.toTree().toTex();
71
+ }
72
+ toIdentifiers() {
73
+ return {
74
+ id: node_1.NodeIds.monom,
75
+ a: this.a.toIdentifiers(),
76
+ degree: this.degree,
77
+ opts: { variable: this.variable },
78
+ };
79
+ }
80
+ }
81
+ exports.MonomNode = MonomNode;
82
+ const parseToMonom = (node, { variable, maxDegree, minDegree } = {
83
+ variable: "x",
84
+ maxDegree: undefined,
85
+ minDegree: 1,
86
+ }) => {
87
+ variable = variable ?? "x";
88
+ maxDegree = maxDegree ?? undefined;
89
+ minDegree = minDegree ?? 1;
90
+ if (isMonomNode(node)) {
91
+ if (node.variable !== variable)
92
+ return false;
93
+ if (maxDegree && node.degree > maxDegree)
94
+ return false;
95
+ if (minDegree && node.degree < minDegree)
96
+ return false;
97
+ return node;
98
+ }
99
+ if (node.isNumeric)
100
+ return false;
101
+ if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
102
+ return new MonomNode(1, 1, { variable });
103
+ if ((0, oppositeNode_1.isOppositeNode)(node) &&
104
+ (0, variableNode_1.isVariableNode)(node.child) &&
105
+ node.child.name === variable &&
106
+ minDegree < 2)
107
+ return new MonomNode(-1, 1, { variable });
108
+ if ((0, powerNode_1.isSquareNode)(node)) {
109
+ if (minDegree > 2)
110
+ return false;
111
+ if (maxDegree && maxDegree < 2)
112
+ return false;
113
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
114
+ return false;
115
+ return new MonomNode(1, 2, { variable });
116
+ }
117
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
118
+ if (minDegree > 2)
119
+ return false;
120
+ if (maxDegree && maxDegree < 2)
121
+ return false;
122
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
123
+ node.child.leftChild.name !== variable)
124
+ return false;
125
+ return new MonomNode(-1, 2, { variable });
126
+ }
127
+ if ((0, powerNode_1.isPowerNode)(node)) {
128
+ if (!node.rightChild.isNumeric)
129
+ return false;
130
+ const powerEv = node.rightChild.evaluate();
131
+ if (maxDegree && powerEv > maxDegree)
132
+ return false;
133
+ if (minDegree && powerEv < minDegree)
134
+ return false;
135
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
136
+ return false;
137
+ return new MonomNode(1, powerEv, { variable });
138
+ }
139
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
140
+ if (!node.child.rightChild.isNumeric)
141
+ return false;
142
+ const powerEv = node.child.rightChild.evaluate();
143
+ if (maxDegree && powerEv > maxDegree)
144
+ return false;
145
+ if (minDegree && powerEv < minDegree)
146
+ return false;
147
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
148
+ node.child.leftChild.name !== variable)
149
+ return false;
150
+ return new MonomNode(-1, powerEv, { variable });
151
+ }
152
+ if ((0, multiplyNode_1.isMultiplyNode)(node)) {
153
+ const numericChildPosition = node.leftChild.isNumeric
154
+ ? "left"
155
+ : node.rightChild.isNumeric
156
+ ? "right"
157
+ : undefined;
158
+ if (!numericChildPosition)
159
+ return false;
160
+ const numericChild = numericChildPosition === "left" ? node.leftChild : node.rightChild;
161
+ const varChild = numericChildPosition === "left" ? node.rightChild : node.leftChild;
162
+ if ((0, variableNode_1.isVariableNode)(varChild)) {
163
+ if (varChild.name !== variable || minDegree > 1)
164
+ return false;
165
+ else
166
+ return new MonomNode(numericChild, 1, { variable });
167
+ }
168
+ if ((0, powerNode_1.isSquareNode)(varChild)) {
169
+ if (minDegree > 2)
170
+ return false;
171
+ if (maxDegree && maxDegree < 2)
172
+ return false;
173
+ if (!(0, variableNode_1.isVariableNode)(varChild.leftChild) ||
174
+ varChild.leftChild.name !== variable)
175
+ return false;
176
+ return new MonomNode(numericChild, 2, { variable });
177
+ }
178
+ if ((0, oppositeNode_1.isOppositeNode)(varChild) && (0, powerNode_1.isSquareNode)(varChild.child)) {
179
+ if (minDegree > 2)
180
+ return false;
181
+ if (maxDegree && maxDegree < 2)
182
+ return false;
183
+ if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild) ||
184
+ varChild.child.leftChild.name !== variable)
185
+ return false;
186
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, { variable });
187
+ }
188
+ if ((0, powerNode_1.isPowerNode)(varChild) &&
189
+ (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
190
+ varChild.leftChild.name === variable &&
191
+ varChild.rightChild.isNumeric) {
192
+ const powerEv = varChild.rightChild.evaluate();
193
+ if (maxDegree && powerEv > maxDegree)
194
+ return false;
195
+ if (minDegree && powerEv < minDegree)
196
+ return false;
197
+ return new MonomNode(numericChild, powerEv, { variable });
198
+ }
199
+ if ((0, oppositeNode_1.isOppositeNode)(varChild) &&
200
+ (0, powerNode_1.isPowerNode)(varChild.child) &&
201
+ (0, variableNode_1.isVariableNode)(varChild.child.leftChild) &&
202
+ varChild.child.leftChild.name === variable &&
203
+ varChild.child.rightChild.isNumeric) {
204
+ const powerEv = varChild.child.rightChild.evaluate();
205
+ if (maxDegree && powerEv > maxDegree)
206
+ return false;
207
+ if (minDegree && powerEv < minDegree)
208
+ return false;
209
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, { variable });
210
+ }
211
+ }
212
+ return false;
213
+ };
214
+ exports.parseToMonom = parseToMonom;
@@ -21,7 +21,7 @@ const affineParser = (ans, variable = "x") => {
21
21
  if (!numericChild)
22
22
  return false;
23
23
  const varChild = numericChild === "left" ? parsed.rightChild : parsed.leftChild;
24
- return (0, monomParser_1.isMonomNode)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
24
+ return (0, monomParser_1.isMonom)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
25
25
  }
26
26
  return false;
27
27
  }
@@ -1,10 +1,10 @@
1
1
  import { AlgebraicNode } from "../nodes/algebraicNode";
2
2
  type Opts = {
3
- variable: string;
3
+ variable?: string;
4
4
  maxDegree?: number;
5
5
  minDegree?: number;
6
6
  };
7
7
  export declare const monomParser: (str: string, { variable, maxDegree, minDegree }?: Opts) => false | AlgebraicNode;
8
- export declare const isMonomNode: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: Opts) => boolean;
8
+ export declare const isMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: Opts) => boolean;
9
9
  export {};
10
10
  //# sourceMappingURL=monomParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"monomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/monomParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAQvD,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,WAAW,QACjB,MAAM,uCACyB,IAAI,0BAkBzC,CAAC;AAEF,eAAO,MAAM,WAAW,SAChB,aAAa,uCACiB,IAAI,YAsCzC,CAAC"}
1
+ {"version":3,"file":"monomParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/monomParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,KAAK,IAAI,GAAG;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,WAAW,QACjB,MAAM,uCACyB,IAAI,0BAgBzC,CAAC;AAEF,eAAO,MAAM,OAAO,SACZ,aAAa,uCACiB,IAAI,YAyFzC,CAAC"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isMonomNode = exports.monomParser = void 0;
3
+ exports.isMonom = exports.monomParser = void 0;
4
+ const oppositeNode_1 = require("../nodes/functions/oppositeNode");
4
5
  const fractionNode_1 = require("../nodes/operators/fractionNode");
5
6
  const multiplyNode_1 = require("../nodes/operators/multiplyNode");
6
7
  const powerNode_1 = require("../nodes/operators/powerNode");
8
+ const monomNode_1 = require("../nodes/polynomials/monomNode");
7
9
  const variableNode_1 = require("../nodes/variables/variableNode");
8
10
  const latexParser_1 = require("./latexParser");
9
11
  const monomParser = (str, { variable, maxDegree, minDegree } = {
@@ -13,9 +15,7 @@ const monomParser = (str, { variable, maxDegree, minDegree } = {
13
15
  }) => {
14
16
  try {
15
17
  const parsed = (0, latexParser_1.parseAlgebraic)(str);
16
- return (0, exports.isMonomNode)(parsed, { variable, maxDegree, minDegree })
17
- ? parsed
18
- : false;
18
+ return (0, exports.isMonom)(parsed, { variable, maxDegree, minDegree }) ? parsed : false;
19
19
  if ((0, fractionNode_1.isFractionNode)(parsed)) {
20
20
  //!unimplemented
21
21
  return false;
@@ -28,7 +28,7 @@ const monomParser = (str, { variable, maxDegree, minDegree } = {
28
28
  }
29
29
  };
30
30
  exports.monomParser = monomParser;
31
- const isMonomNode = (node, { variable, maxDegree, minDegree } = {
31
+ const isMonom = (node, { variable, maxDegree, minDegree } = {
32
32
  variable: "x",
33
33
  maxDegree: undefined,
34
34
  minDegree: 0,
@@ -36,10 +36,61 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
36
36
  variable = variable ?? "x";
37
37
  maxDegree = maxDegree ?? undefined;
38
38
  minDegree = minDegree ?? 0;
39
+ if ((0, monomNode_1.isMonomNode)(node)) {
40
+ if (node.variable !== variable)
41
+ return false;
42
+ if (maxDegree && node.degree > maxDegree)
43
+ return false;
44
+ if (minDegree && node.degree < minDegree)
45
+ return false;
46
+ return true;
47
+ }
39
48
  if (node.isNumeric && minDegree === 0)
40
49
  return true;
50
+ //not monom
41
51
  if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
42
52
  return true;
53
+ //new MonomNode(1, 1, { variable });
54
+ if ((0, oppositeNode_1.isOppositeNode)(node) &&
55
+ (0, variableNode_1.isVariableNode)(node.child) &&
56
+ node.child.name === variable &&
57
+ minDegree < 2)
58
+ return true;
59
+ // new MonomNode(-1, 1, {variable})
60
+ if ((0, powerNode_1.isSquareNode)(node)) {
61
+ if (minDegree > 2)
62
+ return false;
63
+ if (maxDegree && maxDegree < 2)
64
+ return false;
65
+ return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
66
+ }
67
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
68
+ if (minDegree > 2)
69
+ return false;
70
+ if (maxDegree && maxDegree < 2)
71
+ return false;
72
+ return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
73
+ }
74
+ if ((0, powerNode_1.isPowerNode)(node)) {
75
+ if (!node.rightChild.isNumeric)
76
+ return false;
77
+ const powerEv = node.rightChild.evaluate();
78
+ if (maxDegree && powerEv > maxDegree)
79
+ return false;
80
+ if (minDegree && powerEv < minDegree)
81
+ return false;
82
+ return (0, variableNode_1.isVariableNode)(node.leftChild) && node.leftChild.name === "x";
83
+ }
84
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
85
+ if (!node.child.rightChild.isNumeric)
86
+ return false;
87
+ const powerEv = node.child.rightChild.evaluate();
88
+ if (maxDegree && powerEv > maxDegree)
89
+ return false;
90
+ if (minDegree && powerEv < minDegree)
91
+ return false;
92
+ return ((0, variableNode_1.isVariableNode)(node.child.leftChild) && node.child.leftChild.name === "x");
93
+ }
43
94
  if ((0, multiplyNode_1.isMultiplyNode)(node)) {
44
95
  const numericChild = node.leftChild.isNumeric
45
96
  ? "left"
@@ -51,6 +102,7 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
51
102
  const varChild = numericChild === "left" ? node.rightChild : node.leftChild;
52
103
  if ((0, variableNode_1.isVariableNode)(varChild) && varChild.name === variable && minDegree < 2)
53
104
  return true;
105
+ //new MonomNode(numericChild, 1, {variable});
54
106
  if ((0, powerNode_1.isPowerNode)(varChild) &&
55
107
  (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
56
108
  varChild.leftChild.name === variable &&
@@ -60,9 +112,10 @@ const isMonomNode = (node, { variable, maxDegree, minDegree } = {
60
112
  return false;
61
113
  if (minDegree && powerEv < minDegree)
62
114
  return false;
115
+ // new MonomNode(numericChild, powerEv, { variable });
63
116
  return true;
64
117
  }
65
118
  }
66
119
  return false;
67
120
  };
68
- exports.isMonomNode = isMonomNode;
121
+ exports.isMonom = isMonom;
@@ -1,2 +1,2 @@
1
- export declare const powerParser: (ans: string) => false | import("../nodes/operators/fractionNode").FractionNode | import("../nodes/operators/powerNode").PowerNode;
1
+ export declare const powerParser: (ans: string) => false | import("../nodes/operators/powerNode").PowerNode | import("../nodes/operators/fractionNode").FractionNode;
2
2
  //# sourceMappingURL=powerParser.d.ts.map
@@ -13,7 +13,7 @@ const trinomParser = (ans, variable = "x") => {
13
13
  const parsed = (0, latexParser_1.parseAlgebraic)(ans);
14
14
  if (!parsed)
15
15
  return false;
16
- if ((0, monomParser_1.isMonomNode)(parsed, { variable, maxDegree: 2, minDegree: 2 }))
16
+ if ((0, monomParser_1.isMonom)(parsed, { variable, maxDegree: 2, minDegree: 2 }))
17
17
  return parsed;
18
18
  if ((0, addNode_1.isAddNode)(parsed) || (0, substractNode_1.isSubstractNode)(parsed)) {
19
19
  const children = [parsed.leftChild, parsed.rightChild];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "math-exercises",
3
- "version": "2.2.70",
3
+ "version": "2.2.71",
4
4
  "description": "Math exercises generator for middle school and high school",
5
5
  "main": "lib/index.js",
6
6
  "files": [