math-exercises 2.0.28 → 2.0.30

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 (116) hide show
  1. package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.d.ts.map +1 -1
  2. package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.js +6 -6
  3. package/lib/exercises/calculLitteral/distributivity/firstIdentity.d.ts.map +1 -1
  4. package/lib/exercises/calculLitteral/distributivity/firstIdentity.js +10 -6
  5. package/lib/exercises/calculLitteral/distributivity/secondIdentity.d.ts.map +1 -1
  6. package/lib/exercises/calculLitteral/distributivity/secondIdentity.js +14 -7
  7. package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.d.ts.map +1 -1
  8. package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.js +11 -11
  9. package/lib/exercises/calculLitteral/distributivity/thirdIdentity.d.ts.map +1 -1
  10. package/lib/exercises/calculLitteral/distributivity/thirdIdentity.js +4 -6
  11. package/lib/exercises/calculLitteral/equation/equationType2Exercise.d.ts.map +1 -1
  12. package/lib/exercises/calculLitteral/equation/equationType2Exercise.js +3 -5
  13. package/lib/exercises/calculLitteral/equation/equationType3Exercise.d.ts.map +1 -1
  14. package/lib/exercises/calculLitteral/equation/equationType3Exercise.js +0 -5
  15. package/lib/exercises/calculLitteral/equation/equationType4Exercise.d.ts.map +1 -1
  16. package/lib/exercises/calculLitteral/equation/equationType4Exercise.js +10 -16
  17. package/lib/exercises/calculLitteral/factorisation/factoIdRmq1.d.ts.map +1 -1
  18. package/lib/exercises/calculLitteral/factorisation/factoIdRmq1.js +3 -5
  19. package/lib/exercises/calculLitteral/factorisation/factoIdRmq2.js +4 -6
  20. package/lib/exercises/calculLitteral/factorisation/factoIdRmq3.d.ts.map +1 -1
  21. package/lib/exercises/calculLitteral/factorisation/factoIdRmq3.js +4 -6
  22. package/lib/exercises/calculLitteral/inequations/firstDegreeInequationsType0.d.ts.map +1 -1
  23. package/lib/exercises/calculLitteral/inequations/firstDegreeInequationsType0.js +0 -2
  24. package/lib/exercises/complex/argumentFromAlgebraicComplex.d.ts.map +1 -1
  25. package/lib/exercises/derivation/derivative/thirdDegreeFunctionVariation.d.ts.map +1 -1
  26. package/lib/exercises/derivation/derivative/thirdDegreeFunctionVariation.js +20 -8
  27. package/lib/exercises/exercise.d.ts +1 -1
  28. package/lib/exercises/exercise.d.ts.map +1 -1
  29. package/lib/exercises/functions/absolute/absoluteValueInequations.d.ts.map +1 -1
  30. package/lib/exercises/functions/absolute/absoluteValueInequations.js +8 -5
  31. package/lib/exercises/functions/affines/interceptReading.d.ts.map +1 -1
  32. package/lib/exercises/functions/exponential/expSimplifiying.d.ts.map +1 -1
  33. package/lib/exercises/functions/trinoms/canonicalFromDevForm.d.ts.map +1 -1
  34. package/lib/exercises/functions/trinoms/canonicalFromDevForm.js +1 -3
  35. package/lib/exercises/functions/trinoms/secondDegreeInequation.d.ts.map +1 -1
  36. package/lib/exercises/functions/trinoms/secondDegreeInequation.js +0 -3
  37. package/lib/exercises/index.d.ts +1 -0
  38. package/lib/exercises/index.d.ts.map +1 -1
  39. package/lib/exercises/index.js +1 -0
  40. package/lib/exercises/limits/rationalFracForbiddenValueLimit.d.ts.map +1 -1
  41. package/lib/exercises/limits/rationalFracForbiddenValueLimit.js +1 -6
  42. package/lib/exercises/matrices/index.d.ts +2 -0
  43. package/lib/exercises/matrices/index.d.ts.map +1 -0
  44. package/lib/exercises/matrices/index.js +17 -0
  45. package/lib/exercises/matrices/matrixInversibilityDomain.d.ts +10 -0
  46. package/lib/exercises/matrices/matrixInversibilityDomain.d.ts.map +1 -0
  47. package/lib/exercises/matrices/matrixInversibilityDomain.js +93 -0
  48. package/lib/exercises/sets/intervals/inequalityToInterval.d.ts +4 -1
  49. package/lib/exercises/sets/intervals/inequalityToInterval.d.ts.map +1 -1
  50. package/lib/exercises/sets/intervals/inequalityToInterval.js +10 -7
  51. package/lib/exercises/sets/intervals/intervalsIntersection.d.ts +7 -2
  52. package/lib/exercises/sets/intervals/intervalsIntersection.d.ts.map +1 -1
  53. package/lib/exercises/sets/intervals/intervalsIntersection.js +11 -4
  54. package/lib/exercises/sets/intervals/intervalsUnion.d.ts +7 -2
  55. package/lib/exercises/sets/intervals/intervalsUnion.d.ts.map +1 -1
  56. package/lib/exercises/sets/intervals/intervalsUnion.js +11 -4
  57. package/lib/exercises/utils/keys/intervalKeys.d.ts +3 -0
  58. package/lib/exercises/utils/keys/intervalKeys.d.ts.map +1 -0
  59. package/lib/exercises/utils/keys/intervalKeys.js +10 -0
  60. package/lib/index.d.ts +124 -8
  61. package/lib/index.d.ts.map +1 -1
  62. package/lib/index.js +11 -0
  63. package/lib/math/geometry/point.d.ts.map +1 -1
  64. package/lib/math/matrices/matrix.d.ts +10 -0
  65. package/lib/math/matrices/matrix.d.ts.map +1 -0
  66. package/lib/math/matrices/matrix.js +24 -0
  67. package/lib/math/numbers/decimals/decimal.d.ts +1 -0
  68. package/lib/math/numbers/decimals/decimal.d.ts.map +1 -1
  69. package/lib/math/numbers/decimals/decimal.js +3 -0
  70. package/lib/math/numbers/integer/integer.d.ts +1 -0
  71. package/lib/math/numbers/integer/integer.d.ts.map +1 -1
  72. package/lib/math/numbers/integer/integer.js +3 -0
  73. package/lib/math/numbers/integer/power.d.ts +1 -0
  74. package/lib/math/numbers/integer/power.d.ts.map +1 -1
  75. package/lib/math/numbers/integer/power.js +3 -0
  76. package/lib/math/numbers/logarithms/ln.d.ts +1 -0
  77. package/lib/math/numbers/logarithms/ln.d.ts.map +1 -1
  78. package/lib/math/numbers/logarithms/ln.js +3 -0
  79. package/lib/math/numbers/nombre.d.ts +5 -2
  80. package/lib/math/numbers/nombre.d.ts.map +1 -1
  81. package/lib/math/numbers/nombre.js +22 -7
  82. package/lib/math/numbers/rationals/rational.d.ts +1 -0
  83. package/lib/math/numbers/rationals/rational.d.ts.map +1 -1
  84. package/lib/math/numbers/rationals/rational.js +4 -3
  85. package/lib/math/numbers/reals/real.d.ts +1 -0
  86. package/lib/math/numbers/reals/real.d.ts.map +1 -1
  87. package/lib/math/numbers/reals/real.js +3 -0
  88. package/lib/math/polynomials/affine.d.ts +20 -5
  89. package/lib/math/polynomials/affine.d.ts.map +1 -1
  90. package/lib/math/polynomials/affine.js +8 -12
  91. package/lib/math/polynomials/trinom.d.ts +40 -4
  92. package/lib/math/polynomials/trinom.d.ts.map +1 -1
  93. package/lib/math/polynomials/trinom.js +23 -28
  94. package/lib/math/sets/intervals/intervals.d.ts +9 -12
  95. package/lib/math/sets/intervals/intervals.d.ts.map +1 -1
  96. package/lib/math/sets/intervals/intervals.js +61 -135
  97. package/lib/math/utils/random/randint.d.ts.map +1 -1
  98. package/lib/math/utils/random/randint.js +2 -2
  99. package/lib/server.d.ts +6 -0
  100. package/lib/server.d.ts.map +1 -1
  101. package/lib/server.js +10 -0
  102. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  103. package/lib/tree/nodes/operators/fractionNode.js +40 -0
  104. package/lib/tree/nodes/sets/intervalNode.d.ts +1 -0
  105. package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
  106. package/lib/tree/nodes/sets/intervalNode.js +14 -2
  107. package/lib/tree/nodes/sets/majorSets.d.ts +1 -0
  108. package/lib/tree/nodes/sets/majorSets.d.ts.map +1 -0
  109. package/lib/tree/nodes/sets/majorSets.js +1 -0
  110. package/lib/tree/nodes/sets/unionIntervalNode.d.ts +4 -0
  111. package/lib/tree/nodes/sets/unionIntervalNode.d.ts.map +1 -1
  112. package/lib/tree/nodes/sets/unionIntervalNode.js +13 -2
  113. package/lib/types/numberType.d.ts +1 -0
  114. package/lib/types/numberType.d.ts.map +1 -0
  115. package/lib/types/numberType.js +1 -0
  116. package/package.json +1 -1
@@ -1,53 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Interval = exports.IntervalConstructor = void 0;
4
- const epsilon_1 = require("../../../math/numbers/epsilon");
5
- const integer_1 = require("../../../math/numbers/integer/integer");
6
- const nombre_1 = require("../../../math/numbers/nombre");
7
- const real_1 = require("../../../math/numbers/reals/real");
8
4
  const randint_1 = require("../../../math/utils/random/randint");
9
- const round_1 = require("../../../math/utils/round");
10
5
  const infiniteNode_1 = require("../../../tree/nodes/numbers/infiniteNode");
11
- const numberNode_1 = require("../../../tree/nodes/numbers/numberNode");
12
6
  const intervalNode_1 = require("../../../tree/nodes/sets/intervalNode");
13
7
  const coinFlip_1 = require("../../../utils/coinFlip");
14
8
  const mathSet_1 = require("../mathSet");
15
9
  class IntervalConstructor {
16
10
  static random() {
17
- let tex = "";
18
11
  const randType = (0, randint_1.randint)(0, 6);
19
12
  let a, b;
13
+ let min, max, closure;
20
14
  switch (randType) {
21
15
  case 0:
22
- b = (0, randint_1.randint)(-10, 10);
23
- tex = `]-\\infty;${b}${(0, coinFlip_1.coinFlip)() ? "]" : "["}`;
16
+ min = infiniteNode_1.MinusInfinityNode;
17
+ max = (0, randint_1.randint)(-10, 10).toTree();
18
+ closure = (0, coinFlip_1.coinFlip)() ? intervalNode_1.ClosureType.OF : intervalNode_1.ClosureType.OO;
24
19
  break;
25
20
  case 1:
26
- a = (0, randint_1.randint)(-10, 10);
27
- tex = `${(0, coinFlip_1.coinFlip)() ? "]" : "["}${a};+\\infty[`;
21
+ min = (0, randint_1.randint)(-10, 10).toTree();
22
+ max = infiniteNode_1.PlusInfinityNode;
23
+ closure = (0, coinFlip_1.coinFlip)() ? intervalNode_1.ClosureType.OO : intervalNode_1.ClosureType.FO;
28
24
  break;
29
25
  case 2:
30
26
  a = (0, randint_1.randint)(-10, 10);
31
- b = (0, randint_1.randint)(a + 1, a + 10);
32
- tex = `[${a};${b}]`;
27
+ min = a.toTree();
28
+ max = (0, randint_1.randint)(a + 1, a + 10).toTree();
29
+ closure = intervalNode_1.ClosureType.FF;
33
30
  break;
34
31
  case 3:
35
32
  a = (0, randint_1.randint)(-10, 10);
36
- b = (0, randint_1.randint)(a + 1, a + 10);
37
- tex = `]${a};${b}]`;
33
+ min = a.toTree();
34
+ max = (0, randint_1.randint)(a + 1, a + 10).toTree();
35
+ closure = intervalNode_1.ClosureType.OF;
38
36
  break;
39
37
  case 4:
40
38
  a = (0, randint_1.randint)(-10, 10);
41
- b = (0, randint_1.randint)(a + 1, a + 10);
42
- tex = `[${a};${b}[`;
39
+ min = a.toTree();
40
+ max = (0, randint_1.randint)(a + 1, a + 10).toTree();
41
+ closure = intervalNode_1.ClosureType.FO;
43
42
  break;
44
43
  case 5:
44
+ default:
45
45
  a = (0, randint_1.randint)(-10, 10);
46
- b = (0, randint_1.randint)(a + 1, a + 10);
47
- tex = `]${a};${b}[`;
46
+ min = a.toTree();
47
+ max = (0, randint_1.randint)(a + 1, a + 10).toTree();
48
+ closure = intervalNode_1.ClosureType.OO;
48
49
  break;
49
50
  }
50
- return new Interval(tex);
51
+ return new Interval(min, max, closure);
51
52
  }
52
53
  static differentRandoms(nb) {
53
54
  const res = [];
@@ -55,7 +56,7 @@ class IntervalConstructor {
55
56
  let interval;
56
57
  do {
57
58
  interval = this.random();
58
- } while (res.some((int) => int.tex === interval.tex));
59
+ } while (res.some((int) => int.equals(interval)));
59
60
  res.push(this.random());
60
61
  }
61
62
  return res;
@@ -63,63 +64,26 @@ class IntervalConstructor {
63
64
  }
64
65
  exports.IntervalConstructor = IntervalConstructor;
65
66
  class Interval {
66
- /**
67
- * [[a; b]] pour un interval d'integer; [a;b] pour des réels
68
- */
69
- constructor(tex = "[-10; 10]") {
70
- if (!tex.includes(";"))
71
- throw Error("wrong interval format");
72
- this.tex = tex;
73
- const isInt = tex[1] === "[" || tex[1] === "]";
74
- this.type = isInt ? nombre_1.NumberType.Integer : nombre_1.NumberType.Real;
75
- const left = tex[0];
76
- const right = tex[tex.length - 1];
77
- const [a, b] = tex
78
- .slice(isInt ? 2 : 1, isInt ? tex.length - 2 : tex.length - 1)
79
- .split(";");
80
- this.minTex = a;
81
- this.maxTex = b;
82
- switch (`${left}a;b${right}`) {
83
- case "[a;b]":
84
- this.leftBracket = "[";
85
- this.leftInequalitySymbol = "\\le";
86
- this.rightInequalitySymbol = "\\le";
87
- this.rightBracket = "]";
88
- this.closure = intervalNode_1.ClosureType.FF;
89
- break;
90
- case "]a;b[":
91
- this.leftBracket = "]";
92
- this.rightBracket = "[";
93
- this.leftInequalitySymbol = "<";
94
- this.rightInequalitySymbol = "<";
95
- this.closure = intervalNode_1.ClosureType.OO;
96
- break;
97
- case "[a;b[":
98
- this.leftBracket = "[";
99
- this.rightBracket = "[";
100
- this.leftInequalitySymbol = "\\le";
101
- this.rightInequalitySymbol = "<";
102
- this.closure = intervalNode_1.ClosureType.FO;
103
- break;
104
- case "]a;b]":
105
- this.leftBracket = "]";
106
- this.rightBracket = "]";
107
- this.leftInequalitySymbol = "<";
108
- this.rightInequalitySymbol = "\\le";
109
- this.closure = intervalNode_1.ClosureType.OF;
110
- break;
111
- default:
112
- throw console.error("wrong interval format");
113
- }
114
- function getBound(bound) {
115
- return bound === "-\\infty"
116
- ? Number.NEGATIVE_INFINITY
117
- : bound === "+\\infty"
118
- ? Number.POSITIVE_INFINITY
119
- : Number(bound);
120
- }
121
- this.min = getBound(a);
122
- this.max = getBound(b);
67
+ constructor(min, max, closure) {
68
+ this.closure = closure;
69
+ this.minNode = min;
70
+ this.maxNode = max;
71
+ this.min = min.evaluate({});
72
+ this.max = max.evaluate({});
73
+ this.minTex = min.toTex();
74
+ this.maxTex = max.toTex();
75
+ this.leftBracket =
76
+ closure === intervalNode_1.ClosureType.FF || closure === intervalNode_1.ClosureType.FO ? "[" : "]";
77
+ this.rightBracket =
78
+ closure === intervalNode_1.ClosureType.FF || closure === intervalNode_1.ClosureType.OF ? "]" : "[";
79
+ this.leftInequalitySymbol = this.leftBracket === "[" ? "\\le" : "<";
80
+ this.rightInequalitySymbol = this.rightBracket === "]" ? "\\le" : "<";
81
+ this.tex = this.toTex();
82
+ }
83
+ equals(interval) {
84
+ return (this.min === interval.min &&
85
+ this.max === interval.max &&
86
+ this.closure === interval.closure);
123
87
  }
124
88
  union(interval) {
125
89
  let unionRightBracket = this.max > interval.max
@@ -136,10 +100,8 @@ class Interval {
136
100
  ? "["
137
101
  : "]"
138
102
  : interval.leftBracket;
139
- let min = Math.min(this.min, interval.min);
140
- let minTex = this.min < interval.min ? this.minTex : interval.minTex;
141
- let max = Math.max(this.max, interval.max);
142
- let maxTex = this.max > interval.max ? this.maxTex : interval.maxTex;
103
+ let min = this.min < interval.min ? this.minNode : interval.minNode;
104
+ let max = this.max > interval.max ? this.maxNode : interval.maxNode;
143
105
  if (this.max < interval.min ||
144
106
  this.min > interval.max ||
145
107
  (this.max === interval.min &&
@@ -150,12 +112,13 @@ class Interval {
150
112
  interval.rightBracket === "[")) {
151
113
  const firstInterval = this.min < interval.min ? this : interval;
152
114
  const secondInterval = this.min < interval.min ? interval : this;
153
- return new mathSet_1.MathSet(`${unionLeftBracket}${firstInterval.minTex};${firstInterval.maxTex}${firstInterval.rightBracket}\\cup${secondInterval.leftBracket}${secondInterval.minTex};${secondInterval.maxTex}${unionRightBracket}`, () => (0, coinFlip_1.coinFlip)()
115
+ return new mathSet_1.MathSet(`${unionLeftBracket}\\ ${firstInterval.minTex};${firstInterval.maxTex}\\ ${firstInterval.rightBracket}\\ \\cup${secondInterval.leftBracket}\\ ${secondInterval.minTex};${secondInterval.maxTex}\\ ${unionRightBracket}\\ `, () => (0, coinFlip_1.coinFlip)()
154
116
  ? firstInterval.getRandomElement()
155
117
  : secondInterval.getRandomElement());
156
118
  }
157
119
  else {
158
- return new Interval(`${unionLeftBracket}${minTex};${maxTex}${unionRightBracket}`);
120
+ const closure = (0, intervalNode_1.closureFromBrackets)(unionLeftBracket, unionRightBracket);
121
+ return new Interval(min, max, closure);
159
122
  }
160
123
  }
161
124
  intersection(interval) {
@@ -174,88 +137,51 @@ class Interval {
174
137
  }
175
138
  const winningLeftBracket = (brack1, brack2) => brack1 === "]" || brack2 === "]" ? "]" : "[";
176
139
  const winningRightBracket = (brack1, brack2) => brack1 === "[" || brack2 === "[" ? "[" : "]";
177
- let min = Math.max(a, c);
178
- let minTex = a >= c ? this.minTex : interval.minTex;
140
+ let min = a >= c ? this.minNode : interval.minNode;
179
141
  let leftBracket = a === c
180
142
  ? winningLeftBracket(this.leftBracket, interval.leftBracket)
181
143
  : a > c
182
144
  ? this.leftBracket
183
145
  : interval.leftBracket;
184
- const max = Math.min(b, d);
185
- let maxTex = b <= d ? this.maxTex : interval.maxTex;
146
+ const max = b <= d ? this.maxNode : interval.maxNode;
186
147
  let rightBracket = b === d
187
148
  ? winningRightBracket(this.rightBracket, interval.rightBracket)
188
149
  : b < d
189
150
  ? this.rightBracket
190
151
  : interval.rightBracket;
191
- return new Interval(`${leftBracket}${minTex};${maxTex}${rightBracket}`);
192
- }
193
- exclude(nb) {
194
- const rand = () => {
195
- let x;
196
- do {
197
- x = this.getRandomElement();
198
- } while (x.value === nb);
199
- return x;
200
- };
201
- return new mathSet_1.MathSet(this.toTex() + `\\left\\{${nb}\\right\\}`, rand);
202
- }
203
- difference(set) {
204
- const rand = () => {
205
- let x;
206
- do {
207
- x = this.getRandomElement();
208
- } while (set.includes(x));
209
- return x;
210
- };
211
- return new mathSet_1.MathSet(this.toTex() + `\\ ${set.toTex()}`, rand);
152
+ const closure = (0, intervalNode_1.closureFromBrackets)(leftBracket, rightBracket);
153
+ return new Interval(min, max, closure);
212
154
  }
213
155
  insideToTex() {
214
- return this.tex.replaceAll("[", "").replaceAll("]", "");
156
+ return `${this.minTex};${this.maxTex}`;
215
157
  }
216
158
  toTex() {
217
- return `${this.leftBracket}${this.insideToTex()}${this.rightBracket}`;
159
+ return `${this.leftBracket}\\ ${this.insideToTex()}\\ ${this.rightBracket}\\ `;
218
160
  }
219
161
  toInequality() {
220
162
  const isLeftClosed = this.closure === intervalNode_1.ClosureType.FO || this.closure === intervalNode_1.ClosureType.FF;
221
163
  const isRightClosed = this.closure === intervalNode_1.ClosureType.FF || this.closure === intervalNode_1.ClosureType.OF;
222
164
  if (this.max === Infinity) {
223
165
  if (isLeftClosed) {
224
- return `x\\ge${this.min}`;
166
+ return `x\\ge${this.minTex}`;
225
167
  }
226
168
  else
227
- return `x>${this.min}`;
169
+ return `x>${this.minTex}`;
228
170
  }
229
171
  else if (this.min === -Infinity) {
230
172
  if (this.closure === intervalNode_1.ClosureType.OF) {
231
- return `x\\le${this.max}`;
173
+ return `x\\le${this.maxTex}`;
232
174
  }
233
175
  else
234
- return `x<${this.max}`;
176
+ return `x<${this.maxTex}`;
235
177
  }
236
- return `${this.min}${isLeftClosed ? "\\le x" : "<x"}${isRightClosed ? "\\le" : "<"}${this.max}`;
178
+ return `${this.minTex}${isLeftClosed ? "\\le x" : "<x"}${isRightClosed ? "\\le" : "<"}${this.maxTex}`;
237
179
  }
238
- getRandomElement(precision = this.type === nombre_1.NumberType.Integer ? 0 : 2) {
239
- if (this.min === -Infinity || this.max === Infinity)
240
- throw Error("Can't chose amongst infinity");
241
- let min = this.closure === intervalNode_1.ClosureType.OO || this.closure === intervalNode_1.ClosureType.OF
242
- ? this.min + epsilon_1.EPSILON
243
- : this.min;
244
- let max = this.closure === intervalNode_1.ClosureType.OO || this.closure === intervalNode_1.ClosureType.FO
245
- ? this.max - epsilon_1.EPSILON
246
- : this.max;
247
- const value = (0, round_1.round)(min + Math.random() * (max - this.min), precision);
248
- switch (this.type) {
249
- case nombre_1.NumberType.Integer:
250
- return new integer_1.Integer(value);
251
- default:
252
- return new real_1.Real(value, value.toString());
253
- }
180
+ getRandomElement() {
181
+ throw Error("not implemented");
254
182
  }
255
183
  toTree() {
256
- const a = this.min === -Infinity ? infiniteNode_1.MinusInfinityNode : new numberNode_1.NumberNode(this.min);
257
- const b = this.max === Infinity ? infiniteNode_1.PlusInfinityNode : new numberNode_1.NumberNode(this.max);
258
- return new intervalNode_1.IntervalNode(a, b, this.closure);
184
+ return new intervalNode_1.IntervalNode(this.minNode, this.maxNode, this.closure);
259
185
  }
260
186
  }
261
187
  exports.Interval = Interval;
@@ -1 +1 @@
1
- {"version":3,"file":"randint.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randint.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO,MAAO,MAAM,MAAM,MAAM,aAAa,MAAM,EAAE,KAAG,MAQpE,CAAC"}
1
+ {"version":3,"file":"randint.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,OAAO,MAAO,MAAM,MAAM,MAAM,aAAa,MAAM,EAAE,KAAG,MAQpE,CAAC"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.randint = void 0;
4
2
  /**
5
3
  * @returns random [[a, b[[
6
4
  */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.randint = void 0;
7
7
  const randint = (a, b, excludes) => {
8
8
  if (b === undefined)
9
9
  return Math.floor(Math.random() * a);
package/lib/server.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  import * as Exercises from "./exercises";
2
2
  export { Exercises };
3
+ import { AlgebraicNode } from "./tree/nodes/algebraicNode";
4
+ declare global {
5
+ interface Number {
6
+ toTree: () => AlgebraicNode;
7
+ }
8
+ }
3
9
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,CAAC;AAarB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAe3D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,MAAM,aAAa,CAAC;KAC7B;CACF"}
package/lib/server.js CHANGED
@@ -35,8 +35,18 @@ const express_1 = __importDefault(require("express"));
35
35
  const body_parser_1 = __importDefault(require("body-parser"));
36
36
  const dotenv_1 = __importDefault(require("dotenv"));
37
37
  const cors_1 = __importDefault(require("cors"));
38
+ const numberNode_1 = require("./tree/nodes/numbers/numberNode");
39
+ const infiniteNode_1 = require("./tree/nodes/numbers/infiniteNode");
38
40
  const jsonParser = body_parser_1.default.json();
39
41
  const allExercises = [...exercises];
42
+ Number.prototype.toTree = function () {
43
+ const value = this.valueOf();
44
+ if (value === Infinity)
45
+ return infiniteNode_1.PlusInfinityNode;
46
+ if (value === -Infinity)
47
+ return infiniteNode_1.MinusInfinityNode;
48
+ return new numberNode_1.NumberNode(value);
49
+ };
40
50
  const runServer = () => {
41
51
  dotenv_1.default.config();
42
52
  const app = (0, express_1.default)();
@@ -1 +1 @@
1
- {"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAK3E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKlE,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,YAAY,IAAI,MAAM;IAItB,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA2BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAI5C,KAAK,IAAI,MAAM;IAaf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMrC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAyF/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAOrC"}
1
+ {"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAK3E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKlE,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,YAAY,IAAI,MAAM;IAItB,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA2BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAI5C,KAAK,IAAI,MAAM;IAaf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMrC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAgJ/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAOrC"}
@@ -78,6 +78,9 @@ class FractionNode {
78
78
  const simplifiedNum = this.leftChild.simplify(opts);
79
79
  const simplifiedDenum = this.rightChild.simplify(opts);
80
80
  const copy = new FractionNode(simplifiedNum, simplifiedDenum, this.opts);
81
+ if ((0, numberNode_1.isNumberNode)(simplifiedNum) && simplifiedNum.value === 0) {
82
+ return new numberNode_1.NumberNode(0);
83
+ }
81
84
  if ((0, numberNode_1.isNumberNode)(simplifiedDenum) && simplifiedDenum.value === 1) {
82
85
  return simplifiedNum;
83
86
  }
@@ -86,11 +89,16 @@ class FractionNode {
86
89
  }
87
90
  const externalsNums = [];
88
91
  const externalsDenums = [];
92
+ let oppositesCount = 0;
89
93
  const recursiveNums = (node) => {
90
94
  if ((0, multiplyNode_1.isMultiplyNode)(node)) {
91
95
  recursiveNums(node.leftChild);
92
96
  recursiveNums(node.rightChild);
93
97
  }
98
+ else if ((0, oppositeNode_1.isOppositeNode)(node)) {
99
+ oppositesCount++;
100
+ recursiveNums(node.child);
101
+ }
94
102
  else {
95
103
  externalsNums.push(node);
96
104
  }
@@ -100,19 +108,51 @@ class FractionNode {
100
108
  recursiveDenums(node.leftChild);
101
109
  recursiveDenums(node.rightChild);
102
110
  }
111
+ else if ((0, oppositeNode_1.isOppositeNode)(node)) {
112
+ oppositesCount++;
113
+ recursiveNums(node.child);
114
+ }
103
115
  else {
104
116
  externalsDenums.push(node);
105
117
  }
106
118
  };
107
119
  recursiveNums(copy.leftChild);
108
120
  recursiveDenums(copy.rightChild);
121
+ if (oppositesCount % 2 === 1) {
122
+ externalsNums.unshift(new numberNode_1.NumberNode(-1));
123
+ }
109
124
  const simplifyExternalNodes = (num, denum) => {
110
125
  if ((0, numberNode_1.isNumberNode)(num) && (0, numberNode_1.isNumberNode)(denum)) {
126
+ // console.log("num nb, denum nb", num.toTex(), denum.toTex());
127
+ if (denum.value < 0) {
128
+ if (num.value < 0) {
129
+ return new FractionNode(new numberNode_1.NumberNode(-num.value), new numberNode_1.NumberNode(-denum.value));
130
+ }
131
+ return new oppositeNode_1.OppositeNode(new FractionNode(num, new numberNode_1.NumberNode(-denum.value)));
132
+ }
111
133
  const frac = new rational_1.Rational(num.value, denum.value);
112
134
  if (frac.isIrreductible())
113
135
  return null;
114
136
  return frac.simplify().toTree();
115
137
  }
138
+ if ((0, numberNode_1.isNumberNode)(num) &&
139
+ (isFractionNode(denum) ||
140
+ ((0, oppositeNode_1.isOppositeNode)(denum) && isFractionNode(denum.child)))) {
141
+ const trueDenum = isFractionNode(denum)
142
+ ? denum
143
+ : denum.child;
144
+ return new multiplyNode_1.MultiplyNode(num, new FractionNode(trueDenum.rightChild, trueDenum.leftChild)).simplify();
145
+ }
146
+ if ((0, numberNode_1.isNumberNode)(denum) &&
147
+ (isFractionNode(num) ||
148
+ ((0, oppositeNode_1.isOppositeNode)(num) && isFractionNode(num.child)))) {
149
+ // console.log("num frac, denum nb, ", num.toTex(), denum.toTex());
150
+ const trueNum = isFractionNode(num) ? num : num.child;
151
+ return new FractionNode(trueNum.leftChild, new multiplyNode_1.MultiplyNode(trueNum.rightChild, denum)).simplify();
152
+ }
153
+ if (isFractionNode(denum) && isFractionNode(num)) {
154
+ return new multiplyNode_1.MultiplyNode(num, new FractionNode(denum.rightChild, denum.leftChild)).simplify();
155
+ }
116
156
  //!ya mieux à faire pour gérer tous les cas d'un coup
117
157
  //! s'insiprer de multiply
118
158
  if (num.equals(denum))
@@ -7,6 +7,7 @@ export declare enum ClosureType {
7
7
  OF = 2,
8
8
  OO = 3
9
9
  }
10
+ export declare const closureFromBrackets: (left: "[" | "]", right: "]" | "[") => ClosureType;
10
11
  export declare function isIntervalNode(a: Node): a is IntervalNode;
11
12
  export declare class IntervalNode implements SetNode {
12
13
  type: NodeType;
@@ -1 +1 @@
1
- {"version":3,"file":"intervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/intervalNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW;IACrB,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;CACH;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,OAAO;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;gBACI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW;IAStE,cAAc;IAId,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAoBpC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI;IA4B/B,YAAY;IAIZ,QAAQ;IAIR,KAAK;CAWN"}
1
+ {"version":3,"file":"intervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/intervalNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW;IACrB,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;CACH;AACD,eAAO,MAAM,mBAAmB,SAAU,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,gBAMpE,CAAC;AACF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,OAAO;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;gBACI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW;IAStE,cAAc;IAId,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAoBpC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI;IA4B/B,YAAY;IAIZ,QAAQ;IAIR,KAAK;CAWN"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IntervalNode = exports.isIntervalNode = exports.ClosureType = void 0;
3
+ exports.IntervalNode = exports.isIntervalNode = exports.closureFromBrackets = exports.ClosureType = void 0;
4
4
  const cartesianProducts_1 = require("../../../utils/cartesianProducts");
5
5
  const inequationNode_1 = require("../inequations/inequationNode");
6
6
  const node_1 = require("../node");
@@ -14,6 +14,18 @@ var ClosureType;
14
14
  ClosureType[ClosureType["OF"] = 2] = "OF";
15
15
  ClosureType[ClosureType["OO"] = 3] = "OO";
16
16
  })(ClosureType || (exports.ClosureType = ClosureType = {}));
17
+ const closureFromBrackets = (left, right) => {
18
+ if (left === "[")
19
+ if (right === "]")
20
+ return ClosureType.FF;
21
+ else
22
+ return ClosureType.FO;
23
+ else if (right === "[")
24
+ return ClosureType.OO;
25
+ else
26
+ return ClosureType.OF;
27
+ };
28
+ exports.closureFromBrackets = closureFromBrackets;
17
29
  function isIntervalNode(a) {
18
30
  return (0, setNode_1.isSetNode)(a) && a.id === setNode_1.SetIds.interval;
19
31
  }
@@ -71,7 +83,7 @@ class IntervalNode {
71
83
  const right = this.closure === ClosureType.FF || this.closure === ClosureType.OF
72
84
  ? "]"
73
85
  : "[";
74
- return `${left}${this.a.toTex()};${this.b.toTex()}${right}`;
86
+ return `${left}\\ ${this.a.toTex()};${this.b.toTex()}\\ ${right}\\ `;
75
87
  }
76
88
  }
77
89
  exports.IntervalNode = IntervalNode;
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=majorSets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"majorSets.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/majorSets.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -1,3 +1,4 @@
1
+ import { AlgebraicNode } from "../algebraicNode";
1
2
  import { Node, NodeOptions, NodeType } from "../node";
2
3
  import { SetIds, SetNode } from "./setNode";
3
4
  export declare enum ClosureType {
@@ -7,6 +8,9 @@ export declare enum ClosureType {
7
8
  OO = 3
8
9
  }
9
10
  export declare function isUnionIntervalNode(a: Node): a is UnionIntervalNode;
11
+ export declare abstract class UnionIntervalNodeBuilder {
12
+ static realMinus(a: AlgebraicNode): UnionIntervalNode;
13
+ }
10
14
  export declare class UnionIntervalNode implements Node {
11
15
  type: NodeType;
12
16
  id: SetIds;
@@ -1 +1 @@
1
- {"version":3,"file":"unionIntervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/unionIntervalNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW;IACrB,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;CACH;AACD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,iBAAiB,CAEnE;AACD,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,OAAO,EAAE,CAAC;gBACJ,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW;IAO/C,cAAc;IAId,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAcpC,YAAY;IAIZ,QAAQ;IAIR,KAAK;CAGN"}
1
+ {"version":3,"file":"unionIntervalNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/sets/unionIntervalNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAa,MAAM,WAAW,CAAC;AAEvD,oBAAY,WAAW;IACrB,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;IACF,EAAE,IAAA;CACH;AACD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,iBAAiB,CAEnE;AACD,8BAAsB,wBAAwB;IAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa;CAMlC;AACD,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,OAAO,EAAE,CAAC;gBACJ,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW;IAO/C,cAAc;IAId,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAcpC,YAAY;IAIZ,QAAQ;IAIR,KAAK;CAGN"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnionIntervalNode = exports.isUnionIntervalNode = exports.ClosureType = void 0;
3
+ exports.UnionIntervalNode = exports.UnionIntervalNodeBuilder = exports.isUnionIntervalNode = exports.ClosureType = void 0;
4
4
  const cartesianProducts_1 = require("../../../utils/cartesianProducts");
5
5
  const permutations_1 = require("../../../utils/permutations");
6
6
  const node_1 = require("../node");
7
+ const infiniteNode_1 = require("../numbers/infiniteNode");
8
+ const intervalNode_1 = require("./intervalNode");
7
9
  const setNode_1 = require("./setNode");
8
10
  var ClosureType;
9
11
  (function (ClosureType) {
@@ -16,6 +18,15 @@ function isUnionIntervalNode(a) {
16
18
  return (0, setNode_1.isSetNode)(a) && a.id === setNode_1.SetIds.union;
17
19
  }
18
20
  exports.isUnionIntervalNode = isUnionIntervalNode;
21
+ class UnionIntervalNodeBuilder {
22
+ static realMinus(a) {
23
+ return new UnionIntervalNode([
24
+ new intervalNode_1.IntervalNode(infiniteNode_1.MinusInfinityNode, a, ClosureType.OO),
25
+ new intervalNode_1.IntervalNode(a, infiniteNode_1.MinusInfinityNode, ClosureType.OO),
26
+ ]);
27
+ }
28
+ }
29
+ exports.UnionIntervalNodeBuilder = UnionIntervalNodeBuilder;
19
30
  class UnionIntervalNode {
20
31
  constructor(sets, opts) {
21
32
  this.type = node_1.NodeType.set;
@@ -44,7 +55,7 @@ class UnionIntervalNode {
44
55
  return this.toTex();
45
56
  }
46
57
  toTex() {
47
- return this.sets.map((set) => set.toTex()).join("\\cup");
58
+ return this.sets.map((set) => set.toTex()).join("\\ \\cup\\ ");
48
59
  }
49
60
  }
50
61
  exports.UnionIntervalNode = UnionIntervalNode;
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=numberType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberType.d.ts","sourceRoot":"","sources":["../../src/types/numberType.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "math-exercises",
3
- "version": "2.0.28",
3
+ "version": "2.0.30",
4
4
  "description": "Math exercises generator for middle school and high school",
5
5
  "main": "lib/index.js",
6
6
  "files": [