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,60 +1,60 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.derivateParser = void 0;
4
- var node_1 = require("../nodes/node");
5
- var numberNode_1 = require("../nodes/numbers/numberNode");
6
- var powerNode_1 = require("../nodes/operators/powerNode");
7
- var addNode_1 = require("../nodes/operators/addNode");
8
- var fractionNode_1 = require("../nodes/operators/fractionNode");
9
- var multiplyNode_1 = require("../nodes/operators/multiplyNode");
10
- var operatorNode_1 = require("../nodes/operators/operatorNode");
11
- var substractNode_1 = require("../nodes/operators/substractNode");
12
- var functionNode_1 = require("../nodes/functions/functionNode");
13
- var sqrtNode_1 = require("../nodes/functions/sqrtNode");
14
- var oppositeNode_1 = require("../nodes/functions/oppositeNode");
15
- function derivateParser(node) {
16
- if (!node)
17
- throw Error("encountered a null node ??");
18
- switch (node.type) {
19
- case node_1.NodeType.variable:
20
- return new numberNode_1.NumberNode(1);
21
- case node_1.NodeType.number:
22
- return new numberNode_1.NumberNode(0);
23
- case node_1.NodeType.operator:
24
- var operatorNode = node;
25
- var u = operatorNode.leftChild;
26
- var v = operatorNode.rightChild;
27
- switch (operatorNode.id) {
28
- case operatorNode_1.OperatorIds.add:
29
- return new addNode_1.AddNode(derivateParser(u), derivateParser(v));
30
- case operatorNode_1.OperatorIds.substract: {
31
- return new substractNode_1.SubstractNode(derivateParser(u), derivateParser(v));
32
- }
33
- case operatorNode_1.OperatorIds.multiply: {
34
- return new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(derivateParser(u), v), new multiplyNode_1.MultiplyNode(u, derivateParser(v)));
35
- }
36
- case operatorNode_1.OperatorIds.divide:
37
- case operatorNode_1.OperatorIds.fraction:
38
- return new fractionNode_1.FractionNode(new substractNode_1.SubstractNode(new multiplyNode_1.MultiplyNode(derivateParser(u), v), new multiplyNode_1.MultiplyNode(u, derivateParser(v))), new powerNode_1.PowerNode(v, new numberNode_1.NumberNode(2)));
39
- case operatorNode_1.OperatorIds.power: {
40
- var operatorNode_2 = node;
41
- var n = operatorNode_2.rightChild;
42
- var u_1 = operatorNode_2.leftChild;
43
- return new multiplyNode_1.MultiplyNode(n, new multiplyNode_1.MultiplyNode(derivateParser(u_1), new powerNode_1.PowerNode(u_1, new numberNode_1.NumberNode(n.value - 1))));
44
- }
45
- }
46
- case node_1.NodeType["function"]: {
47
- var functionNode = node;
48
- var child = functionNode.child;
49
- switch (functionNode.id) {
50
- case functionNode_1.FunctionsIds.sqrt: {
51
- return new fractionNode_1.FractionNode(derivateParser(child), new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(2), new sqrtNode_1.SqrtNode(child)));
52
- }
53
- case functionNode_1.FunctionsIds.opposite: {
54
- return new oppositeNode_1.OppositeNode(derivateParser(child));
55
- }
56
- }
57
- }
58
- }
59
- }
60
- exports.derivateParser = derivateParser;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.derivateParser = void 0;
4
+ const node_1 = require("../nodes/node");
5
+ const numberNode_1 = require("../nodes/numbers/numberNode");
6
+ const powerNode_1 = require("../nodes/operators/powerNode");
7
+ const addNode_1 = require("../nodes/operators/addNode");
8
+ const fractionNode_1 = require("../nodes/operators/fractionNode");
9
+ const multiplyNode_1 = require("../nodes/operators/multiplyNode");
10
+ const operatorNode_1 = require("../nodes/operators/operatorNode");
11
+ const substractNode_1 = require("../nodes/operators/substractNode");
12
+ const functionNode_1 = require("../nodes/functions/functionNode");
13
+ const sqrtNode_1 = require("../nodes/functions/sqrtNode");
14
+ const oppositeNode_1 = require("../nodes/functions/oppositeNode");
15
+ function derivateParser(node) {
16
+ if (!node)
17
+ throw Error("encountered a null node ??");
18
+ switch (node.type) {
19
+ case node_1.NodeType.variable:
20
+ return new numberNode_1.NumberNode(1);
21
+ case node_1.NodeType.number:
22
+ return new numberNode_1.NumberNode(0);
23
+ case node_1.NodeType.operator:
24
+ const operatorNode = node;
25
+ const u = operatorNode.leftChild;
26
+ const v = operatorNode.rightChild;
27
+ switch (operatorNode.id) {
28
+ case operatorNode_1.OperatorIds.add:
29
+ return new addNode_1.AddNode(derivateParser(u), derivateParser(v));
30
+ case operatorNode_1.OperatorIds.substract: {
31
+ return new substractNode_1.SubstractNode(derivateParser(u), derivateParser(v));
32
+ }
33
+ case operatorNode_1.OperatorIds.multiply: {
34
+ return new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(derivateParser(u), v), new multiplyNode_1.MultiplyNode(u, derivateParser(v)));
35
+ }
36
+ case operatorNode_1.OperatorIds.divide:
37
+ case operatorNode_1.OperatorIds.fraction:
38
+ return new fractionNode_1.FractionNode(new substractNode_1.SubstractNode(new multiplyNode_1.MultiplyNode(derivateParser(u), v), new multiplyNode_1.MultiplyNode(u, derivateParser(v))), new powerNode_1.PowerNode(v, new numberNode_1.NumberNode(2)));
39
+ case operatorNode_1.OperatorIds.power: {
40
+ const operatorNode = node;
41
+ const n = operatorNode.rightChild;
42
+ const u = operatorNode.leftChild;
43
+ return new multiplyNode_1.MultiplyNode(n, new multiplyNode_1.MultiplyNode(derivateParser(u), new powerNode_1.PowerNode(u, new numberNode_1.NumberNode(n.value - 1))));
44
+ }
45
+ }
46
+ case node_1.NodeType.function: {
47
+ const functionNode = node;
48
+ const child = functionNode.child;
49
+ switch (functionNode.id) {
50
+ case functionNode_1.FunctionsIds.sqrt: {
51
+ return new fractionNode_1.FractionNode(derivateParser(child), new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(2), new sqrtNode_1.SqrtNode(child)));
52
+ }
53
+ case functionNode_1.FunctionsIds.opposite: {
54
+ return new oppositeNode_1.OppositeNode(derivateParser(child));
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ exports.derivateParser = derivateParser;
@@ -1,117 +1,117 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.latexParser = void 0;
4
- var functionNode_1 = require("../nodes/functions/functionNode");
5
- var node_1 = require("../nodes/node");
6
- var operatorNode_1 = require("../nodes/operators/operatorNode");
7
- function latexParser(node) {
8
- if (!node) {
9
- console.log("parsing a null node ???");
10
- return "";
11
- }
12
- switch (node.type) {
13
- case node_1.NodeType.variable:
14
- return node.tex;
15
- case node_1.NodeType.number:
16
- return node.tex;
17
- case node_1.NodeType.operator:
18
- var operatorNode = node;
19
- var rightTex = latexParser(operatorNode.rightChild);
20
- var leftTex = latexParser(operatorNode.leftChild);
21
- var leftChild = operatorNode.leftChild, rightChild = operatorNode.rightChild;
22
- switch (operatorNode.id) {
23
- case operatorNode_1.OperatorIds.add:
24
- return "".concat(leftTex, " ").concat(rightTex[0] === "-" ? "" : "+ ").concat(rightTex);
25
- case operatorNode_1.OperatorIds.substract: {
26
- var needBrackets = (rightChild.type === node_1.NodeType.operator &&
27
- [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(rightChild.id)) ||
28
- rightTex[0] === "-";
29
- if (needBrackets)
30
- rightTex = "(".concat(rightTex, ")");
31
- return "".concat(leftTex, " - ").concat(rightTex);
32
- }
33
- case operatorNode_1.OperatorIds.multiply: {
34
- if (leftChild.type === node_1.NodeType.operator) {
35
- if ([operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract, operatorNode_1.OperatorIds.divide].includes(leftChild.id))
36
- leftTex = "(".concat(leftTex, ")");
37
- }
38
- var needBrackets = rightTex[0] === "-";
39
- if (rightChild.type === node_1.NodeType.operator) {
40
- var operatorRightChild = rightChild;
41
- needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorRightChild.id));
42
- }
43
- if (needBrackets)
44
- rightTex = "(".concat(rightTex, ")");
45
- // permet de gérer le cas 3*2^x
46
- var showTimesSign = !isNaN(+rightTex[0]) || rightChild.type === node_1.NodeType.number;
47
- if (rightChild.type === node_1.NodeType.operator) {
48
- var operatorRightChild = rightChild;
49
- showTimesSign || (showTimesSign = [operatorNode_1.OperatorIds.fraction].includes(operatorRightChild.id));
50
- }
51
- return "".concat(leftTex).concat(showTimesSign ? "\\times " : "").concat(rightTex);
52
- }
53
- case operatorNode_1.OperatorIds.divide: {
54
- if (leftChild.type === node_1.NodeType.operator) {
55
- if ([operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract, operatorNode_1.OperatorIds.multiply].includes(leftChild.id))
56
- leftTex = "(".concat(leftTex, ")");
57
- }
58
- var needBrackets = rightTex[0] === "-";
59
- if (rightChild.type === node_1.NodeType.operator) {
60
- var operatorRightChild = rightChild;
61
- needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorRightChild.id));
62
- }
63
- if (needBrackets)
64
- rightTex = "(".concat(rightTex, ")");
65
- return "".concat(leftTex, " \\div ").concat(rightTex);
66
- }
67
- case operatorNode_1.OperatorIds.fraction: {
68
- return "\\frac{".concat(leftTex, "}{").concat(rightTex, "}");
69
- }
70
- case operatorNode_1.OperatorIds.power: {
71
- var needBrackets = leftTex[0] === "-";
72
- if (leftChild.type === node_1.NodeType.operator) {
73
- var childOperator = leftChild;
74
- needBrackets || (needBrackets = [
75
- operatorNode_1.OperatorIds.add,
76
- operatorNode_1.OperatorIds.substract,
77
- operatorNode_1.OperatorIds.multiply,
78
- operatorNode_1.OperatorIds.divide,
79
- operatorNode_1.OperatorIds.fraction,
80
- operatorNode_1.OperatorIds.power,
81
- ].includes(childOperator.id));
82
- }
83
- if (needBrackets)
84
- leftTex = "(".concat(leftTex, ")");
85
- return "".concat(leftTex, "^{").concat(rightTex, "}");
86
- }
87
- case operatorNode_1.OperatorIds.equal: {
88
- return "".concat(leftTex, " = ").concat(rightTex);
89
- }
90
- default:
91
- return node.tex;
92
- }
93
- case node_1.NodeType["function"]: {
94
- var functionNode = node;
95
- var child = functionNode.child;
96
- var childTex = latexParser(functionNode.child);
97
- switch (functionNode.id) {
98
- case functionNode_1.FunctionsIds.sqrt: {
99
- return "\\sqrt{".concat(childTex, "}");
100
- }
101
- case functionNode_1.FunctionsIds.opposite: {
102
- var needBrackets = childTex[0] === "-";
103
- if (child.type === node_1.NodeType.operator) {
104
- var operatorChild = child;
105
- needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorChild.id));
106
- }
107
- if (needBrackets)
108
- childTex = "(".concat(childTex, ")");
109
- return "-".concat(childTex);
110
- }
111
- }
112
- }
113
- default:
114
- return "";
115
- }
116
- }
117
- exports.latexParser = latexParser;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.latexParser = void 0;
4
+ const functionNode_1 = require("../nodes/functions/functionNode");
5
+ const node_1 = require("../nodes/node");
6
+ const operatorNode_1 = require("../nodes/operators/operatorNode");
7
+ function latexParser(node) {
8
+ if (!node) {
9
+ console.log("parsing a null node ???");
10
+ return "";
11
+ }
12
+ switch (node.type) {
13
+ case node_1.NodeType.variable:
14
+ return node.tex;
15
+ case node_1.NodeType.number:
16
+ return node.tex;
17
+ case node_1.NodeType.operator:
18
+ const operatorNode = node;
19
+ let rightTex = latexParser(operatorNode.rightChild);
20
+ let leftTex = latexParser(operatorNode.leftChild);
21
+ const { leftChild, rightChild } = operatorNode;
22
+ switch (operatorNode.id) {
23
+ case operatorNode_1.OperatorIds.add:
24
+ return `${leftTex} ${rightTex[0] === "-" ? "" : "+ "}${rightTex}`;
25
+ case operatorNode_1.OperatorIds.substract: {
26
+ const needBrackets = (rightChild.type === node_1.NodeType.operator &&
27
+ [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(rightChild.id)) ||
28
+ rightTex[0] === "-";
29
+ if (needBrackets)
30
+ rightTex = `(${rightTex})`;
31
+ return `${leftTex} - ${rightTex}`;
32
+ }
33
+ case operatorNode_1.OperatorIds.multiply: {
34
+ if (leftChild.type === node_1.NodeType.operator) {
35
+ if ([operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract, operatorNode_1.OperatorIds.divide].includes(leftChild.id))
36
+ leftTex = `(${leftTex})`;
37
+ }
38
+ let needBrackets = rightTex[0] === "-";
39
+ if (rightChild.type === node_1.NodeType.operator) {
40
+ const operatorRightChild = rightChild;
41
+ needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorRightChild.id));
42
+ }
43
+ if (needBrackets)
44
+ rightTex = `(${rightTex})`;
45
+ // permet de gérer le cas 3*2^x
46
+ let showTimesSign = !isNaN(+rightTex[0]) || rightChild.type === node_1.NodeType.number;
47
+ if (rightChild.type === node_1.NodeType.operator) {
48
+ const operatorRightChild = rightChild;
49
+ showTimesSign || (showTimesSign = [operatorNode_1.OperatorIds.fraction].includes(operatorRightChild.id));
50
+ }
51
+ return `${leftTex}${showTimesSign ? "\\times " : ""}${rightTex}`;
52
+ }
53
+ case operatorNode_1.OperatorIds.divide: {
54
+ if (leftChild.type === node_1.NodeType.operator) {
55
+ if ([operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract, operatorNode_1.OperatorIds.multiply].includes(leftChild.id))
56
+ leftTex = `(${leftTex})`;
57
+ }
58
+ let needBrackets = rightTex[0] === "-";
59
+ if (rightChild.type === node_1.NodeType.operator) {
60
+ const operatorRightChild = rightChild;
61
+ needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorRightChild.id));
62
+ }
63
+ if (needBrackets)
64
+ rightTex = `(${rightTex})`;
65
+ return `${leftTex} \\div ${rightTex}`;
66
+ }
67
+ case operatorNode_1.OperatorIds.fraction: {
68
+ return `\\frac{${leftTex}}{${rightTex}}`;
69
+ }
70
+ case operatorNode_1.OperatorIds.power: {
71
+ let needBrackets = leftTex[0] === "-";
72
+ if (leftChild.type === node_1.NodeType.operator) {
73
+ const childOperator = leftChild;
74
+ needBrackets || (needBrackets = [
75
+ operatorNode_1.OperatorIds.add,
76
+ operatorNode_1.OperatorIds.substract,
77
+ operatorNode_1.OperatorIds.multiply,
78
+ operatorNode_1.OperatorIds.divide,
79
+ operatorNode_1.OperatorIds.fraction,
80
+ operatorNode_1.OperatorIds.power,
81
+ ].includes(childOperator.id));
82
+ }
83
+ if (needBrackets)
84
+ leftTex = `(${leftTex})`;
85
+ return `${leftTex}^{${rightTex}}`;
86
+ }
87
+ case operatorNode_1.OperatorIds.equal: {
88
+ return `${leftTex} = ${rightTex}`;
89
+ }
90
+ default:
91
+ return node.tex;
92
+ }
93
+ case node_1.NodeType.function: {
94
+ const functionNode = node;
95
+ const child = functionNode.child;
96
+ let childTex = latexParser(functionNode.child);
97
+ switch (functionNode.id) {
98
+ case functionNode_1.FunctionsIds.sqrt: {
99
+ return `\\sqrt{${childTex}}`;
100
+ }
101
+ case functionNode_1.FunctionsIds.opposite: {
102
+ let needBrackets = childTex[0] === "-";
103
+ if (child.type === node_1.NodeType.operator) {
104
+ const operatorChild = child;
105
+ needBrackets || (needBrackets = [operatorNode_1.OperatorIds.add, operatorNode_1.OperatorIds.substract].includes(operatorChild.id));
106
+ }
107
+ if (needBrackets)
108
+ childTex = `(${childTex})`;
109
+ return `-${childTex}`;
110
+ }
111
+ }
112
+ }
113
+ default:
114
+ return "";
115
+ }
116
+ }
117
+ exports.latexParser = latexParser;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.arrayEqual = void 0;
4
+ function arrayEqual(arr1, arr2) {
5
+ if (arr1.length !== arr2.length)
6
+ return false;
7
+ for (let i = 0; i < arr1.length; i++) {
8
+ if (arr1[i] !== arr2[i])
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+ exports.arrayEqual = arrayEqual;
@@ -1,7 +1,7 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.coin = void 0;
4
- var coin = function () {
5
- return Math.random() < 0.5;
6
- };
7
- exports.coin = coin;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coin = void 0;
4
+ const coin = () => {
5
+ return Math.random() < 0.5;
6
+ };
7
+ exports.coin = coin;
@@ -1,7 +1,7 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.random = void 0;
4
- function random(array) {
5
- return array[Math.floor(Math.random() * array.length)];
6
- }
7
- exports.random = random;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.random = void 0;
4
+ function random(array) {
5
+ return array[Math.floor(Math.random() * array.length)];
6
+ }
7
+ exports.random = random;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shuffle = void 0;
4
+ /* Randomize array in-place using Durstenfeld shuffle algorithm */
5
+ function shuffle(array) {
6
+ const res = [...array];
7
+ for (var i = res.length - 1; i > 0; i--) {
8
+ var j = Math.floor(Math.random() * (i + 1));
9
+ var temp = res[i];
10
+ res[i] = res[j];
11
+ res[j] = temp;
12
+ }
13
+ return res;
14
+ }
15
+ exports.shuffle = shuffle;
package/package.json CHANGED
@@ -1,28 +1,35 @@
1
- {
2
- "name": "math-exercises",
3
- "version": "1.2.8",
4
- "description": "Générateurs d'exercices et questions mathématiques en latex",
5
- "main": "src/index.js",
6
- "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1",
8
- "start:dev": "nodemon"
9
- },
10
- "keywords": [],
11
- "author": "Heureux Hasard",
12
- "license": "ISC",
13
- "devDependencies": {
14
- "@types/node": "^18.11.9",
15
- "nodemon": "^2.0.20",
16
- "ts-node": "^10.9.1",
17
- "typescript": "^4.9.3"
18
- },
19
- "dependencies": {},
20
- "repository": {
21
- "type": "git",
22
- "url": "git+https://github.com/krirkrirk/math-exercices.git"
23
- },
24
- "bugs": {
25
- "url": "https://github.com/krirkrirk/math-exercices/issues"
26
- },
27
- "homepage": "https://github.com/krirkrirk/math-exercices#readme"
28
- }
1
+ {
2
+ "name": "math-exercises",
3
+ "version": "1.2.10",
4
+ "description": "Générateurs d'exercices et questions mathématiques en latex",
5
+ "main": "src/index.js",
6
+ "files": [
7
+ "lib/**/*"
8
+ ],
9
+ "scripts": {
10
+ "test": "echo \"Error: no test specified\" && exit 1",
11
+ "start:dev": "nodemon",
12
+ "build": "tsc",
13
+ "prepublish": "tsc"
14
+ },
15
+ "keywords": [],
16
+ "author": "Heureux Hasard",
17
+ "license": "ISC",
18
+ "devDependencies": {
19
+ "@types/node": "^18.11.9",
20
+ "nodemon": "^2.0.20",
21
+ "prettier": "^2.8.4",
22
+ "ts-node": "^10.9.1",
23
+ "tslint": "^6.1.3",
24
+ "tslint-config-prettier": "^1.18.0",
25
+ "typescript": "^4.9.3"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/krirkrirk/math-exercices.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/krirkrirk/math-exercices/issues"
33
+ },
34
+ "homepage": "https://github.com/krirkrirk/math-exercices#readme"
35
+ }
package/nodemon.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "watch": ["src"],
3
- "ext": "ts",
4
- "exec": "ts-node ./src/index.ts"
5
- }
@@ -1,40 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.getAddAndSubQuestions = exports.addAndSubExercise = void 0;
4
- var randint_1 = require("../../mathutils/random/randint");
5
- var latexParser_1 = require("../../tree/parsers/latexParser");
6
- var numberNode_1 = require("../../tree/nodes/numbers/numberNode");
7
- var addNode_1 = require("../../tree/nodes/operators/addNode");
8
- var getDistinctQuestions_1 = require("../utils/getDistinctQuestions");
9
- /**
10
- * a±b±c±d
11
- */
12
- exports.addAndSubExercise = {
13
- id: "addAndSub",
14
- connector: "=",
15
- instruction: "Calculer :",
16
- label: "Additions et soustractions",
17
- levels: ["6", "5"],
18
- section: "Calculs",
19
- isSingleStep: true,
20
- generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getAddAndSubQuestions, nb); }
21
- };
22
- function getAddAndSubQuestions() {
23
- var nbOperations = (0, randint_1.randint)(2, 4);
24
- var numbers = [];
25
- for (var i = 0; i < nbOperations + 1; i++) {
26
- numbers.push((0, randint_1.randint)(-15, 15, [0]));
27
- }
28
- var allNumbersNodes = numbers.map(function (nb) { return new numberNode_1.NumberNode(nb); });
29
- var statementTree = new addNode_1.AddNode(allNumbersNodes[0], allNumbersNodes[1]);
30
- for (var i = 2; i < allNumbersNodes.length; i++) {
31
- statementTree = new addNode_1.AddNode(statementTree, allNumbersNodes[i]);
32
- }
33
- var answer = numbers.reduce(function (a, b) { return a + b; }) + "";
34
- var question = {
35
- startStatement: (0, latexParser_1.latexParser)(statementTree),
36
- answer: answer
37
- };
38
- return question;
39
- }
40
- exports.getAddAndSubQuestions = getAddAndSubQuestions;
@@ -1,39 +0,0 @@
1
- import { randint } from "../../mathutils/random/randint";
2
- import { latexParser } from "../../tree/parsers/latexParser";
3
- import { NumberNode } from "../../tree/nodes/numbers/numberNode";
4
- import { AddNode } from "../../tree/nodes/operators/addNode";
5
- import { Exercise, Question } from "../exercise";
6
- import { getDistinctQuestions } from "../utils/getDistinctQuestions";
7
-
8
- /**
9
- * a±b±c±d
10
- */
11
- export const addAndSubExercise: Exercise = {
12
- id: "addAndSub",
13
- connector: "=",
14
- instruction: "Calculer :",
15
- label: "Additions et soustractions",
16
- levels: ["6", "5"],
17
- section: "Calculs",
18
- isSingleStep: true,
19
- generator: (nb: number) => getDistinctQuestions(getAddAndSubQuestions, nb),
20
- };
21
-
22
- export function getAddAndSubQuestions(): Question {
23
- const nbOperations = randint(2, 4);
24
- const numbers = [];
25
- for (let i = 0; i < nbOperations + 1; i++) {
26
- numbers.push(randint(-15, 15, [0]));
27
- }
28
- const allNumbersNodes = numbers.map((nb) => new NumberNode(nb));
29
- let statementTree = new AddNode(allNumbersNodes[0], allNumbersNodes[1]);
30
- for (let i = 2; i < allNumbersNodes.length; i++) {
31
- statementTree = new AddNode(statementTree, allNumbersNodes[i]);
32
- }
33
- const answer = numbers.reduce((a, b) => a + b) + "";
34
- const question: Question = {
35
- startStatement: latexParser(statementTree),
36
- answer: answer,
37
- };
38
- return question;
39
- }
@@ -1,35 +0,0 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.getFractionAndIntegerDivision = exports.fractionAndIntegerDivision = void 0;
4
- var randint_1 = require("../../../mathutils/random/randint");
5
- var integer_1 = require("../../../numbers/integer/integer");
6
- var rational_1 = require("../../../numbers/rationals/rational");
7
- var latexParser_1 = require("../../../tree/parsers/latexParser");
8
- var divideNode_1 = require("../../../tree/nodes/operators/divideNode");
9
- var random_1 = require("../../../utils/random");
10
- var getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
11
- exports.fractionAndIntegerDivision = {
12
- id: "fractionAndIntegerDivision",
13
- connector: "=",
14
- instruction: "Calculer la forme irréductible :",
15
- label: "Division d'un entier et d'une fraction",
16
- levels: ["4", "3", "2", "1"],
17
- isSingleStep: false,
18
- section: "Fractions",
19
- generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionAndIntegerDivision, nb); }
20
- };
21
- function getFractionAndIntegerDivision() {
22
- var rational = rational_1.RationalConstructor.randomIrreductible();
23
- var integer = new integer_1.Integer((0, randint_1.randint)(-10, 11, [0]));
24
- var integerFirst = (0, random_1.random)([0, 1]);
25
- var statementTree = integerFirst
26
- ? new divideNode_1.DivideNode(integer.toTree(), rational.toTree())
27
- : new divideNode_1.DivideNode(rational.toTree(), integer.toTree());
28
- var answerTree = integerFirst ? integer.divide(rational).toTree() : rational.divide(integer).toTree();
29
- var question = {
30
- startStatement: (0, latexParser_1.latexParser)(statementTree),
31
- answer: (0, latexParser_1.latexParser)(answerTree)
32
- };
33
- return question;
34
- }
35
- exports.getFractionAndIntegerDivision = getFractionAndIntegerDivision;