math-exercises 1.2.8 → 1.2.10

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
@@ -1,38 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.getScientificToDecimalQuestion = exports.scientificToDecimal = void 0;
4
- var randint_1 = require("../../mathutils/random/randint");
5
- var decimal_1 = require("../../numbers/decimals/decimal");
6
- var integer_1 = require("../../numbers/integer/integer");
7
- var latexParser_1 = require("../../tree/parsers/latexParser");
8
- var numberNode_1 = require("../../tree/nodes/numbers/numberNode");
9
- var multiplyNode_1 = require("../../tree/nodes/operators/multiplyNode");
10
- var powerNode_1 = require("../../tree/nodes/operators/powerNode");
11
- var getDistinctQuestions_1 = require("../utils/getDistinctQuestions");
12
- /**
13
- * a*10^x vers décimal
14
- * */
15
- exports.scientificToDecimal = {
16
- id: "scientificToDecimal",
17
- connector: "=",
18
- instruction: "Donner l'écriture décimale de :",
19
- label: "Ecriture décimale de $a\\times 10^x$",
20
- levels: ["5", "4", "3", "2"],
21
- section: "Puissances",
22
- isSingleStep: true,
23
- generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getScientificToDecimalQuestion, nb); }
24
- };
25
- function getScientificToDecimalQuestion() {
26
- var randPower = (0, randint_1.randint)(-6, 8);
27
- var int = integer_1.IntegerConstructor.random((0, randint_1.randint)(1, 4));
28
- var fracPart = decimal_1.DecimalConstructor.randomFracPart((0, randint_1.randint)(0, 4));
29
- var randDecimal = decimal_1.DecimalConstructor.fromParts(int + "", fracPart);
30
- var statement = new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(randDecimal.value), new powerNode_1.PowerNode(new numberNode_1.NumberNode(10), new numberNode_1.NumberNode(randPower)));
31
- var answerTree = randDecimal.multiplyByPowerOfTen(randPower).toTree();
32
- var question = {
33
- startStatement: (0, latexParser_1.latexParser)(statement),
34
- answer: (0, latexParser_1.latexParser)(answerTree)
35
- };
36
- return question;
37
- }
38
- exports.getScientificToDecimalQuestion = getScientificToDecimalQuestion;
@@ -1,44 +0,0 @@
1
- import { randint } from "../../mathutils/random/randint";
2
- import { DecimalConstructor } from "../../numbers/decimals/decimal";
3
- import { IntegerConstructor } from "../../numbers/integer/integer";
4
- import { Power } from "../../numbers/integer/power";
5
- import { latexParser } from "../../tree/parsers/latexParser";
6
- import { NumberNode } from "../../tree/nodes/numbers/numberNode";
7
- import { FractionNode } from "../../tree/nodes/operators/fractionNode";
8
- import { MultiplyNode } from "../../tree/nodes/operators/multiplyNode";
9
- import { PowerNode } from "../../tree/nodes/operators/powerNode";
10
- import { Exercise, Question } from "../exercise";
11
- import { getDistinctQuestions } from "../utils/getDistinctQuestions";
12
-
13
- /**
14
- * a*10^x vers décimal
15
- * */
16
-
17
- export const scientificToDecimal: Exercise = {
18
- id: "scientificToDecimal",
19
- connector: "=",
20
- instruction: "Donner l'écriture décimale de :",
21
- label: "Ecriture décimale de $a\\times 10^x$",
22
- levels: ["5", "4", "3", "2"],
23
- section: "Puissances",
24
- isSingleStep: true,
25
- generator: (nb: number) => getDistinctQuestions(getScientificToDecimalQuestion, nb),
26
- };
27
-
28
- export function getScientificToDecimalQuestion(): Question {
29
- const randPower = randint(-6, 8);
30
- const int = IntegerConstructor.random(randint(1, 4));
31
- const fracPart = DecimalConstructor.randomFracPart(randint(0, 4));
32
- const randDecimal = DecimalConstructor.fromParts(int + "", fracPart);
33
- const statement = new MultiplyNode(
34
- new NumberNode(randDecimal.value),
35
- new PowerNode(new NumberNode(10), new NumberNode(randPower))
36
- );
37
- const answerTree = randDecimal.multiplyByPowerOfTen(randPower).toTree();
38
-
39
- const question: Question = {
40
- startStatement: latexParser(statement),
41
- answer: latexParser(answerTree),
42
- };
43
- return question;
44
- }
@@ -1,27 +0,0 @@
1
- import { SquareRootConstructor } from "../../numbers/reals/squareRoot";
2
- import { latexParser } from "../../tree/parsers/latexParser";
3
- import { Exercise, Question } from "../exercise";
4
- import { getDistinctQuestions } from "../utils/getDistinctQuestions";
5
-
6
- export const simplifySquareRoot: Exercise = {
7
- id: "simplifySqrt",
8
- connector: "=",
9
- instruction: "Simplifier :",
10
- label: "Simplification de racines carrées",
11
- levels: ["3", "2", "1"],
12
- isSingleStep: false,
13
- section: "Racines carrées",
14
- generator: (nb: number) => getDistinctQuestions(getSimplifySquareRoot, nb),
15
- };
16
-
17
- export function getSimplifySquareRoot(): Question {
18
- const squareRoot = SquareRootConstructor.randomSimplifiable({
19
- allowPerfectSquare: false,
20
- maxSquare: 11,
21
- });
22
- const question: Question = {
23
- startStatement: latexParser(squareRoot.toTree()),
24
- answer: latexParser(squareRoot.simplify().toTree()),
25
- };
26
- return question;
27
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.getDistinctQuestions = void 0;
4
- var getDistinctQuestions = function (generator, nb) {
5
- var res = [];
6
- var _loop_1 = function (i) {
7
- var question;
8
- do {
9
- question = generator();
10
- } while (res.some(function (q) { return q.startStatement === question.startStatement; }));
11
- res.push(question);
12
- };
13
- for (var i = 0; i < nb; i++) {
14
- _loop_1(i);
15
- }
16
- return res;
17
- };
18
- exports.getDistinctQuestions = getDistinctQuestions;
@@ -1,14 +0,0 @@
1
- import { Question } from "../exercise";
2
- export const getDistinctQuestions = (generator: Function, nb: number): Question[] => {
3
- const res: Question[] = [];
4
-
5
- for (let i = 0; i < nb; i++) {
6
- let question: Question;
7
-
8
- do {
9
- question = generator();
10
- } while (res.some((q) => q.startStatement === question.startStatement));
11
- res.push(question);
12
- }
13
- return res;
14
- };
package/src/index.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.exercises = void 0;
4
- var exercises_1 = require("./exercises/exercises");
5
- exports.exercises = exercises_1.exercises;
package/src/index.ts DELETED
@@ -1,13 +0,0 @@
1
- import { operationsPriorities } from "./exercises/calcul/operationsPriorities";
2
- import { exercises } from "./exercises/exercises";
3
- import { latexParser } from "./tree/parsers/latexParser";
4
- import { NumberNode } from "./tree/nodes/numbers/numberNode";
5
- import { MultiplyNode } from "./tree/nodes/operators/multiplyNode";
6
- import { Polynomial } from "./polynomials/polynomial";
7
- import { derivateParser } from "./tree/parsers/derivateParser";
8
-
9
- // exercises.forEach((exo) => {
10
- // console.log(exo.instruction, exo.generator(10));
11
- // });
12
-
13
- export { exercises };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.coprimesOf = void 0;
4
- var gcd_1 = require("./gcd");
5
- var coprimesOf = function (nb) {
6
- var coprimes = [];
7
- for (var 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;
@@ -1,9 +0,0 @@
1
- import { gcd } from "./gcd";
2
-
3
- export const coprimesOf = (nb: number) => {
4
- let coprimes = [];
5
- for (let i = 2; i <= nb; i++) {
6
- if (gcd(nb, i) === 1) coprimes.push(i);
7
- }
8
- return coprimes;
9
- };
@@ -1,7 +0,0 @@
1
- export const dividersOf = (nb: number) => {
2
- let divisors = [];
3
- for (let i = 1; i <= nb; i++) {
4
- if (nb % i === 0) divisors.push(i);
5
- }
6
- return divisors;
7
- };
@@ -1,3 +0,0 @@
1
- export function gcd(a: number, b: number): number {
2
- return b ? gcd(b, a % b) : a;
3
- }
@@ -1,3 +0,0 @@
1
- export const isSquare = (a: number): boolean => {
2
- return a > 0 && Math.sqrt(a) % 1 === 0;
3
- };
@@ -1,7 +0,0 @@
1
- export function lcd(a: number, b: number) {
2
- const max = Math.max(a, b);
3
- for (let i = max; i < a * b; i++) {
4
- if (i % a === 0 && i % b === 0) return i;
5
- }
6
- return a * b;
7
- }
@@ -1,9 +0,0 @@
1
- import { gcd } from "./gcd";
2
-
3
- export const nonCoprimesOf = (nb: number) => {
4
- let nonCoprimes = [];
5
- for (let i = 1; i <= nb; i++) {
6
- if (gcd(nb, i) !== 1) nonCoprimes.push(i);
7
- }
8
- return nonCoprimes;
9
- };
@@ -1,12 +0,0 @@
1
- import { dividersOf } from "./dividersOf";
2
-
3
- export const nonDivisorOf = (nb: number) => {
4
- let nonDividers = [];
5
- let dividers = dividersOf(nb);
6
-
7
- for (let i = 2; i < nb; i++) {
8
- if (nb % i !== 0) nonDividers.push(i);
9
- }
10
-
11
- return nonDividers;
12
- };
@@ -1,18 +0,0 @@
1
- /***
2
- * returns array of prime factors
3
- * e.g 12 -> [2, 2, 3]
4
- */
5
- export const primeFactors = (a: number): number[] => {
6
- const factors: number[] = [];
7
- let divisor = 2;
8
-
9
- while (a >= 2) {
10
- if (a % divisor === 0) {
11
- factors.push(divisor);
12
- a = a / divisor;
13
- } else {
14
- divisor++;
15
- }
16
- }
17
- return factors;
18
- };
@@ -1,10 +0,0 @@
1
- export const decimalPartLengthOf = (x: number) => {
2
- function hasFraction(x: number) {
3
- return Math.abs(Math.round(x) - x) > 1e-10;
4
- }
5
-
6
- let count = 0;
7
- // multiply by increasing powers of 10 until the fractional part is ~ 0
8
- while (hasFraction(x * 10 ** count) && isFinite(10 ** count)) count++;
9
- return count;
10
- };
@@ -1,12 +0,0 @@
1
- /**
2
- * @returns random [[a, b[[
3
- */
4
- export const randint = (a: number, b?: number, excludes?: number[]): number => {
5
- if (b === undefined) return Math.floor(Math.random() * a);
6
- if (!excludes) return a + Math.floor(Math.random() * (b - a));
7
- let res;
8
- do {
9
- res = a + Math.floor(Math.random() * (b - a));
10
- } while (excludes.includes(res));
11
- return res;
12
- };
@@ -1,5 +0,0 @@
1
- import { EPSILON } from "../numbers/epsilon";
2
-
3
- export function round(x: number, precision: number): number {
4
- return Math.round((x + EPSILON) * Math.pow(10, precision)) / Math.pow(10, precision);
5
- }
@@ -1,140 +0,0 @@
1
- import { randint } from "../../mathutils/random/randint";
2
- import { Node } from "../../tree/nodes/node";
3
- import { NumberNode } from "../../tree/nodes/numbers/numberNode";
4
- import { Integer } from "../integer/integer";
5
- import { Nombre, NumberType } from "../nombre";
6
-
7
- export abstract class DecimalConstructor {
8
- static randomFracPart(precision: number): string {
9
- let decimals = "";
10
- for (let i = 0; i < precision; i++) {
11
- decimals += randint(i === precision - 1 ? 1 : 0, 10);
12
- }
13
- return decimals;
14
- }
15
-
16
- static random(min: number, max: number, precision: number): Decimal {
17
- const int = randint(min, max) + "";
18
- const decimals = DecimalConstructor.randomFracPart(precision);
19
- return DecimalConstructor.fromParts(int, decimals);
20
- }
21
- static fromParts(intPart: string, decimalPart: string): Decimal {
22
- return new Decimal(Number("" + intPart + "." + decimalPart));
23
- }
24
- }
25
-
26
- export class Decimal implements Nombre {
27
- value: number;
28
- tex: string;
29
- type = NumberType.Decimal;
30
- precision: number;
31
- intPart: number;
32
- decimalPart: string;
33
- constructor(value: number) {
34
- this.value = value;
35
- this.tex = value + "";
36
- let [intPartString, decimalPartString] = (value + "").split(".");
37
- this.intPart = Number(intPartString);
38
- this.decimalPart = decimalPartString || "";
39
- this.precision = this.decimalPart.length;
40
- }
41
-
42
- /**
43
- *
44
- * @param precision 0 = unité, 1 = dixieme, ... , -1 : dizaine
45
- * @returns
46
- */
47
- round(precision: number): Nombre {
48
- const intPartString = this.intPart + "";
49
-
50
- if (precision < 0) {
51
- if (precision < -intPartString.length) throw Error("can't round to higher precision");
52
- return new Integer(this.intPart).round(-precision);
53
- }
54
-
55
- if (precision > this.precision) throw Error("can't round to higher precision");
56
- if (precision === this.precision) return this;
57
-
58
- let newFracPart = "",
59
- newIntPart = "";
60
-
61
- const shouldRoundUp = Number(this.decimalPart[precision]) > 4;
62
-
63
- if (shouldRoundUp) {
64
- let retenue = true;
65
- let i = precision - 1;
66
- while (retenue) {
67
- if (i > -1) {
68
- const nb = (Number(this.decimalPart[i]) + 1) % 10;
69
- if (nb || newFracPart) {
70
- newFracPart = nb.toString() + newFracPart;
71
- }
72
- if (nb !== 0) {
73
- retenue = false;
74
- for (let j = i - 1; j > -1; j--) {
75
- newFracPart = this.decimalPart[j] + newFracPart;
76
- }
77
- newIntPart = intPartString;
78
- } else i--;
79
- } else {
80
- const nb = (Number(intPartString[i + intPartString.length]) + 1) % 10;
81
- newIntPart = nb + "" + newIntPart;
82
- if (nb !== 0) {
83
- retenue = false;
84
- for (let j = i + intPartString.length - 1; j > -1; j--) {
85
- newIntPart = intPartString[j] + newIntPart;
86
- }
87
- } else i--;
88
- }
89
- }
90
- } else {
91
- let retenue = true;
92
- let i = precision - 1;
93
- while (retenue) {
94
- if (i > -1) {
95
- const nb = Number(this.decimalPart[i]);
96
- if (nb || newFracPart) {
97
- newFracPart = nb.toString() + newFracPart;
98
- }
99
- if (nb !== 0) {
100
- retenue = false;
101
- for (let j = i - 1; j > -1; j--) {
102
- newFracPart = this.decimalPart[j] + newFracPart;
103
- }
104
- newIntPart = intPartString;
105
- } else i--;
106
- } else {
107
- newIntPart = intPartString;
108
- retenue = false;
109
- }
110
- }
111
- }
112
- return DecimalConstructor.fromParts(newIntPart, newFracPart);
113
- }
114
-
115
- multiplyByPowerOfTen(power: number) {
116
- let newIntPart = "",
117
- newFracPart = "";
118
-
119
- if (power > -1) {
120
- newIntPart = this.intPart + "";
121
- for (let i = 0; i < power; i++) {
122
- newIntPart += i > this.decimalPart.length - 1 ? "0" : this.decimalPart[i];
123
- }
124
- newFracPart = this.decimalPart.slice(power);
125
- } else {
126
- const intPartString = this.intPart + "";
127
- newFracPart = this.decimalPart;
128
- for (let i = intPartString.length - 1; i > intPartString.length - 1 + power; i--) {
129
- newFracPart = (i < 0 ? "0" : intPartString[i]) + newFracPart;
130
- }
131
- if (power + intPartString.length < 1) newIntPart = "0";
132
- else newIntPart = intPartString.slice(0, power + intPartString.length);
133
- }
134
- return DecimalConstructor.fromParts(newIntPart, newFracPart);
135
- }
136
-
137
- toTree(): Node {
138
- return new NumberNode(this.value);
139
- }
140
- }
@@ -1,7 +0,0 @@
1
- function getEpsilon() {
2
- var e = 1.0;
3
- while (1.0 + 0.5 * e !== 1.0) e *= 0.5;
4
- return e;
5
- }
6
-
7
- export const EPSILON = getEpsilon();
@@ -1,72 +0,0 @@
1
- import { randint } from "../../mathutils/random/randint";
2
- import { Node } from "../../tree/nodes/node";
3
- import { NumberNode } from "../../tree/nodes/numbers/numberNode";
4
- import { Nombre, NumberType } from "../nombre";
5
- import { Rational } from "../rationals/rational";
6
-
7
- export abstract class IntegerConstructor {
8
- static random(nbOfDigits: number) {
9
- return randint(0, 10 ** nbOfDigits);
10
- }
11
- }
12
-
13
- export class Integer implements Nombre {
14
- value: number;
15
- tex: string;
16
- type: NumberType;
17
-
18
- constructor(value: number, tex?: string) {
19
- this.value = value;
20
- this.tex = tex || value + "";
21
- this.type = NumberType.Integer;
22
- }
23
-
24
- toTree(): Node {
25
- return new NumberNode(this.value, this.tex);
26
- }
27
-
28
- round(precision: number) {
29
- const intString = this.value + "";
30
-
31
- if (precision >= intString.length || precision < 1) throw Error("can't round to higher precision");
32
-
33
- let newInt = "";
34
- const shouldRoundUp = Number(intString[intString.length - precision]) > 4;
35
- if (shouldRoundUp) {
36
- for (let i = 0; i < precision; i++) {
37
- newInt += "0";
38
- }
39
- let retenue = true;
40
- let i = intString.length - precision - 1;
41
-
42
- while (retenue) {
43
- const nb = (Number(intString[i]) + 1) % 10;
44
- newInt = "" + nb + newInt;
45
- if (nb === 0) {
46
- i--;
47
- } else {
48
- retenue = false;
49
- for (let j = i - 1; j > -1; j--) {
50
- newInt = intString[j] + newInt;
51
- }
52
- }
53
- }
54
- } else {
55
- for (let i = 0; i < intString.length; i++) {
56
- newInt += i < intString.length - precision ? intString[i] : "0";
57
- }
58
- }
59
- return new Integer(Number(newInt));
60
- }
61
- divide(nb: Nombre): Nombre {
62
- switch (nb.type) {
63
- case NumberType.Integer:
64
- return new Rational(this.value, nb.value).simplify();
65
- case NumberType.Rational:
66
- const rational = nb as Rational;
67
- return new Rational(this.value * rational.denum, rational.num).simplify();
68
- default:
69
- throw Error("not implemented");
70
- }
71
- }
72
- }
@@ -1,49 +0,0 @@
1
- import { Node } from "../../tree/nodes/node";
2
- import { NumberNode } from "../../tree/nodes/numbers/numberNode";
3
- import { PowerNode } from "../../tree/nodes/operators/powerNode";
4
- import { Nombre, NumberType } from "../nombre";
5
- import { Integer } from "./integer";
6
-
7
- export class Power implements Nombre {
8
- value: number;
9
- tex: string;
10
- type: NumberType;
11
- operand: number;
12
- power: number;
13
- constructor(a: number, b: number) {
14
- this.operand = a;
15
- this.power = b;
16
- this.value = Math.pow(a, b);
17
- this.tex = `${a}^{${b}}`;
18
- this.type = b < 0 ? NumberType.Rational : NumberType.Integer;
19
- }
20
- simplify(): Node {
21
- if (this.power === 0) return new NumberNode(1);
22
- if (this.power === 1) return new NumberNode(this.operand);
23
- if (this.operand === 1) return new NumberNode(1);
24
- if (this.operand === 0) return new NumberNode(0);
25
- if (this.operand === -1) return new NumberNode(this.power % 2 === 0 ? 1 : -1);
26
- return this.toTree();
27
- }
28
- toDecimalWriting(): Nombre {
29
- if (this.operand !== 10) throw Error("only implemented for powers of ten so far");
30
- let s = "";
31
- if (this.power > -1) {
32
- s += "1";
33
- for (let i = 0; i < this.power; i++) {
34
- s += 0;
35
- }
36
- } else {
37
- s += "1";
38
- for (let i = 1; i < Math.abs(this.power); i++) {
39
- s = "0" + s;
40
- }
41
- s = "0." + s;
42
- }
43
-
44
- return new Integer(Number(s), s);
45
- }
46
- toTree(): Node {
47
- return new PowerNode(new NumberNode(this.operand), new NumberNode(this.power));
48
- }
49
- }
@@ -1,15 +0,0 @@
1
- import { Node } from "../tree/nodes/node";
2
- import { NumberNode } from "../tree/nodes/numbers/numberNode";
3
-
4
- export enum NumberType {
5
- Integer,
6
- Decimal,
7
- Rational,
8
- Real,
9
- }
10
- export interface Nombre {
11
- value: number;
12
- tex: string;
13
- type: NumberType;
14
- toTree: () => Node;
15
- }
@@ -1,8 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.NumberType = void 0;
4
- var NumberType;
5
- (function (NumberType) {
6
- NumberType[NumberType["Integer"] = 0] = "Integer";
7
- NumberType[NumberType["Real"] = 1] = "Real";
8
- })(NumberType = exports.NumberType || (exports.NumberType = {}));