math-exercises 1.2.4 → 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 +2 -2
  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,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}}`;