math-exercises 1.3.12 → 1.3.13

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 (254) hide show
  1. package/README.md +73 -73
  2. package/lib/exercises/calcul/addAndSub.d.ts +6 -6
  3. package/lib/exercises/calcul/addAndSub.js +39 -39
  4. package/lib/exercises/calcul/fractions/fractionAndIntegerDivision.d.ts +3 -3
  5. package/lib/exercises/calcul/fractions/fractionAndIntegerDivision.js +35 -35
  6. package/lib/exercises/calcul/fractions/fractionAndIntegerProduct.d.ts +3 -3
  7. package/lib/exercises/calcul/fractions/fractionAndIntegerProduct.js +32 -32
  8. package/lib/exercises/calcul/fractions/fractionAndIntegerSum.d.ts +3 -3
  9. package/lib/exercises/calcul/fractions/fractionAndIntegerSum.js +32 -32
  10. package/lib/exercises/calcul/fractions/fractionsDivision.d.ts +3 -3
  11. package/lib/exercises/calcul/fractions/fractionsDivision.js +29 -29
  12. package/lib/exercises/calcul/fractions/fractionsProduct.d.ts +3 -3
  13. package/lib/exercises/calcul/fractions/fractionsProduct.js +28 -28
  14. package/lib/exercises/calcul/fractions/fractionsSum.d.ts +3 -3
  15. package/lib/exercises/calcul/fractions/fractionsSum.js +28 -28
  16. package/lib/exercises/calcul/fractions/simplifyFraction.d.ts +3 -3
  17. package/lib/exercises/calcul/fractions/simplifyFraction.js +24 -24
  18. package/lib/exercises/calcul/operations/operationsPriorities.d.ts +10 -10
  19. package/lib/exercises/calcul/operations/operationsPriorities.js +98 -98
  20. package/lib/exercises/calcul/operations/operationsPrioritiesWithoutRelative.js +111 -111
  21. package/lib/exercises/calcul/operationsPriorities.js +88 -88
  22. package/lib/exercises/calcul/rounding/rounding.d.ts +19 -19
  23. package/lib/exercises/calcul/rounding/rounding.js +85 -85
  24. package/lib/exercises/calculLitteral/distributivity/allIdentities.d.ts +3 -3
  25. package/lib/exercises/calculLitteral/distributivity/allIdentities.js +27 -27
  26. package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.d.ts +3 -3
  27. package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.js +30 -30
  28. package/lib/exercises/calculLitteral/distributivity/firstIdentity.d.ts +3 -3
  29. package/lib/exercises/calculLitteral/distributivity/firstIdentity.js +31 -31
  30. package/lib/exercises/calculLitteral/distributivity/secondIdentity.d.ts +3 -3
  31. package/lib/exercises/calculLitteral/distributivity/secondIdentity.js +32 -32
  32. package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.d.ts +3 -3
  33. package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.js +32 -32
  34. package/lib/exercises/calculLitteral/distributivity/thirdIdentity.d.ts +3 -3
  35. package/lib/exercises/calculLitteral/distributivity/thirdIdentity.js +31 -31
  36. package/lib/exercises/calculLitteral/equation/equationType1Exercise.d.ts +6 -6
  37. package/lib/exercises/calculLitteral/equation/equationType1Exercise.js +37 -37
  38. package/lib/exercises/calculLitteral/equation/equationType2Exercise.d.ts +6 -6
  39. package/lib/exercises/calculLitteral/equation/equationType2Exercise.js +40 -40
  40. package/lib/exercises/calculLitteral/equation/equationType3Exercise.d.ts +6 -6
  41. package/lib/exercises/calculLitteral/equation/equationType3Exercise.js +41 -41
  42. package/lib/exercises/calculLitteral/equation/equationType4Exercise.d.ts +6 -6
  43. package/lib/exercises/calculLitteral/equation/equationType4Exercise.js +43 -43
  44. package/lib/exercises/calculLitteral/factorisation/factoIdRmq1.d.ts +3 -3
  45. package/lib/exercises/calculLitteral/factorisation/factoIdRmq1.js +32 -32
  46. package/lib/exercises/calculLitteral/factorisation/factoIdRmq2.d.ts +3 -3
  47. package/lib/exercises/calculLitteral/factorisation/factoIdRmq2.js +33 -33
  48. package/lib/exercises/calculLitteral/factorisation/factoIdRmq3.d.ts +3 -3
  49. package/lib/exercises/calculLitteral/factorisation/factoIdRmq3.js +32 -32
  50. package/lib/exercises/calculLitteral/factorisation/factoType1Exercise.d.ts +6 -6
  51. package/lib/exercises/calculLitteral/factorisation/factoType1Exercise.js +38 -38
  52. package/lib/exercises/derivation/derivative/affineDerivative.d.ts +4 -0
  53. package/lib/exercises/derivation/derivative/affineDerivative.d.ts.map +1 -0
  54. package/lib/exercises/derivation/derivative/affineDerivative.js +27 -0
  55. package/lib/exercises/derivation/derivative/secondDegreeDerivative.d.ts +1 -0
  56. package/lib/exercises/derivation/derivative/secondDegreeDerivative.d.ts.map +1 -0
  57. package/lib/exercises/derivation/derivative/secondDegreeDerivative.js +28 -0
  58. package/lib/exercises/derivation/derivative/thridDegreeDerivative.d.ts +1 -0
  59. package/lib/exercises/derivation/derivative/thridDegreeDerivative.d.ts.map +1 -0
  60. package/lib/exercises/derivation/derivative/thridDegreeDerivative.js +1 -0
  61. package/lib/exercises/exercise.d.ts +16 -16
  62. package/lib/exercises/exercise.js +7 -7
  63. package/lib/exercises/exercises.d.ts +1 -1
  64. package/lib/exercises/exercises.js +113 -113
  65. package/lib/exercises/geometry/cartesian/midpoint.d.ts +3 -3
  66. package/lib/exercises/geometry/cartesian/midpoint.js +29 -29
  67. package/lib/exercises/geometry/vectors/scalarProductViaCoords.d.ts +3 -3
  68. package/lib/exercises/geometry/vectors/scalarProductViaCoords.js +28 -28
  69. package/lib/exercises/geometry/vectors/scalarProductViaNorms.js +27 -27
  70. package/lib/exercises/powers/powersDivision.d.ts +7 -7
  71. package/lib/exercises/powers/powersDivision.js +44 -44
  72. package/lib/exercises/powers/powersOfTenToDecimal.d.ts +6 -6
  73. package/lib/exercises/powers/powersOfTenToDecimal.js +32 -32
  74. package/lib/exercises/powers/powersPower.d.ts +7 -7
  75. package/lib/exercises/powers/powersPower.js +43 -43
  76. package/lib/exercises/powers/powersProduct.d.ts +7 -7
  77. package/lib/exercises/powers/powersProduct.js +44 -44
  78. package/lib/exercises/powers/scientificToDecimal.d.ts +6 -6
  79. package/lib/exercises/powers/scientificToDecimal.js +37 -37
  80. package/lib/exercises/sequences/geometric/geometricExplicitFormulaUsage.d.ts +3 -3
  81. package/lib/exercises/sequences/geometric/geometricExplicitFormulaUsage.js +34 -34
  82. package/lib/exercises/sequences/geometric/geometricFindExplicitFormula.d.ts +3 -3
  83. package/lib/exercises/sequences/geometric/geometricFindExplicitFormula.js +33 -33
  84. package/lib/exercises/sequences/geometric/geometricFindReason.d.ts +3 -3
  85. package/lib/exercises/sequences/geometric/geometricFindReason.js +29 -29
  86. package/lib/exercises/sequences/geometric/geometricReasonUsage.d.ts +3 -3
  87. package/lib/exercises/sequences/geometric/geometricReasonUsage.js +28 -28
  88. package/lib/exercises/sequences/geometric/geometricRecurrenceFormulaUsage.d.ts +7 -7
  89. package/lib/exercises/sequences/geometric/geometricRecurrenceFormulaUsage.js +28 -28
  90. package/lib/exercises/squareRoots/simpifySquareRoot.d.ts +3 -3
  91. package/lib/exercises/squareRoots/simpifySquareRoot.js +27 -27
  92. package/lib/exercises/trigonometry/mainRemarkableValues.d.ts +3 -3
  93. package/lib/exercises/trigonometry/mainRemarkableValues.js +28 -28
  94. package/lib/exercises/trigonometry/remarkableValues.d.ts +3 -3
  95. package/lib/exercises/trigonometry/remarkableValues.js +28 -28
  96. package/lib/exercises/utils/getDistinctQuestions.d.ts +2 -2
  97. package/lib/exercises/utils/getDistinctQuestions.js +15 -15
  98. package/lib/geometry/point.js +27 -27
  99. package/lib/geometry/vector.js +31 -31
  100. package/lib/index.d.ts +3 -2
  101. package/lib/index.d.ts.map +1 -1
  102. package/lib/index.js +39 -6
  103. package/lib/math/geometry/point.d.ts +12 -12
  104. package/lib/math/geometry/point.js +27 -27
  105. package/lib/math/geometry/vector.d.ts +15 -15
  106. package/lib/math/geometry/vector.js +31 -31
  107. package/lib/math/numbers/decimals/decimal.d.ts +24 -24
  108. package/lib/math/numbers/decimals/decimal.js +140 -140
  109. package/lib/math/numbers/epsilon.d.ts +1 -1
  110. package/lib/math/numbers/epsilon.js +10 -10
  111. package/lib/math/numbers/integer/integer.d.ts +14 -14
  112. package/lib/math/numbers/integer/integer.js +68 -68
  113. package/lib/math/numbers/integer/power.d.ts +13 -13
  114. package/lib/math/numbers/integer/power.js +52 -52
  115. package/lib/math/numbers/nombre.d.ts +13 -13
  116. package/lib/math/numbers/nombre.js +10 -10
  117. package/lib/math/numbers/rationals/rational.d.ts +25 -25
  118. package/lib/math/numbers/rationals/rational.js +113 -113
  119. package/lib/math/numbers/reals/real.d.ts +9 -9
  120. package/lib/math/numbers/reals/real.js +16 -16
  121. package/lib/math/numbers/reals/squareRoot.d.ts +18 -18
  122. package/lib/math/numbers/reals/squareRoot.js +63 -63
  123. package/lib/math/polynomials/affine.d.ts +15 -15
  124. package/lib/math/polynomials/affine.js +42 -42
  125. package/lib/math/polynomials/polynomial.d.ts +25 -24
  126. package/lib/math/polynomials/polynomial.d.ts.map +1 -1
  127. package/lib/math/polynomials/polynomial.js +129 -125
  128. package/lib/math/sequences/arithmeticSequence.js +1 -1
  129. package/lib/math/sequences/geometricSequence.d.ts +3 -3
  130. package/lib/math/sequences/geometricSequence.js +8 -8
  131. package/lib/math/sequences/sequence.d.ts +22 -22
  132. package/lib/math/sequences/sequence.js +21 -21
  133. package/lib/math/sets/discreteSet.d.ts +10 -10
  134. package/lib/math/sets/discreteSet.js +28 -28
  135. package/lib/math/sets/emptySet.js +6 -6
  136. package/lib/math/sets/intervals/intervals.d.ts +26 -26
  137. package/lib/math/sets/intervals/intervals.js +104 -104
  138. package/lib/math/sets/mathSet.d.ts +7 -7
  139. package/lib/math/sets/mathSet.js +10 -10
  140. package/lib/math/sets/mathSetInterface.d.ts +5 -5
  141. package/lib/math/sets/mathSetInterface.js +2 -2
  142. package/lib/math/trigonometry/remarkableValue.d.ts +10 -10
  143. package/lib/math/trigonometry/remarkableValue.js +29 -29
  144. package/lib/math/trigonometry/remarkableValues.d.ts +2 -2
  145. package/lib/math/trigonometry/remarkableValues.js +51 -51
  146. package/lib/math/utils/arithmetic/coprimesOf.d.ts +1 -1
  147. package/lib/math/utils/arithmetic/coprimesOf.js +13 -13
  148. package/lib/math/utils/arithmetic/dividersOf.d.ts +1 -1
  149. package/lib/math/utils/arithmetic/dividersOf.js +12 -12
  150. package/lib/math/utils/arithmetic/gcd.d.ts +1 -1
  151. package/lib/math/utils/arithmetic/gcd.js +7 -7
  152. package/lib/math/utils/arithmetic/isSquare.d.ts +1 -1
  153. package/lib/math/utils/arithmetic/isSquare.js +7 -7
  154. package/lib/math/utils/arithmetic/lcd.d.ts +1 -1
  155. package/lib/math/utils/arithmetic/lcd.js +12 -12
  156. package/lib/math/utils/arithmetic/nonCoprimesOf.d.ts +1 -1
  157. package/lib/math/utils/arithmetic/nonCoprimesOf.js +13 -13
  158. package/lib/math/utils/arithmetic/nonDividersOf.d.ts +1 -1
  159. package/lib/math/utils/arithmetic/nonDividersOf.js +14 -14
  160. package/lib/math/utils/arithmetic/primeFactors.d.ts +5 -5
  161. package/lib/math/utils/arithmetic/primeFactors.js +22 -22
  162. package/lib/math/utils/decimals/decimalPartLengthOf.d.ts +1 -1
  163. package/lib/math/utils/decimals/decimalPartLengthOf.js +14 -14
  164. package/lib/math/utils/random/randTupleInt.d.ts +13 -13
  165. package/lib/math/utils/random/randTupleInt.js +30 -30
  166. package/lib/math/utils/random/randint.d.ts +4 -4
  167. package/lib/math/utils/random/randint.js +18 -18
  168. package/lib/math/utils/round.d.ts +1 -1
  169. package/lib/math/utils/round.js +8 -8
  170. package/lib/mathutils/arithmetic/coprimesOf.js +13 -13
  171. package/lib/mathutils/arithmetic/dividersOf.js +12 -12
  172. package/lib/mathutils/arithmetic/gcd.js +7 -7
  173. package/lib/mathutils/arithmetic/isSquare.js +7 -7
  174. package/lib/mathutils/arithmetic/lcd.js +12 -12
  175. package/lib/mathutils/arithmetic/nonCoprimesOf.js +13 -13
  176. package/lib/mathutils/arithmetic/nonDividersOf.js +14 -14
  177. package/lib/mathutils/arithmetic/primeFactors.js +22 -22
  178. package/lib/mathutils/decimals/decimalPartLengthOf.js +14 -14
  179. package/lib/mathutils/random/randTupleInt.js +30 -30
  180. package/lib/mathutils/random/randint.js +18 -18
  181. package/lib/mathutils/round.js +8 -8
  182. package/lib/numbers/decimals/decimal.js +140 -140
  183. package/lib/numbers/epsilon.js +10 -10
  184. package/lib/numbers/integer/integer.js +68 -68
  185. package/lib/numbers/integer/power.js +52 -52
  186. package/lib/numbers/nombre.js +10 -10
  187. package/lib/numbers/rationals/rational.js +113 -113
  188. package/lib/numbers/reals/real.js +16 -16
  189. package/lib/numbers/reals/squareRoot.js +63 -63
  190. package/lib/polynomials/affine.js +42 -42
  191. package/lib/polynomials/polynomial.js +125 -125
  192. package/lib/server.d.ts +2 -0
  193. package/lib/server.d.ts.map +1 -0
  194. package/lib/server.js +33 -0
  195. package/lib/sets/discreteSet.js +28 -28
  196. package/lib/sets/emptySet.js +6 -6
  197. package/lib/sets/intervals/intervals.js +108 -104
  198. package/lib/sets/intervals/union.js +1 -1
  199. package/lib/sets/mathSet.js +10 -10
  200. package/lib/sets/mathSetInterface.js +2 -2
  201. package/lib/tree/nodes/functions/cosNode.d.ts +9 -9
  202. package/lib/tree/nodes/functions/cosNode.js +21 -21
  203. package/lib/tree/nodes/functions/functionNode.d.ts +14 -14
  204. package/lib/tree/nodes/functions/functionNode.js +20 -20
  205. package/lib/tree/nodes/functions/oppositeNode.d.ts +7 -7
  206. package/lib/tree/nodes/functions/oppositeNode.js +26 -26
  207. package/lib/tree/nodes/functions/sinNode.js +1 -1
  208. package/lib/tree/nodes/functions/sqrtNode.d.ts +8 -8
  209. package/lib/tree/nodes/functions/sqrtNode.js +18 -18
  210. package/lib/tree/nodes/node.d.ts +12 -12
  211. package/lib/tree/nodes/node.js +11 -11
  212. package/lib/tree/nodes/numbers/constantNode.d.ts +9 -9
  213. package/lib/tree/nodes/numbers/constantNode.js +18 -18
  214. package/lib/tree/nodes/numbers/numberNode.d.ts +10 -10
  215. package/lib/tree/nodes/numbers/numberNode.js +19 -19
  216. package/lib/tree/nodes/numbers/piNode.d.ts +2 -2
  217. package/lib/tree/nodes/numbers/piNode.js +5 -5
  218. package/lib/tree/nodes/operators/addNode.d.ts +7 -7
  219. package/lib/tree/nodes/operators/addNode.js +19 -19
  220. package/lib/tree/nodes/operators/divideNode.d.ts +11 -11
  221. package/lib/tree/nodes/operators/divideNode.js +34 -34
  222. package/lib/tree/nodes/operators/equalNode.d.ts +7 -7
  223. package/lib/tree/nodes/operators/equalNode.js +16 -16
  224. package/lib/tree/nodes/operators/fractionNode.d.ts +11 -11
  225. package/lib/tree/nodes/operators/fractionNode.js +20 -20
  226. package/lib/tree/nodes/operators/multiplyNode.d.ts +7 -7
  227. package/lib/tree/nodes/operators/multiplyNode.js +43 -43
  228. package/lib/tree/nodes/operators/operatorNode.d.ts +21 -21
  229. package/lib/tree/nodes/operators/operatorNode.js +35 -35
  230. package/lib/tree/nodes/operators/powerNode.d.ts +7 -7
  231. package/lib/tree/nodes/operators/powerNode.js +33 -33
  232. package/lib/tree/nodes/operators/substractNode.d.ts +7 -7
  233. package/lib/tree/nodes/operators/substractNode.js +24 -24
  234. package/lib/tree/nodes/variables/variableNode.d.ts +8 -8
  235. package/lib/tree/nodes/variables/variableNode.js +19 -19
  236. package/lib/tree/parsers/derivateParser.js +62 -62
  237. package/lib/tree/parsers/latexParser.js +110 -110
  238. package/lib/tree/parsers/simplify.d.ts +2 -2
  239. package/lib/tree/parsers/simplify.js +52 -52
  240. package/lib/utils/arrayEqual.d.ts +1 -1
  241. package/lib/utils/arrayEqual.js +13 -13
  242. package/lib/utils/coin.js +7 -7
  243. package/lib/utils/coinFlip.d.ts +1 -1
  244. package/lib/utils/coinFlip.js +7 -7
  245. package/lib/utils/random.d.ts +1 -1
  246. package/lib/utils/random.js +7 -7
  247. package/lib/utils/shuffle.d.ts +1 -1
  248. package/lib/utils/shuffle.js +15 -15
  249. package/package.json +50 -45
  250. package/lib/exercises/calculLitteral/factorisation/factoIdRmq.d.ts +0 -7
  251. package/lib/exercises/calculLitteral/factorisation/factoIdRmq.d.ts.map +0 -1
  252. package/lib/exercises/calculLitteral/factorisation/factoIdRmq.js +0 -38
  253. package/lib/trigonometry/remarkableValue.js +0 -29
  254. package/lib/trigonometry/remarkableValues.js +0 -51
@@ -1,113 +1,113 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Rational = exports.RationalConstructor = void 0;
4
- const coprimesOf_1 = require("../../mathutils/arithmetic/coprimesOf");
5
- const gcd_1 = require("../../mathutils/arithmetic/gcd");
6
- const lcd_1 = require("../../mathutils/arithmetic/lcd");
7
- const randint_1 = require("../../mathutils/random/randint");
8
- const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
9
- const fractionNode_1 = require("../../tree/nodes/operators/fractionNode");
10
- const random_1 = require("../../utils/random");
11
- const shuffle_1 = require("../../utils/shuffle");
12
- const integer_1 = require("../integer/integer");
13
- const nombre_1 = require("../nombre");
14
- class RationalConstructor {
15
- /**
16
- * @param maxGcd max number by which the fraction is simplifiable
17
- */
18
- static randomSimplifiable(maxGcd = 10) {
19
- const gcd = (0, randint_1.randint)(2, maxGcd);
20
- const max = (0, randint_1.randint)(3, 11);
21
- const min = (0, random_1.random)((0, coprimesOf_1.coprimesOf)(max));
22
- let [num, denum] = (0, shuffle_1.shuffle)([gcd * min, gcd * max]);
23
- if (denum === gcd) {
24
- //si 10/2 on transforme en 2/10
25
- return new Rational(denum, num);
26
- }
27
- return new Rational(num, denum);
28
- }
29
- static randomIrreductible(max = 11) {
30
- const a = (0, randint_1.randint)(2, max);
31
- const b = (0, random_1.random)([...(0, coprimesOf_1.coprimesOf)(a), 1]);
32
- if (b === 1)
33
- return new Rational(b, a);
34
- const [num, denum] = (0, shuffle_1.shuffle)([a, b]);
35
- return new Rational(num, denum);
36
- }
37
- }
38
- exports.RationalConstructor = RationalConstructor;
39
- class Rational {
40
- constructor(numerator, denumerator) {
41
- if (denumerator === 0)
42
- throw Error("division by zero");
43
- this.num = numerator;
44
- this.denum = denumerator;
45
- this.value = numerator / denumerator;
46
- this.isSimplified = Math.abs((0, gcd_1.gcd)(numerator, denumerator)) === 1;
47
- this.tex = `\\frac{${this.num}}{${this.denum}}`;
48
- this.type = nombre_1.NumberType.Rational;
49
- }
50
- toTex() {
51
- return `\\frac{${this.num}}{${this.denum}}`;
52
- }
53
- add(nb) {
54
- switch (nb.type) {
55
- case nombre_1.NumberType.Integer: {
56
- const num = this.num + this.denum * nb.value;
57
- return new Rational(num, this.denum).simplify();
58
- }
59
- case nombre_1.NumberType.Rational: {
60
- const rational = nb;
61
- const ppcm = (0, lcd_1.lcd)(rational.denum, this.denum);
62
- const num = this.num * (ppcm / this.denum) + rational.num * (ppcm / rational.denum);
63
- return new Rational(num, ppcm).simplify();
64
- }
65
- }
66
- throw Error("not implemented yet");
67
- }
68
- multiply(nb) {
69
- switch (nb.type) {
70
- case nombre_1.NumberType.Integer: {
71
- const num = this.num * nb.value;
72
- const denum = this.denum;
73
- return new Rational(num, denum).simplify();
74
- }
75
- case nombre_1.NumberType.Rational: {
76
- const rational = nb;
77
- const num = this.num * rational.num;
78
- const denum = this.denum * rational.denum;
79
- return new Rational(num, denum).simplify();
80
- }
81
- }
82
- throw Error("not implemented yet");
83
- }
84
- divide(nb) {
85
- switch (nb.type) {
86
- case nombre_1.NumberType.Integer: {
87
- const denum = this.denum * nb.value;
88
- return new Rational(this.num, denum).simplify();
89
- }
90
- case nombre_1.NumberType.Rational: {
91
- const rational = nb;
92
- const num = this.num * rational.denum;
93
- const denum = this.denum * rational.num;
94
- return new Rational(num, denum).simplify();
95
- }
96
- }
97
- throw Error("not implemented yet");
98
- }
99
- opposite() {
100
- return new Rational(-this.num, this.denum);
101
- }
102
- toTree() {
103
- return new fractionNode_1.FractionNode(new numberNode_1.NumberNode(this.num), new numberNode_1.NumberNode(this.denum));
104
- }
105
- simplify() {
106
- const sign = (this.num > 0 && this.denum > 0) || (this.num < 0 && this.denum < 0) ? 1 : -1;
107
- const div = Math.abs((0, gcd_1.gcd)(this.num, this.denum));
108
- if (Math.abs(this.denum) === div)
109
- return new integer_1.Integer(this.num / this.denum);
110
- return new Rational((sign * Math.abs(this.num)) / div, Math.abs(this.denum) / div);
111
- }
112
- }
113
- exports.Rational = Rational;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Rational = exports.RationalConstructor = void 0;
4
+ const coprimesOf_1 = require("../../mathutils/arithmetic/coprimesOf");
5
+ const gcd_1 = require("../../mathutils/arithmetic/gcd");
6
+ const lcd_1 = require("../../mathutils/arithmetic/lcd");
7
+ const randint_1 = require("../../mathutils/random/randint");
8
+ const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
9
+ const fractionNode_1 = require("../../tree/nodes/operators/fractionNode");
10
+ const random_1 = require("../../utils/random");
11
+ const shuffle_1 = require("../../utils/shuffle");
12
+ const integer_1 = require("../integer/integer");
13
+ const nombre_1 = require("../nombre");
14
+ class RationalConstructor {
15
+ /**
16
+ * @param maxGcd max number by which the fraction is simplifiable
17
+ */
18
+ static randomSimplifiable(maxGcd = 10) {
19
+ const gcd = (0, randint_1.randint)(2, maxGcd);
20
+ const max = (0, randint_1.randint)(3, 11);
21
+ const min = (0, random_1.random)((0, coprimesOf_1.coprimesOf)(max));
22
+ let [num, denum] = (0, shuffle_1.shuffle)([gcd * min, gcd * max]);
23
+ if (denum === gcd) {
24
+ //si 10/2 on transforme en 2/10
25
+ return new Rational(denum, num);
26
+ }
27
+ return new Rational(num, denum);
28
+ }
29
+ static randomIrreductible(max = 11) {
30
+ const a = (0, randint_1.randint)(2, max);
31
+ const b = (0, random_1.random)([...(0, coprimesOf_1.coprimesOf)(a), 1]);
32
+ if (b === 1)
33
+ return new Rational(b, a);
34
+ const [num, denum] = (0, shuffle_1.shuffle)([a, b]);
35
+ return new Rational(num, denum);
36
+ }
37
+ }
38
+ exports.RationalConstructor = RationalConstructor;
39
+ class Rational {
40
+ constructor(numerator, denumerator) {
41
+ if (denumerator === 0)
42
+ throw Error("division by zero");
43
+ this.num = numerator;
44
+ this.denum = denumerator;
45
+ this.value = numerator / denumerator;
46
+ this.isSimplified = Math.abs((0, gcd_1.gcd)(numerator, denumerator)) === 1;
47
+ this.tex = `\\frac{${this.num}}{${this.denum}}`;
48
+ this.type = nombre_1.NumberType.Rational;
49
+ }
50
+ toTex() {
51
+ return `\\frac{${this.num}}{${this.denum}}`;
52
+ }
53
+ add(nb) {
54
+ switch (nb.type) {
55
+ case nombre_1.NumberType.Integer: {
56
+ const num = this.num + this.denum * nb.value;
57
+ return new Rational(num, this.denum).simplify();
58
+ }
59
+ case nombre_1.NumberType.Rational: {
60
+ const rational = nb;
61
+ const ppcm = (0, lcd_1.lcd)(rational.denum, this.denum);
62
+ const num = this.num * (ppcm / this.denum) + rational.num * (ppcm / rational.denum);
63
+ return new Rational(num, ppcm).simplify();
64
+ }
65
+ }
66
+ throw Error("not implemented yet");
67
+ }
68
+ multiply(nb) {
69
+ switch (nb.type) {
70
+ case nombre_1.NumberType.Integer: {
71
+ const num = this.num * nb.value;
72
+ const denum = this.denum;
73
+ return new Rational(num, denum).simplify();
74
+ }
75
+ case nombre_1.NumberType.Rational: {
76
+ const rational = nb;
77
+ const num = this.num * rational.num;
78
+ const denum = this.denum * rational.denum;
79
+ return new Rational(num, denum).simplify();
80
+ }
81
+ }
82
+ throw Error("not implemented yet");
83
+ }
84
+ divide(nb) {
85
+ switch (nb.type) {
86
+ case nombre_1.NumberType.Integer: {
87
+ const denum = this.denum * nb.value;
88
+ return new Rational(this.num, denum).simplify();
89
+ }
90
+ case nombre_1.NumberType.Rational: {
91
+ const rational = nb;
92
+ const num = this.num * rational.denum;
93
+ const denum = this.denum * rational.num;
94
+ return new Rational(num, denum).simplify();
95
+ }
96
+ }
97
+ throw Error("not implemented yet");
98
+ }
99
+ opposite() {
100
+ return new Rational(-this.num, this.denum);
101
+ }
102
+ toTree() {
103
+ return new fractionNode_1.FractionNode(new numberNode_1.NumberNode(this.num), new numberNode_1.NumberNode(this.denum));
104
+ }
105
+ simplify() {
106
+ const sign = (this.num > 0 && this.denum > 0) || (this.num < 0 && this.denum < 0) ? 1 : -1;
107
+ const div = Math.abs((0, gcd_1.gcd)(this.num, this.denum));
108
+ if (Math.abs(this.denum) === div)
109
+ return new integer_1.Integer(this.num / this.denum);
110
+ return new Rational((sign * Math.abs(this.num)) / div, Math.abs(this.denum) / div);
111
+ }
112
+ }
113
+ exports.Rational = Rational;
@@ -1,16 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Real = void 0;
4
- const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
5
- const nombre_1 = require("../nombre");
6
- class Real {
7
- constructor(value, tex) {
8
- this.value = value;
9
- this.tex = tex;
10
- this.type = nombre_1.NumberType.Real;
11
- }
12
- toTree() {
13
- return new numberNode_1.NumberNode(this.value);
14
- }
15
- }
16
- exports.Real = Real;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Real = void 0;
4
+ const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
5
+ const nombre_1 = require("../nombre");
6
+ class Real {
7
+ constructor(value, tex) {
8
+ this.value = value;
9
+ this.tex = tex;
10
+ this.type = nombre_1.NumberType.Real;
11
+ }
12
+ toTree() {
13
+ return new numberNode_1.NumberNode(this.value);
14
+ }
15
+ }
16
+ exports.Real = Real;
@@ -1,63 +1,63 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SquareRoot = exports.SquareRootConstructor = void 0;
4
- const isSquare_1 = require("../../mathutils/arithmetic/isSquare");
5
- const primeFactors_1 = require("../../mathutils/arithmetic/primeFactors");
6
- const randint_1 = require("../../mathutils/random/randint");
7
- const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
8
- const multiplyNode_1 = require("../../tree/nodes/operators/multiplyNode");
9
- const real_1 = require("./real");
10
- const sqrtNode_1 = require("../../tree/nodes/functions/sqrtNode");
11
- class SquareRootConstructor {
12
- /**
13
- * @returns simplifiable square root type sqrt(c)=a*sqrt(b)
14
- */
15
- static randomSimplifiable({ allowPerfectSquare = false, maxSquare = 11 }) {
16
- const a = (0, randint_1.randint)(2, maxSquare);
17
- let b;
18
- let bMin = allowPerfectSquare ? 1 : 2;
19
- do {
20
- b = (0, randint_1.randint)(bMin, maxSquare);
21
- } while (b % (a * a) === 0 || (0, isSquare_1.isSquare)(b));
22
- return new SquareRoot(a * a * b);
23
- }
24
- }
25
- exports.SquareRootConstructor = SquareRootConstructor;
26
- class SquareRoot extends real_1.Real {
27
- constructor(operand) {
28
- super(Math.sqrt(operand), `\\sqrt{${operand}}`);
29
- this.operand = operand;
30
- }
31
- simplify() {
32
- const factors = (0, primeFactors_1.primeFactors)(this.operand);
33
- // finds primes with even exponents
34
- const multiples = [1];
35
- for (let i = 0; i < factors.length - 1; i++) {
36
- if (factors[i] === factors[i + 1]) {
37
- multiples.push(factors[i]);
38
- factors.splice(i, 2);
39
- i--;
40
- }
41
- }
42
- const outsideSqrt = multiples.reduce((x, y) => x * y);
43
- const insideSqrt = factors.length === 0 ? 1 : factors.reduce((x, y) => x * y);
44
- const simplified = insideSqrt !== 1
45
- ? new real_1.Real(outsideSqrt * Math.sqrt(insideSqrt), `${outsideSqrt === 1 ? "" : `${outsideSqrt}`}\\sqrt{${insideSqrt}}`)
46
- : new real_1.Real(outsideSqrt, outsideSqrt + "");
47
- simplified.toTree = () => {
48
- return insideSqrt !== 1
49
- ? outsideSqrt === 1
50
- ? new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(insideSqrt))
51
- : new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(outsideSqrt), new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(insideSqrt)))
52
- : new numberNode_1.NumberNode(outsideSqrt);
53
- };
54
- return simplified;
55
- }
56
- toTex() {
57
- return this.tex;
58
- }
59
- toTree() {
60
- return new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(this.operand));
61
- }
62
- }
63
- exports.SquareRoot = SquareRoot;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SquareRoot = exports.SquareRootConstructor = void 0;
4
+ const isSquare_1 = require("../../mathutils/arithmetic/isSquare");
5
+ const primeFactors_1 = require("../../mathutils/arithmetic/primeFactors");
6
+ const randint_1 = require("../../mathutils/random/randint");
7
+ const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
8
+ const multiplyNode_1 = require("../../tree/nodes/operators/multiplyNode");
9
+ const real_1 = require("./real");
10
+ const sqrtNode_1 = require("../../tree/nodes/functions/sqrtNode");
11
+ class SquareRootConstructor {
12
+ /**
13
+ * @returns simplifiable square root type sqrt(c)=a*sqrt(b)
14
+ */
15
+ static randomSimplifiable({ allowPerfectSquare = false, maxSquare = 11 }) {
16
+ const a = (0, randint_1.randint)(2, maxSquare);
17
+ let b;
18
+ let bMin = allowPerfectSquare ? 1 : 2;
19
+ do {
20
+ b = (0, randint_1.randint)(bMin, maxSquare);
21
+ } while (b % (a * a) === 0 || (0, isSquare_1.isSquare)(b));
22
+ return new SquareRoot(a * a * b);
23
+ }
24
+ }
25
+ exports.SquareRootConstructor = SquareRootConstructor;
26
+ class SquareRoot extends real_1.Real {
27
+ constructor(operand) {
28
+ super(Math.sqrt(operand), `\\sqrt{${operand}}`);
29
+ this.operand = operand;
30
+ }
31
+ simplify() {
32
+ const factors = (0, primeFactors_1.primeFactors)(this.operand);
33
+ // finds primes with even exponents
34
+ const multiples = [1];
35
+ for (let i = 0; i < factors.length - 1; i++) {
36
+ if (factors[i] === factors[i + 1]) {
37
+ multiples.push(factors[i]);
38
+ factors.splice(i, 2);
39
+ i--;
40
+ }
41
+ }
42
+ const outsideSqrt = multiples.reduce((x, y) => x * y);
43
+ const insideSqrt = factors.length === 0 ? 1 : factors.reduce((x, y) => x * y);
44
+ const simplified = insideSqrt !== 1
45
+ ? new real_1.Real(outsideSqrt * Math.sqrt(insideSqrt), `${outsideSqrt === 1 ? "" : `${outsideSqrt}`}\\sqrt{${insideSqrt}}`)
46
+ : new real_1.Real(outsideSqrt, outsideSqrt + "");
47
+ simplified.toTree = () => {
48
+ return insideSqrt !== 1
49
+ ? outsideSqrt === 1
50
+ ? new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(insideSqrt))
51
+ : new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(outsideSqrt), new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(insideSqrt)))
52
+ : new numberNode_1.NumberNode(outsideSqrt);
53
+ };
54
+ return simplified;
55
+ }
56
+ toTex() {
57
+ return this.tex;
58
+ }
59
+ toTree() {
60
+ return new sqrtNode_1.SqrtNode(new numberNode_1.NumberNode(this.operand));
61
+ }
62
+ }
63
+ exports.SquareRoot = SquareRoot;
@@ -1,42 +1,42 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Affine = exports.AffineConstructor = void 0;
4
- const rational_1 = require("../numbers/rationals/rational");
5
- const intervals_1 = require("../sets/intervals/intervals");
6
- const polynomial_1 = require("./polynomial");
7
- const discreteSet_1 = require("../sets/discreteSet");
8
- const integer_1 = require("../numbers/integer/integer");
9
- class AffineConstructor {
10
- static random(domainA = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)])), domainB = new intervals_1.Interval("[[-10; 10]]")) {
11
- const a = domainA.getRandomElement();
12
- const b = domainB.getRandomElement();
13
- return new Affine(a.value, b.value);
14
- }
15
- static differentRandoms(nb, domainA = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)])), domainB = new intervals_1.Interval("[[-10; 10]]")) {
16
- const res = [];
17
- for (let i = 0; i < nb; i++) {
18
- let aff;
19
- do {
20
- aff = AffineConstructor.random(domainA, domainB);
21
- } while (res.some((affine) => affine.equals(aff)));
22
- res.push(aff);
23
- }
24
- return res;
25
- }
26
- }
27
- exports.AffineConstructor = AffineConstructor;
28
- class Affine extends polynomial_1.Polynomial {
29
- constructor(a, b, variable = "x") {
30
- super([b, a], variable);
31
- this.a = a;
32
- this.b = b;
33
- this.variable = variable;
34
- }
35
- getRoot() {
36
- return new rational_1.Rational(-this.b, this.a).simplify();
37
- }
38
- toString() {
39
- return super.toTex();
40
- }
41
- }
42
- exports.Affine = Affine;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Affine = exports.AffineConstructor = void 0;
4
+ const rational_1 = require("../numbers/rationals/rational");
5
+ const intervals_1 = require("../sets/intervals/intervals");
6
+ const polynomial_1 = require("./polynomial");
7
+ const discreteSet_1 = require("../sets/discreteSet");
8
+ const integer_1 = require("../numbers/integer/integer");
9
+ class AffineConstructor {
10
+ static random(domainA = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)])), domainB = new intervals_1.Interval("[[-10; 10]]")) {
11
+ const a = domainA.getRandomElement();
12
+ const b = domainB.getRandomElement();
13
+ return new Affine(a.value, b.value);
14
+ }
15
+ static differentRandoms(nb, domainA = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)])), domainB = new intervals_1.Interval("[[-10; 10]]")) {
16
+ const res = [];
17
+ for (let i = 0; i < nb; i++) {
18
+ let aff;
19
+ do {
20
+ aff = AffineConstructor.random(domainA, domainB);
21
+ } while (res.some((affine) => affine.equals(aff)));
22
+ res.push(aff);
23
+ }
24
+ return res;
25
+ }
26
+ }
27
+ exports.AffineConstructor = AffineConstructor;
28
+ class Affine extends polynomial_1.Polynomial {
29
+ constructor(a, b, variable = "x") {
30
+ super([b, a], variable);
31
+ this.a = a;
32
+ this.b = b;
33
+ this.variable = variable;
34
+ }
35
+ getRoot() {
36
+ return new rational_1.Rational(-this.b, this.a).simplify();
37
+ }
38
+ toString() {
39
+ return super.toTex();
40
+ }
41
+ }
42
+ exports.Affine = Affine;