math-exercises 1.2.3 → 1.2.5

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 (59) hide show
  1. package/package.json +1 -1
  2. package/src/exercises/calcul/addAndSub.js +2 -2
  3. package/src/exercises/calcul/addAndSub.ts +2 -2
  4. package/src/exercises/calcul/fractions/fractionAndIntegerDivision.js +3 -3
  5. package/src/exercises/calcul/fractions/fractionAndIntegerDivision.ts +3 -3
  6. package/src/exercises/calcul/fractions/fractionAndIntegerProduct.js +3 -3
  7. package/src/exercises/calcul/fractions/fractionAndIntegerProduct.ts +3 -3
  8. package/src/exercises/calcul/fractions/fractionAndIntegerSum.js +3 -3
  9. package/src/exercises/calcul/fractions/fractionAndIntegerSum.ts +3 -3
  10. package/src/exercises/calcul/fractions/fractionsDivision.js +3 -3
  11. package/src/exercises/calcul/fractions/fractionsDivision.ts +3 -3
  12. package/src/exercises/calcul/fractions/fractionsProduct.js +3 -3
  13. package/src/exercises/calcul/fractions/fractionsProduct.ts +3 -3
  14. package/src/exercises/calcul/fractions/fractionsSum.js +3 -3
  15. package/src/exercises/calcul/fractions/fractionsSum.ts +3 -3
  16. package/src/exercises/calcul/fractions/simplifyFraction.js +3 -3
  17. package/src/exercises/calcul/fractions/simplifyFraction.ts +3 -3
  18. package/src/exercises/calcul/operationsPriorities.js +3 -21
  19. package/src/exercises/calcul/operationsPriorities.ts +3 -24
  20. package/src/exercises/calcul/rounding/roundToUnit.js +3 -3
  21. package/src/exercises/calcul/rounding/roundToUnit.ts +3 -3
  22. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.js +3 -3
  23. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.ts +3 -3
  24. package/src/exercises/calculLitteral/distributivity/firstIdentity.js +3 -3
  25. package/src/exercises/calculLitteral/distributivity/firstIdentity.ts +3 -3
  26. package/src/exercises/calculLitteral/distributivity/secondIdentity.js +3 -3
  27. package/src/exercises/calculLitteral/distributivity/secondIdentity.ts +3 -3
  28. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.js +3 -3
  29. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.ts +3 -3
  30. package/src/exercises/calculLitteral/distributivity/thirdIdentity.js +3 -3
  31. package/src/exercises/calculLitteral/distributivity/thirdIdentity.ts +3 -3
  32. package/src/exercises/calculLitteral/equation/equationType1Exercise.js +2 -2
  33. package/src/exercises/calculLitteral/equation/equationType1Exercise.ts +2 -2
  34. package/src/exercises/calculLitteral/equation/equationType2Exercise.js +3 -3
  35. package/src/exercises/calculLitteral/equation/equationType2Exercise.ts +3 -3
  36. package/src/exercises/calculLitteral/equation/equationType3Exercise.js +3 -3
  37. package/src/exercises/calculLitteral/equation/equationType3Exercise.ts +3 -3
  38. package/src/exercises/calculLitteral/equation/equationType4Exercise.js +3 -3
  39. package/src/exercises/calculLitteral/equation/equationType4Exercise.ts +3 -3
  40. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.js +3 -3
  41. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.ts +3 -3
  42. package/src/exercises/powers/powersDivision.js +3 -3
  43. package/src/exercises/powers/powersDivision.ts +3 -3
  44. package/src/exercises/powers/powersOfTenToDecimal.js +3 -3
  45. package/src/exercises/powers/powersOfTenToDecimal.ts +3 -3
  46. package/src/exercises/powers/powersPower.js +3 -3
  47. package/src/exercises/powers/powersPower.ts +3 -3
  48. package/src/exercises/powers/powersProduct.js +3 -3
  49. package/src/exercises/powers/powersProduct.ts +3 -3
  50. package/src/exercises/powers/scientificToDecimal.js +3 -3
  51. package/src/exercises/powers/scientificToDecimal.ts +3 -3
  52. package/src/exercises/squareRoots/simpifySquareRoot.js +3 -3
  53. package/src/exercises/squareRoots/simpifySquareRoot.ts +3 -3
  54. package/src/index.js +8 -0
  55. package/src/index.ts +5 -1
  56. package/src/tree/parsers/derivateParser.js +61 -0
  57. package/src/tree/parsers/derivateParser.ts +66 -0
  58. package/src/tree/parsers/latexParser.js +117 -0
  59. package/src/tree/{latexParser/latexParse.ts → parsers/latexParser.ts} +4 -4
@@ -0,0 +1,61 @@
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
+ }
40
+ case operatorNode_1.OperatorIds.power: {
41
+ var operatorNode_2 = node;
42
+ var n = operatorNode_2.rightChild;
43
+ var u_1 = operatorNode_2.leftChild;
44
+ 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))));
45
+ }
46
+ }
47
+ case node_1.NodeType["function"]: {
48
+ var functionNode = node;
49
+ var child = functionNode.child;
50
+ switch (functionNode.id) {
51
+ case functionNode_1.FunctionsIds.sqrt: {
52
+ return new fractionNode_1.FractionNode(derivateParser(child), new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(2), new sqrtNode_1.SqrtNode(child)));
53
+ }
54
+ case functionNode_1.FunctionsIds.opposite: {
55
+ return new oppositeNode_1.OppositeNode(derivateParser(child));
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ exports.derivateParser = derivateParser;
@@ -0,0 +1,66 @@
1
+ import { Node, NodeType } from "../nodes/node";
2
+ import { NumberNode } from "../nodes/numbers/numberNode";
3
+ import { PowerNode } from "../nodes/operators/powerNode";
4
+
5
+ import { AddNode } from "../nodes/operators/addNode";
6
+ import { FractionNode } from "../nodes/operators/fractionNode";
7
+ import { MultiplyNode } from "../nodes/operators/multiplyNode";
8
+ import { OperatorIds, OperatorNode } from "../nodes/operators/operatorNode";
9
+ import { SubstractNode } from "../nodes/operators/substractNode";
10
+ import { FunctionNode, FunctionsIds } from "../nodes/functions/functionNode";
11
+ import { SqrtNode } from "../nodes/functions/sqrtNode";
12
+ import { OppositeNode } from "../nodes/functions/oppositeNode";
13
+
14
+ export function derivateParser(node: Node): Node {
15
+ if (!node) throw Error("encountered a null node ??");
16
+
17
+ switch (node.type) {
18
+ case NodeType.variable:
19
+ return new NumberNode(1);
20
+ case NodeType.number:
21
+ return new NumberNode(0);
22
+ case NodeType.operator:
23
+ const operatorNode = node as OperatorNode;
24
+ const u = operatorNode.leftChild;
25
+ const v = operatorNode.rightChild;
26
+ switch (operatorNode.id) {
27
+ case OperatorIds.add:
28
+ return new AddNode(derivateParser(u), derivateParser(v));
29
+ case OperatorIds.substract: {
30
+ return new SubstractNode(derivateParser(u), derivateParser(v));
31
+ }
32
+ case OperatorIds.multiply: {
33
+ return new AddNode(new MultiplyNode(derivateParser(u), v), new MultiplyNode(u, derivateParser(v)));
34
+ }
35
+ case OperatorIds.divide:
36
+ case OperatorIds.fraction:
37
+ return new FractionNode(
38
+ new SubstractNode(new MultiplyNode(derivateParser(u), v), new MultiplyNode(u, derivateParser(v))),
39
+ new PowerNode(v, new NumberNode(2))
40
+ );
41
+
42
+ case OperatorIds.power: {
43
+ const operatorNode = node as OperatorNode;
44
+ const n = operatorNode.rightChild as NumberNode;
45
+ const u = operatorNode.leftChild;
46
+ return new MultiplyNode(
47
+ n,
48
+ new MultiplyNode(derivateParser(u), new PowerNode(u, new NumberNode(n.value - 1)))
49
+ );
50
+ }
51
+ }
52
+ case NodeType.function: {
53
+ const functionNode = node as FunctionNode;
54
+ const child = functionNode.child;
55
+ switch (functionNode.id) {
56
+ case FunctionsIds.sqrt: {
57
+ return new FractionNode(derivateParser(child), new MultiplyNode(new NumberNode(2), new SqrtNode(child)));
58
+ }
59
+
60
+ case FunctionsIds.opposite: {
61
+ return new OppositeNode(derivateParser(child));
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
@@ -0,0 +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;
@@ -2,7 +2,7 @@ import { FunctionNode, FunctionsIds } from "../nodes/functions/functionNode";
2
2
  import { Node, NodeType } from "../nodes/node";
3
3
  import { OperatorIds, OperatorNode } from "../nodes/operators/operatorNode";
4
4
 
5
- export function latexParse(node: Node): string {
5
+ export function latexParser(node: Node): string {
6
6
  if (!node) {
7
7
  console.log("parsing a null node ???");
8
8
  return "";
@@ -14,8 +14,8 @@ export function latexParse(node: Node): string {
14
14
  return node.tex;
15
15
  case NodeType.operator:
16
16
  const operatorNode = node as OperatorNode;
17
- let rightTex = latexParse(operatorNode.rightChild);
18
- let leftTex = latexParse(operatorNode.leftChild);
17
+ let rightTex = latexParser(operatorNode.rightChild);
18
+ let leftTex = latexParser(operatorNode.leftChild);
19
19
  const { leftChild, rightChild } = operatorNode;
20
20
  switch (operatorNode.id) {
21
21
  case OperatorIds.add:
@@ -99,7 +99,7 @@ export function latexParse(node: Node): string {
99
99
  case NodeType.function: {
100
100
  const functionNode = node as FunctionNode;
101
101
  const child = functionNode.child;
102
- let childTex = latexParse(functionNode.child);
102
+ let childTex = latexParser(functionNode.child);
103
103
  switch (functionNode.id) {
104
104
  case FunctionsIds.sqrt: {
105
105
  return `\\sqrt{${childTex}}`;