math-exercises 1.2.8 → 1.2.11

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 (216) hide show
  1. package/lib/exercises/calcul/addAndSub.js +40 -0
  2. package/lib/exercises/calcul/fractions/fractionAndIntegerDivision.js +35 -0
  3. package/lib/exercises/calcul/fractions/fractionAndIntegerProduct.js +31 -0
  4. package/lib/exercises/calcul/fractions/fractionAndIntegerSum.js +32 -0
  5. package/lib/exercises/calcul/fractions/fractionsDivision.js +29 -0
  6. package/lib/exercises/calcul/fractions/fractionsProduct.js +29 -0
  7. package/lib/exercises/calcul/fractions/fractionsSum.js +29 -0
  8. package/lib/exercises/calcul/fractions/simplifyFraction.js +25 -0
  9. package/lib/exercises/calcul/operations/operationsPriorities.js +88 -0
  10. package/lib/exercises/calcul/operations/operationsPrioritiesWithoutRelative.js +111 -0
  11. package/{src → lib}/exercises/calcul/operationsPriorities.js +88 -89
  12. package/{src → lib}/exercises/calcul/rounding/rounding.js +86 -87
  13. package/{src → lib}/exercises/calculLitteral/distributivity/allIdentities.js +27 -27
  14. package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.js +31 -0
  15. package/lib/exercises/calculLitteral/distributivity/firstIdentity.js +32 -0
  16. package/lib/exercises/calculLitteral/distributivity/secondIdentity.js +33 -0
  17. package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.js +33 -0
  18. package/lib/exercises/calculLitteral/distributivity/thirdIdentity.js +32 -0
  19. package/lib/exercises/calculLitteral/equation/equationType1Exercise.js +38 -0
  20. package/lib/exercises/calculLitteral/equation/equationType2Exercise.js +41 -0
  21. package/lib/exercises/calculLitteral/equation/equationType3Exercise.js +42 -0
  22. package/lib/exercises/calculLitteral/equation/equationType4Exercise.js +44 -0
  23. package/lib/exercises/calculLitteral/factorisation/factoType1Exercise.js +39 -0
  24. package/{src → lib}/exercises/exercise.js +7 -7
  25. package/lib/exercises/exercises.js +95 -0
  26. package/lib/exercises/geometry/cartesian/midpoint.js +29 -0
  27. package/lib/exercises/geometry/vectors/scalarProductViaCoords.js +29 -0
  28. package/lib/exercises/geometry/vectors/scalarProductViaNorms.js +27 -0
  29. package/lib/exercises/powers/powersDivision.js +45 -0
  30. package/lib/exercises/powers/powersOfTenToDecimal.js +33 -0
  31. package/lib/exercises/powers/powersPower.js +44 -0
  32. package/lib/exercises/powers/powersProduct.js +45 -0
  33. package/lib/exercises/powers/scientificToDecimal.js +38 -0
  34. package/{src → lib}/exercises/squareRoots/simpifySquareRoot.js +28 -28
  35. package/lib/exercises/utils/getDistinctQuestions.js +16 -0
  36. package/lib/geometry/point.js +27 -0
  37. package/lib/geometry/vector.js +31 -0
  38. package/lib/index.js +10 -0
  39. package/lib/mathutils/arithmetic/coprimesOf.js +13 -0
  40. package/lib/mathutils/arithmetic/dividersOf.js +12 -0
  41. package/{src → lib}/mathutils/arithmetic/gcd.js +7 -7
  42. package/{src → lib}/mathutils/arithmetic/isSquare.js +7 -7
  43. package/{src → lib}/mathutils/arithmetic/lcd.js +12 -12
  44. package/lib/mathutils/arithmetic/nonCoprimesOf.js +13 -0
  45. package/lib/mathutils/arithmetic/nonDividersOf.js +14 -0
  46. package/{src → lib}/mathutils/arithmetic/primeFactors.js +22 -22
  47. package/lib/mathutils/decimals/decimalPartLengthOf.js +14 -0
  48. package/lib/mathutils/random/randTupleInt.js +30 -0
  49. package/{src → lib}/mathutils/random/randint.js +18 -18
  50. package/{src → lib}/mathutils/round.js +8 -8
  51. package/{src → lib}/numbers/decimals/decimal.js +140 -144
  52. package/{src → lib}/numbers/epsilon.js +10 -10
  53. package/{src → lib}/numbers/integer/integer.js +68 -72
  54. package/{src → lib}/numbers/integer/power.js +52 -53
  55. package/{src → lib}/numbers/nombre.js +10 -10
  56. package/lib/numbers/rationals/rational.js +113 -0
  57. package/lib/numbers/reals/real.js +16 -0
  58. package/lib/numbers/reals/squareRoot.js +63 -0
  59. package/lib/polynomials/affine.js +42 -0
  60. package/lib/polynomials/polynomial.js +125 -0
  61. package/lib/sets/discreteSet.js +28 -0
  62. package/{src/sets/emptySet.ts → lib/sets/emptySet.js} +6 -6
  63. package/{src → lib}/sets/intervals/intervals.js +108 -113
  64. package/lib/sets/intervals/union.js +1 -0
  65. package/lib/sets/mathSet.js +10 -0
  66. package/lib/sets/mathSetInterface.js +2 -0
  67. package/{src → lib}/tree/nodes/functions/functionNode.js +18 -19
  68. package/lib/tree/nodes/functions/oppositeNode.js +13 -0
  69. package/lib/tree/nodes/functions/sqrtNode.js +15 -0
  70. package/{src → lib}/tree/nodes/node.js +10 -10
  71. package/lib/tree/nodes/numbers/numberNode.js +18 -0
  72. package/lib/tree/nodes/operators/addNode.js +15 -0
  73. package/lib/tree/nodes/operators/divideNode.js +17 -0
  74. package/lib/tree/nodes/operators/equalNode.js +13 -0
  75. package/lib/tree/nodes/operators/fractionNode.js +17 -0
  76. package/lib/tree/nodes/operators/multiplyNode.js +13 -0
  77. package/{src → lib}/tree/nodes/operators/operatorNode.js +35 -37
  78. package/lib/tree/nodes/operators/powerNode.js +13 -0
  79. package/lib/tree/nodes/operators/substractNode.js +13 -0
  80. package/lib/tree/nodes/variables/variableNode.js +16 -0
  81. package/{src → lib}/tree/parsers/derivateParser.js +60 -60
  82. package/{src → lib}/tree/parsers/latexParser.js +117 -117
  83. package/lib/utils/arrayEqual.js +13 -0
  84. package/{src → lib}/utils/coin.js +7 -7
  85. package/{src → lib}/utils/random.js +7 -7
  86. package/lib/utils/shuffle.js +15 -0
  87. package/package.json +35 -28
  88. package/nodemon.json +0 -5
  89. package/src/exercises/calcul/addAndSub.js +0 -40
  90. package/src/exercises/calcul/addAndSub.ts +0 -39
  91. package/src/exercises/calcul/fractions/fractionAndIntegerDivision.js +0 -35
  92. package/src/exercises/calcul/fractions/fractionAndIntegerDivision.ts +0 -36
  93. package/src/exercises/calcul/fractions/fractionAndIntegerProduct.js +0 -31
  94. package/src/exercises/calcul/fractions/fractionAndIntegerProduct.ts +0 -32
  95. package/src/exercises/calcul/fractions/fractionAndIntegerSum.js +0 -32
  96. package/src/exercises/calcul/fractions/fractionAndIntegerSum.ts +0 -31
  97. package/src/exercises/calcul/fractions/fractionsDivision.js +0 -29
  98. package/src/exercises/calcul/fractions/fractionsDivision.ts +0 -30
  99. package/src/exercises/calcul/fractions/fractionsProduct.js +0 -29
  100. package/src/exercises/calcul/fractions/fractionsProduct.ts +0 -29
  101. package/src/exercises/calcul/fractions/fractionsSum.js +0 -29
  102. package/src/exercises/calcul/fractions/fractionsSum.ts +0 -28
  103. package/src/exercises/calcul/fractions/simplifyFraction.js +0 -25
  104. package/src/exercises/calcul/fractions/simplifyFraction.ts +0 -24
  105. package/src/exercises/calcul/operationsPriorities.ts +0 -115
  106. package/src/exercises/calcul/rounding/rounding.ts +0 -87
  107. package/src/exercises/calculLitteral/distributivity/allIdentities.ts +0 -26
  108. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.js +0 -31
  109. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.ts +0 -33
  110. package/src/exercises/calculLitteral/distributivity/firstIdentity.js +0 -32
  111. package/src/exercises/calculLitteral/distributivity/firstIdentity.ts +0 -33
  112. package/src/exercises/calculLitteral/distributivity/secondIdentity.js +0 -33
  113. package/src/exercises/calculLitteral/distributivity/secondIdentity.ts +0 -35
  114. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.js +0 -33
  115. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.ts +0 -33
  116. package/src/exercises/calculLitteral/distributivity/thirdIdentity.js +0 -32
  117. package/src/exercises/calculLitteral/distributivity/thirdIdentity.ts +0 -34
  118. package/src/exercises/calculLitteral/equation/equationType1Exercise.js +0 -38
  119. package/src/exercises/calculLitteral/equation/equationType1Exercise.ts +0 -38
  120. package/src/exercises/calculLitteral/equation/equationType2Exercise.js +0 -41
  121. package/src/exercises/calculLitteral/equation/equationType2Exercise.ts +0 -41
  122. package/src/exercises/calculLitteral/equation/equationType3Exercise.js +0 -42
  123. package/src/exercises/calculLitteral/equation/equationType3Exercise.ts +0 -43
  124. package/src/exercises/calculLitteral/equation/equationType4Exercise.js +0 -44
  125. package/src/exercises/calculLitteral/equation/equationType4Exercise.ts +0 -46
  126. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.js +0 -39
  127. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.ts +0 -54
  128. package/src/exercises/exercise.ts +0 -22
  129. package/src/exercises/exercises.js +0 -85
  130. package/src/exercises/exercises.ts +0 -94
  131. package/src/exercises/powers/powersDivision.js +0 -46
  132. package/src/exercises/powers/powersDivision.ts +0 -51
  133. package/src/exercises/powers/powersOfTenToDecimal.js +0 -33
  134. package/src/exercises/powers/powersOfTenToDecimal.ts +0 -37
  135. package/src/exercises/powers/powersPower.js +0 -45
  136. package/src/exercises/powers/powersPower.ts +0 -55
  137. package/src/exercises/powers/powersProduct.js +0 -46
  138. package/src/exercises/powers/powersProduct.ts +0 -51
  139. package/src/exercises/powers/scientificToDecimal.js +0 -38
  140. package/src/exercises/powers/scientificToDecimal.ts +0 -44
  141. package/src/exercises/squareRoots/simpifySquareRoot.ts +0 -27
  142. package/src/exercises/utils/getDistinctQuestions.js +0 -18
  143. package/src/exercises/utils/getDistinctQuestions.ts +0 -14
  144. package/src/index.js +0 -5
  145. package/src/index.ts +0 -13
  146. package/src/mathutils/arithmetic/coprimesOf.js +0 -13
  147. package/src/mathutils/arithmetic/coprimesOf.ts +0 -9
  148. package/src/mathutils/arithmetic/dividersOf.ts +0 -7
  149. package/src/mathutils/arithmetic/gcd.ts +0 -3
  150. package/src/mathutils/arithmetic/isSquare.ts +0 -3
  151. package/src/mathutils/arithmetic/lcd.ts +0 -7
  152. package/src/mathutils/arithmetic/nonCoprimesOf.ts +0 -9
  153. package/src/mathutils/arithmetic/nonDividersOf.ts +0 -12
  154. package/src/mathutils/arithmetic/primeFactors.ts +0 -18
  155. package/src/mathutils/decimals/decimalPartLengthOf.ts +0 -10
  156. package/src/mathutils/random/randint.ts +0 -12
  157. package/src/mathutils/round.ts +0 -5
  158. package/src/numbers/decimals/decimal.ts +0 -140
  159. package/src/numbers/epsilon.ts +0 -7
  160. package/src/numbers/integer/integer.ts +0 -72
  161. package/src/numbers/integer/power.ts +0 -49
  162. package/src/numbers/nombre.ts +0 -15
  163. package/src/numbers/number.js +0 -8
  164. package/src/numbers/rationals/rational.js +0 -128
  165. package/src/numbers/rationals/rational.ts +0 -122
  166. package/src/numbers/reals/real.js +0 -17
  167. package/src/numbers/reals/real.ts +0 -17
  168. package/src/numbers/reals/squareRoot.js +0 -85
  169. package/src/numbers/reals/squareRoot.ts +0 -70
  170. package/src/polynomials/affine.js +0 -71
  171. package/src/polynomials/affine.ts +0 -60
  172. package/src/polynomials/polynomial.js +0 -128
  173. package/src/polynomials/polynomial.ts +0 -137
  174. package/src/sets/discreteSet.js +0 -30
  175. package/src/sets/discreteSet.ts +0 -30
  176. package/src/sets/intervals/intervals.ts +0 -122
  177. package/src/sets/intervals/union.ts +0 -0
  178. package/src/sets/mathSet.js +0 -11
  179. package/src/sets/mathSet.ts +0 -12
  180. package/src/sets/mathSetInterface.js +0 -2
  181. package/src/sets/mathSetInterface.ts +0 -10
  182. package/src/tree/latexParser/latexParse.js +0 -117
  183. package/src/tree/nodes/functions/functionNode.ts +0 -18
  184. package/src/tree/nodes/functions/oppositeNode.js +0 -30
  185. package/src/tree/nodes/functions/oppositeNode.ts +0 -12
  186. package/src/tree/nodes/functions/sqrtNode.js +0 -33
  187. package/src/tree/nodes/functions/sqrtNode.ts +0 -12
  188. package/src/tree/nodes/node.ts +0 -12
  189. package/src/tree/nodes/numbers/numberNode.js +0 -16
  190. package/src/tree/nodes/numbers/numberNode.ts +0 -16
  191. package/src/tree/nodes/operators/addNode.js +0 -33
  192. package/src/tree/nodes/operators/addNode.ts +0 -13
  193. package/src/tree/nodes/operators/divideNode.js +0 -34
  194. package/src/tree/nodes/operators/divideNode.ts +0 -16
  195. package/src/tree/nodes/operators/equalNode.js +0 -30
  196. package/src/tree/nodes/operators/equalNode.ts +0 -11
  197. package/src/tree/nodes/operators/fractionNode.js +0 -34
  198. package/src/tree/nodes/operators/fractionNode.ts +0 -16
  199. package/src/tree/nodes/operators/multiplyNode.js +0 -30
  200. package/src/tree/nodes/operators/multiplyNode.ts +0 -12
  201. package/src/tree/nodes/operators/operatorNode.ts +0 -36
  202. package/src/tree/nodes/operators/oppositeNode.js +0 -18
  203. package/src/tree/nodes/operators/powerNode.js +0 -30
  204. package/src/tree/nodes/operators/powerNode.ts +0 -12
  205. package/src/tree/nodes/operators/substractNode.js +0 -30
  206. package/src/tree/nodes/operators/substractNode.ts +0 -11
  207. package/src/tree/nodes/variables/variableNode.js +0 -17
  208. package/src/tree/nodes/variables/variableNode.ts +0 -15
  209. package/src/tree/parsers/derivateParser.ts +0 -66
  210. package/src/tree/parsers/latexParser.ts +0 -122
  211. package/src/utils/coin.ts +0 -3
  212. package/src/utils/random.ts +0 -3
  213. package/src/utils/randomIn.js +0 -7
  214. package/src/utils/shuffle.js +0 -24
  215. package/src/utils/shuffle.ts +0 -11
  216. package/tsconfig.json +0 -110
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDistinctQuestions = void 0;
4
+ const getDistinctQuestions = (generator, nb) => {
5
+ const res = [];
6
+ for (let i = 0; i < nb; i++) {
7
+ let question;
8
+ do {
9
+ question = generator();
10
+ } while (res.some((q) => q.instruction ? q.instruction === question.instruction :
11
+ q.startStatement === question.startStatement));
12
+ res.push(question);
13
+ }
14
+ return res;
15
+ };
16
+ exports.getDistinctQuestions = getDistinctQuestions;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Point = exports.PointConstructor = void 0;
4
+ const numberNode_1 = require("../tree/nodes/numbers/numberNode");
5
+ const addNode_1 = require("../tree/nodes/operators/addNode");
6
+ const fractionNode_1 = require("../tree/nodes/operators/fractionNode");
7
+ const latexParser_1 = require("../tree/parsers/latexParser");
8
+ class PointConstructor {
9
+ }
10
+ exports.PointConstructor = PointConstructor;
11
+ class Point {
12
+ constructor(name, x, y) {
13
+ this.name = name;
14
+ this.x = x;
15
+ this.y = y;
16
+ }
17
+ toTex() {
18
+ return `${this.name}`;
19
+ }
20
+ toTexWithCoords() {
21
+ return `${this.name}\\left(${(0, latexParser_1.latexParser)(this.x)}; ${(0, latexParser_1.latexParser)(this.y)}\\right)`;
22
+ }
23
+ midpoint(B, name = "I") {
24
+ return new Point(name, new fractionNode_1.FractionNode(new addNode_1.AddNode(this.x, B.x), new numberNode_1.NumberNode(2)), new fractionNode_1.FractionNode(new addNode_1.AddNode(this.y, B.y), new numberNode_1.NumberNode(2)));
25
+ }
26
+ }
27
+ exports.Point = Point;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Vector = exports.VectorConstructor = void 0;
4
+ const addNode_1 = require("../tree/nodes/operators/addNode");
5
+ const multiplyNode_1 = require("../tree/nodes/operators/multiplyNode");
6
+ const substractNode_1 = require("../tree/nodes/operators/substractNode");
7
+ const latexParser_1 = require("../tree/parsers/latexParser");
8
+ class VectorConstructor {
9
+ static fromPoints(origin, end) {
10
+ return new Vector(`${origin.name}${end.name}`, new substractNode_1.SubstractNode(end.x, origin.x), new substractNode_1.SubstractNode(end.y, origin.y));
11
+ }
12
+ }
13
+ exports.VectorConstructor = VectorConstructor;
14
+ class Vector {
15
+ constructor(name, x, y) {
16
+ this.name = name;
17
+ this.tex = `\\overrightarrow{${name}}`;
18
+ this.x = x;
19
+ this.y = y;
20
+ }
21
+ toTex() {
22
+ return `\\overrightarrow{${this.name}}`;
23
+ }
24
+ toTexWithCoords() {
25
+ return `\\overrightarrow{${this.name}}\\begin{pmatrix}${(0, latexParser_1.latexParser)(this.x)} \\\ ${(0, latexParser_1.latexParser)(this.y)} \\end{pmatrix}`;
26
+ }
27
+ scalarProduct(v) {
28
+ return new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(this.x, v.x), new multiplyNode_1.MultiplyNode(this.y, v.y));
29
+ }
30
+ }
31
+ exports.Vector = Vector;
package/lib/index.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exercises = void 0;
4
+ const exercises_1 = require("./exercises/exercises");
5
+ Object.defineProperty(exports, "exercises", { enumerable: true, get: function () { return exercises_1.exercises; } });
6
+ const scalarProductViaCoords_1 = require("./exercises/geometry/vectors/scalarProductViaCoords");
7
+ // exercises.forEach((exo) => {
8
+ // console.log(exo.instruction, exo.generator(10));
9
+ // });
10
+ console.log(scalarProductViaCoords_1.scalarProductViaCoords.generator(10));
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coprimesOf = void 0;
4
+ const gcd_1 = require("./gcd");
5
+ const coprimesOf = (nb) => {
6
+ let coprimes = [];
7
+ for (let i = 2; i <= nb; i++) {
8
+ if ((0, gcd_1.gcd)(nb, i) === 1)
9
+ coprimes.push(i);
10
+ }
11
+ return coprimes;
12
+ };
13
+ exports.coprimesOf = coprimesOf;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dividersOf = void 0;
4
+ const dividersOf = (nb) => {
5
+ let divisors = [];
6
+ for (let i = 1; i <= nb; i++) {
7
+ if (nb % i === 0)
8
+ divisors.push(i);
9
+ }
10
+ return divisors;
11
+ };
12
+ exports.dividersOf = dividersOf;
@@ -1,7 +1,7 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.gcd = void 0;
4
- function gcd(a, b) {
5
- return b ? gcd(b, a % b) : a;
6
- }
7
- exports.gcd = gcd;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gcd = void 0;
4
+ function gcd(a, b) {
5
+ return b ? gcd(b, a % b) : a;
6
+ }
7
+ exports.gcd = gcd;
@@ -1,7 +1,7 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.isSquare = void 0;
4
- var isSquare = function (a) {
5
- return a > 0 && Math.sqrt(a) % 1 === 0;
6
- };
7
- exports.isSquare = isSquare;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSquare = void 0;
4
+ const isSquare = (a) => {
5
+ return a > 0 && Math.sqrt(a) % 1 === 0;
6
+ };
7
+ exports.isSquare = isSquare;
@@ -1,12 +1,12 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.lcd = void 0;
4
- function lcd(a, b) {
5
- var max = Math.max(a, b);
6
- for (var i = max; i < a * b; i++) {
7
- if (i % a === 0 && i % b === 0)
8
- return i;
9
- }
10
- return a * b;
11
- }
12
- exports.lcd = lcd;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lcd = void 0;
4
+ function lcd(a, b) {
5
+ const max = Math.max(a, b);
6
+ for (let i = max; i < a * b; i++) {
7
+ if (i % a === 0 && i % b === 0)
8
+ return i;
9
+ }
10
+ return a * b;
11
+ }
12
+ exports.lcd = lcd;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nonCoprimesOf = void 0;
4
+ const gcd_1 = require("./gcd");
5
+ const nonCoprimesOf = (nb) => {
6
+ let nonCoprimes = [];
7
+ for (let i = 1; i <= nb; i++) {
8
+ if ((0, gcd_1.gcd)(nb, i) !== 1)
9
+ nonCoprimes.push(i);
10
+ }
11
+ return nonCoprimes;
12
+ };
13
+ exports.nonCoprimesOf = nonCoprimesOf;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nonDivisorOf = void 0;
4
+ const dividersOf_1 = require("./dividersOf");
5
+ const nonDivisorOf = (nb) => {
6
+ let nonDividers = [];
7
+ let dividers = (0, dividersOf_1.dividersOf)(nb);
8
+ for (let i = 2; i < nb; i++) {
9
+ if (nb % i !== 0)
10
+ nonDividers.push(i);
11
+ }
12
+ return nonDividers;
13
+ };
14
+ exports.nonDivisorOf = nonDivisorOf;
@@ -1,22 +1,22 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.primeFactors = void 0;
4
- /***
5
- * returns array of prime factors
6
- * e.g 12 -> [2, 2, 3]
7
- */
8
- var primeFactors = function (a) {
9
- var factors = [];
10
- var divisor = 2;
11
- while (a >= 2) {
12
- if (a % divisor === 0) {
13
- factors.push(divisor);
14
- a = a / divisor;
15
- }
16
- else {
17
- divisor++;
18
- }
19
- }
20
- return factors;
21
- };
22
- exports.primeFactors = primeFactors;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.primeFactors = void 0;
4
+ /***
5
+ * returns array of prime factors
6
+ * e.g 12 -> [2, 2, 3]
7
+ */
8
+ const primeFactors = (a) => {
9
+ const factors = [];
10
+ let divisor = 2;
11
+ while (a >= 2) {
12
+ if (a % divisor === 0) {
13
+ factors.push(divisor);
14
+ a = a / divisor;
15
+ }
16
+ else {
17
+ divisor++;
18
+ }
19
+ }
20
+ return factors;
21
+ };
22
+ exports.primeFactors = primeFactors;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decimalPartLengthOf = void 0;
4
+ const decimalPartLengthOf = (x) => {
5
+ function hasFraction(x) {
6
+ return Math.abs(Math.round(x) - x) > 1e-10;
7
+ }
8
+ let count = 0;
9
+ // multiply by increasing powers of 10 until the fractional part is ~ 0
10
+ while (hasFraction(x * 10 ** count) && isFinite(10 ** count))
11
+ count++;
12
+ return count;
13
+ };
14
+ exports.decimalPartLengthOf = decimalPartLengthOf;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distinctRandTupleInt = exports.randTupleInt = void 0;
4
+ const arrayEqual_1 = require("../../utils/arrayEqual");
5
+ const randint_1 = require("./randint");
6
+ /**
7
+ * @param size tuple length
8
+ * @param options
9
+ * @returns array of size nb with contents = randint(from, to, exxcludes)
10
+ */
11
+ const randTupleInt = (size, options) => {
12
+ const res = [];
13
+ for (let i = 0; i < size; i++) {
14
+ res.push((0, randint_1.randint)(options.from, options.to, options.excludes));
15
+ }
16
+ return res;
17
+ };
18
+ exports.randTupleInt = randTupleInt;
19
+ const distinctRandTupleInt = (nb, size, options) => {
20
+ const res = [];
21
+ for (let i = 0; i < nb; i++) {
22
+ let newTuple;
23
+ do {
24
+ newTuple = (0, exports.randTupleInt)(size, options);
25
+ } while (res.some(tuple => (0, arrayEqual_1.arrayEqual)(tuple, newTuple)));
26
+ res.push(newTuple);
27
+ }
28
+ return res;
29
+ };
30
+ exports.distinctRandTupleInt = distinctRandTupleInt;
@@ -1,18 +1,18 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.randint = void 0;
4
- /**
5
- * @returns random [[a, b[[
6
- */
7
- var randint = function (a, b, excludes) {
8
- if (b === undefined)
9
- return Math.floor(Math.random() * a);
10
- if (!excludes)
11
- return a + Math.floor(Math.random() * (b - a));
12
- var res;
13
- do {
14
- res = a + Math.floor(Math.random() * (b - a));
15
- } while (excludes.includes(res));
16
- return res;
17
- };
18
- exports.randint = randint;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.randint = void 0;
4
+ /**
5
+ * @returns random [[a, b[[
6
+ */
7
+ const randint = (a, b, excludes) => {
8
+ if (b === undefined)
9
+ return Math.floor(Math.random() * a);
10
+ if (!excludes)
11
+ return a + Math.floor(Math.random() * (b - a));
12
+ let res;
13
+ do {
14
+ res = a + Math.floor(Math.random() * (b - a));
15
+ } while (excludes.includes(res));
16
+ return res;
17
+ };
18
+ exports.randint = randint;
@@ -1,8 +1,8 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.round = void 0;
4
- var epsilon_1 = require("../numbers/epsilon");
5
- function round(x, precision) {
6
- return Math.round((x + epsilon_1.EPSILON) * Math.pow(10, precision)) / Math.pow(10, precision);
7
- }
8
- exports.round = round;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.round = void 0;
4
+ const epsilon_1 = require("../numbers/epsilon");
5
+ function round(x, precision) {
6
+ return Math.round((x + epsilon_1.EPSILON) * Math.pow(10, precision)) / Math.pow(10, precision);
7
+ }
8
+ exports.round = round;
@@ -1,144 +1,140 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.Decimal = exports.DecimalConstructor = void 0;
4
- var randint_1 = require("../../mathutils/random/randint");
5
- var numberNode_1 = require("../../tree/nodes/numbers/numberNode");
6
- var integer_1 = require("../integer/integer");
7
- var nombre_1 = require("../nombre");
8
- var DecimalConstructor = /** @class */ (function () {
9
- function DecimalConstructor() {
10
- }
11
- DecimalConstructor.randomFracPart = function (precision) {
12
- var decimals = "";
13
- for (var i = 0; i < precision; i++) {
14
- decimals += (0, randint_1.randint)(i === precision - 1 ? 1 : 0, 10);
15
- }
16
- return decimals;
17
- };
18
- DecimalConstructor.random = function (min, max, precision) {
19
- var int = (0, randint_1.randint)(min, max) + "";
20
- var decimals = DecimalConstructor.randomFracPart(precision);
21
- return DecimalConstructor.fromParts(int, decimals);
22
- };
23
- DecimalConstructor.fromParts = function (intPart, decimalPart) {
24
- return new Decimal(Number("" + intPart + "." + decimalPart));
25
- };
26
- return DecimalConstructor;
27
- }());
28
- exports.DecimalConstructor = DecimalConstructor;
29
- var Decimal = /** @class */ (function () {
30
- function Decimal(value) {
31
- this.type = nombre_1.NumberType.Decimal;
32
- this.value = value;
33
- this.tex = value + "";
34
- var _a = (value + "").split("."), intPartString = _a[0], decimalPartString = _a[1];
35
- this.intPart = Number(intPartString);
36
- this.decimalPart = decimalPartString || "";
37
- this.precision = this.decimalPart.length;
38
- }
39
- /**
40
- *
41
- * @param precision 0 = unité, 1 = dixieme, ... , -1 : dizaine
42
- * @returns
43
- */
44
- Decimal.prototype.round = function (precision) {
45
- var intPartString = this.intPart + "";
46
- if (precision < 0) {
47
- if (precision < -intPartString.length)
48
- throw Error("can't round to higher precision");
49
- return new integer_1.Integer(this.intPart).round(-precision);
50
- }
51
- if (precision > this.precision)
52
- throw Error("can't round to higher precision");
53
- if (precision === this.precision)
54
- return this;
55
- var newFracPart = "", newIntPart = "";
56
- var shouldRoundUp = Number(this.decimalPart[precision]) > 4;
57
- if (shouldRoundUp) {
58
- var retenue = true;
59
- var i = precision - 1;
60
- while (retenue) {
61
- if (i > -1) {
62
- var nb = (Number(this.decimalPart[i]) + 1) % 10;
63
- if (nb || newFracPart) {
64
- newFracPart = nb.toString() + newFracPart;
65
- }
66
- if (nb !== 0) {
67
- retenue = false;
68
- for (var j = i - 1; j > -1; j--) {
69
- newFracPart = this.decimalPart[j] + newFracPart;
70
- }
71
- newIntPart = intPartString;
72
- }
73
- else
74
- i--;
75
- }
76
- else {
77
- var nb = (Number(intPartString[i + intPartString.length]) + 1) % 10;
78
- newIntPart = nb + "" + newIntPart;
79
- if (nb !== 0) {
80
- retenue = false;
81
- for (var j = i + intPartString.length - 1; j > -1; j--) {
82
- newIntPart = intPartString[j] + newIntPart;
83
- }
84
- }
85
- else
86
- i--;
87
- }
88
- }
89
- }
90
- else {
91
- var retenue = true;
92
- var i = precision - 1;
93
- while (retenue) {
94
- if (i > -1) {
95
- var nb = Number(this.decimalPart[i]);
96
- if (nb || newFracPart) {
97
- newFracPart = nb.toString() + newFracPart;
98
- }
99
- if (nb !== 0) {
100
- retenue = false;
101
- for (var j = i - 1; j > -1; j--) {
102
- newFracPart = this.decimalPart[j] + newFracPart;
103
- }
104
- newIntPart = intPartString;
105
- }
106
- else
107
- i--;
108
- }
109
- else {
110
- newIntPart = intPartString;
111
- retenue = false;
112
- }
113
- }
114
- }
115
- return DecimalConstructor.fromParts(newIntPart, newFracPart);
116
- };
117
- Decimal.prototype.multiplyByPowerOfTen = function (power) {
118
- var newIntPart = "", newFracPart = "";
119
- if (power > -1) {
120
- newIntPart = this.intPart + "";
121
- for (var i = 0; i < power; i++) {
122
- newIntPart += i > this.decimalPart.length - 1 ? "0" : this.decimalPart[i];
123
- }
124
- newFracPart = this.decimalPart.slice(power);
125
- }
126
- else {
127
- var intPartString = this.intPart + "";
128
- newFracPart = this.decimalPart;
129
- for (var i = intPartString.length - 1; i > intPartString.length - 1 + power; i--) {
130
- newFracPart = (i < 0 ? "0" : intPartString[i]) + newFracPart;
131
- }
132
- if (power + intPartString.length < 1)
133
- newIntPart = "0";
134
- else
135
- newIntPart = intPartString.slice(0, power + intPartString.length);
136
- }
137
- return DecimalConstructor.fromParts(newIntPart, newFracPart);
138
- };
139
- Decimal.prototype.toTree = function () {
140
- return new numberNode_1.NumberNode(this.value);
141
- };
142
- return Decimal;
143
- }());
144
- exports.Decimal = Decimal;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Decimal = exports.DecimalConstructor = void 0;
4
+ const randint_1 = require("../../mathutils/random/randint");
5
+ const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
6
+ const integer_1 = require("../integer/integer");
7
+ const nombre_1 = require("../nombre");
8
+ class DecimalConstructor {
9
+ static randomFracPart(precision) {
10
+ let decimals = "";
11
+ for (let i = 0; i < precision; i++) {
12
+ decimals += (0, randint_1.randint)(i === precision - 1 ? 1 : 0, 10);
13
+ }
14
+ return decimals;
15
+ }
16
+ static random(min, max, precision) {
17
+ const int = (0, randint_1.randint)(min, max) + "";
18
+ const decimals = DecimalConstructor.randomFracPart(precision);
19
+ return DecimalConstructor.fromParts(int, decimals);
20
+ }
21
+ static fromParts(intPart, decimalPart) {
22
+ return new Decimal(Number("" + intPart + "." + decimalPart));
23
+ }
24
+ }
25
+ exports.DecimalConstructor = DecimalConstructor;
26
+ class Decimal {
27
+ constructor(value) {
28
+ this.type = nombre_1.NumberType.Decimal;
29
+ this.value = value;
30
+ this.tex = value + "";
31
+ let [intPartString, decimalPartString] = (value + "").split(".");
32
+ this.intPart = Number(intPartString);
33
+ this.decimalPart = decimalPartString || "";
34
+ this.precision = this.decimalPart.length;
35
+ }
36
+ /**
37
+ *
38
+ * @param precision 0 = unité, 1 = dixieme, ... , -1 : dizaine
39
+ * @returns
40
+ */
41
+ round(precision) {
42
+ const intPartString = this.intPart + "";
43
+ if (precision < 0) {
44
+ if (precision < -intPartString.length)
45
+ throw Error("can't round to higher precision");
46
+ return new integer_1.Integer(this.intPart).round(-precision);
47
+ }
48
+ if (precision > this.precision)
49
+ throw Error("can't round to higher precision");
50
+ if (precision === this.precision)
51
+ return this;
52
+ let newFracPart = "", newIntPart = "";
53
+ const shouldRoundUp = Number(this.decimalPart[precision]) > 4;
54
+ if (shouldRoundUp) {
55
+ let retenue = true;
56
+ let i = precision - 1;
57
+ while (retenue) {
58
+ if (i > -1) {
59
+ const nb = (Number(this.decimalPart[i]) + 1) % 10;
60
+ if (nb || newFracPart) {
61
+ newFracPart = nb.toString() + newFracPart;
62
+ }
63
+ if (nb !== 0) {
64
+ retenue = false;
65
+ for (let j = i - 1; j > -1; j--) {
66
+ newFracPart = this.decimalPart[j] + newFracPart;
67
+ }
68
+ newIntPart = intPartString;
69
+ }
70
+ else
71
+ i--;
72
+ }
73
+ else {
74
+ const nb = (Number(intPartString[i + intPartString.length]) + 1) % 10;
75
+ newIntPart = nb + "" + newIntPart;
76
+ if (nb !== 0) {
77
+ retenue = false;
78
+ for (let j = i + intPartString.length - 1; j > -1; j--) {
79
+ newIntPart = intPartString[j] + newIntPart;
80
+ }
81
+ }
82
+ else
83
+ i--;
84
+ }
85
+ }
86
+ }
87
+ else {
88
+ let retenue = true;
89
+ let i = precision - 1;
90
+ while (retenue) {
91
+ if (i > -1) {
92
+ const nb = Number(this.decimalPart[i]);
93
+ if (nb || newFracPart) {
94
+ newFracPart = nb.toString() + newFracPart;
95
+ }
96
+ if (nb !== 0) {
97
+ retenue = false;
98
+ for (let j = i - 1; j > -1; j--) {
99
+ newFracPart = this.decimalPart[j] + newFracPart;
100
+ }
101
+ newIntPart = intPartString;
102
+ }
103
+ else
104
+ i--;
105
+ }
106
+ else {
107
+ newIntPart = intPartString;
108
+ retenue = false;
109
+ }
110
+ }
111
+ }
112
+ return DecimalConstructor.fromParts(newIntPart, newFracPart);
113
+ }
114
+ multiplyByPowerOfTen(power) {
115
+ let newIntPart = "", newFracPart = "";
116
+ if (power > -1) {
117
+ newIntPart = this.intPart + "";
118
+ for (let i = 0; i < power; i++) {
119
+ newIntPart += i > this.decimalPart.length - 1 ? "0" : this.decimalPart[i];
120
+ }
121
+ newFracPart = this.decimalPart.slice(power);
122
+ }
123
+ else {
124
+ const intPartString = this.intPart + "";
125
+ newFracPart = this.decimalPart;
126
+ for (let i = intPartString.length - 1; i > intPartString.length - 1 + power; i--) {
127
+ newFracPart = (i < 0 ? "0" : intPartString[i]) + newFracPart;
128
+ }
129
+ if (power + intPartString.length < 1)
130
+ newIntPart = "0";
131
+ else
132
+ newIntPart = intPartString.slice(0, power + intPartString.length);
133
+ }
134
+ return DecimalConstructor.fromParts(newIntPart, newFracPart);
135
+ }
136
+ toTree() {
137
+ return new numberNode_1.NumberNode(this.value);
138
+ }
139
+ }
140
+ exports.Decimal = Decimal;