math-exercises 3.0.53 → 3.0.55

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 (131) hide show
  1. package/lib/exercises/math/calcul/mentalCaluls/mentalAddAndSub.d.ts.map +1 -1
  2. package/lib/exercises/math/calcul/mentalCaluls/mentalAddAndSub.js +3 -5
  3. package/lib/exercises/math/calculLitteral/equation/binomialsTrinomialsProposedSolutions.d.ts +8 -3
  4. package/lib/exercises/math/calculLitteral/equation/binomialsTrinomialsProposedSolutions.d.ts.map +1 -1
  5. package/lib/exercises/math/calculLitteral/equation/binomialsTrinomialsProposedSolutions.js +53 -28
  6. package/lib/exercises/math/calculLitteral/equation/multiplicationEquation.d.ts.map +1 -1
  7. package/lib/exercises/math/calculLitteral/equation/multiplicationEquation.js +3 -0
  8. package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.d.ts +2 -2
  9. package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.d.ts.map +1 -1
  10. package/lib/exercises/math/calculLitteral/systems/basicNiceValuesSystemResolution.js +52 -25
  11. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.d.ts +2 -2
  12. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.d.ts.map +1 -1
  13. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.js +50 -33
  14. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.d.ts +2 -1
  15. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.d.ts.map +1 -1
  16. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.js +37 -17
  17. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -1
  18. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +33 -12
  19. package/lib/exercises/math/geometry/areas/circleArea.d.ts.map +1 -1
  20. package/lib/exercises/math/geometry/areas/circleArea.js +45 -2
  21. package/lib/exercises/math/geometry/areas/squareArea.d.ts.map +1 -1
  22. package/lib/exercises/math/geometry/areas/squareArea.js +40 -7
  23. package/lib/exercises/math/geometry/areas/triangleArea.d.ts.map +1 -1
  24. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.d.ts.map +1 -1
  25. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.js +52 -7
  26. package/lib/exercises/math/geometry/cartesian/cartesianFromTwoPoints.js +1 -1
  27. package/lib/exercises/math/geometry/cartesian/cartesianFromVectorAndPoint.js +1 -1
  28. package/lib/exercises/math/geometry/cartesian/directionVectorEquation.d.ts.map +1 -1
  29. package/lib/exercises/math/geometry/cartesian/directionVectorEquation.js +55 -11
  30. package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.d.ts.map +1 -1
  31. package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.js +20 -1
  32. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.d.ts +9 -0
  33. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.d.ts.map +1 -0
  34. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.js +115 -0
  35. package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.d.ts +3 -2
  36. package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.d.ts.map +1 -1
  37. package/lib/exercises/math/geometry/lines/drawLineFromCartesianEquation.js +36 -27
  38. package/lib/exercises/math/geometry/lines/drawLineFromPointAndVector.d.ts +10 -0
  39. package/lib/exercises/math/geometry/lines/drawLineFromPointAndVector.d.ts.map +1 -0
  40. package/lib/exercises/math/geometry/lines/drawLineFromPointAndVector.js +123 -0
  41. package/lib/exercises/math/geometry/lines/findParallelLineFromCartesianEquation.d.ts +12 -0
  42. package/lib/exercises/math/geometry/lines/findParallelLineFromCartesianEquation.d.ts.map +1 -0
  43. package/lib/exercises/math/geometry/lines/findParallelLineFromCartesianEquation.js +130 -0
  44. package/lib/exercises/math/geometry/lines/findParallelLineFromReductEquation.d.ts +10 -0
  45. package/lib/exercises/math/geometry/lines/findParallelLineFromReductEquation.d.ts.map +1 -0
  46. package/lib/exercises/math/geometry/lines/findParallelLineFromReductEquation.js +109 -0
  47. package/lib/exercises/math/geometry/lines/index.d.ts +5 -0
  48. package/lib/exercises/math/geometry/lines/index.d.ts.map +1 -1
  49. package/lib/exercises/math/geometry/lines/index.js +5 -1
  50. package/lib/exercises/math/geometry/perimeters/circleCircumference.d.ts.map +1 -1
  51. package/lib/exercises/math/geometry/perimeters/circleCircumference.js +58 -9
  52. package/lib/exercises/math/geometry/perimeters/rectanglePerimeter.d.ts.map +1 -1
  53. package/lib/exercises/math/geometry/perimeters/rectanglePerimeter.js +39 -6
  54. package/lib/exercises/math/geometry/perimeters/squarePerimeter.d.ts.map +1 -1
  55. package/lib/exercises/math/geometry/perimeters/squarePerimeter.js +40 -5
  56. package/lib/exercises/math/geometry/perimeters/trianglePerimeter.d.ts.map +1 -1
  57. package/lib/exercises/math/geometry/perimeters/trianglePerimeter.js +34 -7
  58. package/lib/exercises/math/geometry/pythagore/pythagore.d.ts.map +1 -1
  59. package/lib/exercises/math/geometry/pythagore/pythagore.js +51 -15
  60. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts.map +1 -1
  61. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.js +109 -19
  62. package/lib/exercises/math/geometry/thales/thales.d.ts.map +1 -1
  63. package/lib/exercises/math/geometry/thales/thales.js +36 -5
  64. package/lib/exercises/math/geometry/triangles/triangleNature.d.ts.map +1 -1
  65. package/lib/exercises/math/geometry/triangles/triangleNature.js +45 -14
  66. package/lib/exercises/math/geometry/vectors/colinearity.d.ts +5 -4
  67. package/lib/exercises/math/geometry/vectors/colinearity.d.ts.map +1 -1
  68. package/lib/exercises/math/geometry/vectors/colinearity.js +82 -21
  69. package/lib/exercises/math/geometry/vectors/findCoordForAligment.d.ts +2 -0
  70. package/lib/exercises/math/geometry/vectors/findCoordForAligment.d.ts.map +1 -0
  71. package/lib/exercises/math/geometry/vectors/findCoordForAligment.js +92 -0
  72. package/lib/exercises/math/powers/calculatePower.d.ts.map +1 -1
  73. package/lib/exercises/math/powers/calculatePower.js +63 -6
  74. package/lib/exercises/math/powers/powerDefinition.d.ts.map +1 -1
  75. package/lib/exercises/math/powers/powerDefinition.js +39 -8
  76. package/lib/exercises/math/powers/powersOfTenToDecimal.d.ts.map +1 -1
  77. package/lib/exercises/math/powers/powersOfTenToDecimal.js +2 -1
  78. package/lib/exercises/math/powers/powersPower.d.ts +5 -2
  79. package/lib/exercises/math/powers/powersPower.d.ts.map +1 -1
  80. package/lib/exercises/math/powers/powersPower.js +59 -28
  81. package/lib/exercises/math/trigonometry/calculateCosSinAndTan.d.ts.map +1 -1
  82. package/lib/exercises/math/trigonometry/calculateCosSinAndTan.js +21 -0
  83. package/lib/exercises/math/trigonometry/mainRemarkableValues.d.ts.map +1 -1
  84. package/lib/exercises/math/trigonometry/mainRemarkableValues.js +1 -1
  85. package/lib/exercises/math/trigonometry/remarkableValues.d.ts.map +1 -1
  86. package/lib/exercises/math/trigonometry/remarkableValues.js +4 -0
  87. package/lib/index.d.ts +34 -13
  88. package/lib/index.d.ts.map +1 -1
  89. package/lib/math/geometry/angle.d.ts.map +1 -1
  90. package/lib/math/geometry/angle.js +12 -7
  91. package/lib/math/geometry/line.d.ts +2 -8
  92. package/lib/math/geometry/line.d.ts.map +1 -1
  93. package/lib/math/geometry/line.js +50 -29
  94. package/lib/math/geometry/point.d.ts +2 -1
  95. package/lib/math/geometry/point.d.ts.map +1 -1
  96. package/lib/math/geometry/point.js +3 -0
  97. package/lib/math/geometry/segment.js +1 -1
  98. package/lib/math/geometry/triangles/triangle.d.ts.map +1 -1
  99. package/lib/math/geometry/triangles/triangle.js +11 -11
  100. package/lib/math/geometry/vector.d.ts +1 -0
  101. package/lib/math/geometry/vector.d.ts.map +1 -1
  102. package/lib/math/geometry/vector.js +10 -3
  103. package/lib/math/systems/generalSystem.d.ts +12 -1
  104. package/lib/math/systems/generalSystem.d.ts.map +1 -1
  105. package/lib/math/systems/generalSystem.js +92 -55
  106. package/lib/math/trigonometry/remarkableValue.d.ts.map +1 -1
  107. package/lib/math/trigonometry/remarkableValue.js +1 -1
  108. package/lib/playground.d.ts.map +1 -1
  109. package/lib/playground.js +1 -15
  110. package/lib/server.js +1 -1
  111. package/lib/tree/nodes/algebraicNode.d.ts +0 -1
  112. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  113. package/lib/tree/nodes/equations/equalNode.d.ts +1 -1
  114. package/lib/tree/nodes/equations/equalNode.d.ts.map +1 -1
  115. package/lib/tree/nodes/equations/equalNode.js +1 -1
  116. package/lib/tree/nodes/functions/cosNode.d.ts.map +1 -1
  117. package/lib/tree/nodes/functions/cosNode.js +11 -5
  118. package/lib/tree/nodes/functions/sinNode.d.ts.map +1 -1
  119. package/lib/tree/nodes/functions/sinNode.js +11 -5
  120. package/lib/tree/nodes/functions/tanNode.d.ts.map +1 -1
  121. package/lib/tree/nodes/functions/tanNode.js +11 -5
  122. package/lib/tree/nodes/node.d.ts +8 -8
  123. package/lib/tree/nodes/node.d.ts.map +1 -1
  124. package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
  125. package/lib/tree/nodes/nodeConstructor.js +1 -1
  126. package/lib/tree/nodes/operators/fractionNode.js +2 -2
  127. package/lib/tree/nodes/operators/multiplyNode.js +1 -1
  128. package/lib/tree/nodes/operators/powerNode.d.ts +4 -4
  129. package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
  130. package/lib/tree/nodes/operators/powerNode.js +5 -5
  131. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"circleArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/circleArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAOrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAmDF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,WAAW,CAe5C,CAAC"}
1
+ {"version":3,"file":"circleArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/circleArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAOrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAsGF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,WAAW,CAe5C,CAAC"}
@@ -17,17 +17,60 @@ const getAnswer = (identifiers) => {
17
17
  const answerTex = answer + "\\text{cm}^2";
18
18
  return answerTex;
19
19
  };
20
+ const getHint = (identifiers) => {
21
+ return `La formule de l'aire d'un disque est :
22
+
23
+ $$
24
+ A = \\pi\\times r^2
25
+ $$
26
+
27
+ où $r$ est le rayon du disque.`;
28
+ };
29
+ const getCorrection = (identifiers) => {
30
+ const { coin, radius, diametre } = identifiers;
31
+ const isRadius = coin;
32
+ return `La formule de l'aire d'un disque est :
33
+
34
+ $$
35
+ A = \\pi\\times r^2
36
+ $$
37
+
38
+ où $r$ est le rayon du disque.
39
+
40
+ ${isRadius
41
+ ? `On remplace donc $r$ par $${radius}$ :
42
+
43
+ $$
44
+ A = \\pi \\times ${radius}^2 \\approx ${getAnswer(identifiers)}
45
+ $$`
46
+ : `Puisque le diamètre est de $${diametre}$ cm, le rayon vaut :
47
+
48
+ $$
49
+ r = \\frac{${diametre}}{2} = ${(diametre / 2).frenchify()} \\ \\text{cm}
50
+ $$
51
+
52
+ L'aire du disque vaut donc :
53
+
54
+ $$
55
+ A = \\pi \\times ${(diametre / 2).frenchify()}^2 \\approx ${getAnswer(identifiers)}
56
+ $$`}`;
57
+ };
20
58
  const getCircleArea = () => {
21
59
  const radius = randint(1, 13);
22
60
  const diametre = randint(1, 21);
23
61
  const coin = coinFlip();
24
62
  const identifiers = { coin, diametre, radius };
63
+ return getQuestionFromIdentifiers(identifiers);
64
+ };
65
+ const getQuestionFromIdentifiers = (identifiers) => {
25
66
  const question = {
26
67
  instruction: getInstruction(identifiers),
27
68
  answer: getAnswer(identifiers),
28
69
  answerFormat: "tex",
29
70
  keys: ["cm", "cm2"],
30
71
  identifiers,
72
+ hint: getHint(identifiers),
73
+ correction: getCorrection(identifiers),
31
74
  };
32
75
  return question;
33
76
  };
@@ -47,9 +90,7 @@ export const circleArea = {
47
90
  id: "circleArea",
48
91
  connector: "=",
49
92
  label: "Calculer l'aire d'un disque",
50
- levels: ["4ème", "3ème", "2nde"],
51
93
  isSingleStep: false,
52
- sections: ["Aires", "Géométrie euclidienne"],
53
94
  generator: (nb) => getDistinctQuestions(getCircleArea, nb),
54
95
  qcmTimer: 60,
55
96
  freeTimer: 60,
@@ -58,4 +99,6 @@ export const circleArea = {
58
99
  subject: "Mathématiques",
59
100
  getInstruction,
60
101
  getAnswer,
102
+ getQuestionFromIdentifiers,
103
+ hasHintAndCorrection: true,
61
104
  };
@@ -1 +1 @@
1
- {"version":3,"file":"squareArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/squareArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,6BAA6B,CAAC;AAMrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAgCF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,WAAW,CAc5C,CAAC"}
1
+ {"version":3,"file":"squareArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/squareArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAMrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAqEF,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,WAAW,CAc5C,CAAC"}
@@ -2,19 +2,52 @@ import { addValidProp, tryToAddWrongProp, } from "../../../../exercises/exercise
2
2
  import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
3
  import { randint } from "../../../../math/utils/random/randint.js";
4
4
  import { shuffle } from "../../../../utils/alea/shuffle.js";
5
- const getSquareArea = () => {
6
- const side = randint(1, 21);
5
+ const getInstruction = (identifiers) => {
6
+ const { side } = identifiers;
7
+ return `Calculer l'aire d'un carré de $${side}$ cm de côté.`;
8
+ };
9
+ const getAnswer = (identifiers) => {
10
+ const { side } = identifiers;
7
11
  const answer = side ** 2 + "";
8
12
  const answerTex = answer + "\\text{cm}^2";
13
+ return answerTex;
14
+ };
15
+ const getHint = (identifiers) => {
16
+ return `L'aire d'un carré s'obtient en multipliant la longueur d'un côté par elle-même.`;
17
+ };
18
+ const getCorrection = (identifiers) => {
19
+ const { side } = identifiers;
20
+ return `L'aire d'un carré de côté $c$ est :
21
+
22
+ $$
23
+ A = c\\times c
24
+ $$
25
+
26
+ Ici, on a $c = ${side}$ cm.
27
+
28
+ L'aire du carré vaut donc :
29
+
30
+ $$
31
+ A = ${side}\\times${side} = ${getAnswer(identifiers)}
32
+ $$`;
33
+ };
34
+ const getQuestionFromIdentifiers = (identifiers) => {
9
35
  const question = {
10
- instruction: `Calculer l'aire d'un carré de $${side}$ cm de côté.`,
11
- answer: answerTex,
36
+ instruction: getInstruction(identifiers),
37
+ answer: getAnswer(identifiers),
12
38
  answerFormat: "tex",
13
39
  keys: ["cm", "cm2"],
14
- identifiers: { side },
40
+ identifiers,
41
+ hint: getHint(identifiers),
42
+ correction: getCorrection(identifiers),
15
43
  };
16
44
  return question;
17
45
  };
46
+ const getSquareArea = () => {
47
+ const side = randint(1, 21);
48
+ const identifiers = { side };
49
+ return getQuestionFromIdentifiers(identifiers);
50
+ };
18
51
  const getPropositions = (n, { answer }) => {
19
52
  const propositions = [];
20
53
  addValidProp(propositions, answer);
@@ -31,9 +64,7 @@ export const squareArea = {
31
64
  id: "squareArea",
32
65
  connector: "=",
33
66
  label: "Calculer l'aire d'un carré",
34
- levels: ["4ème", "3ème", "2nde"],
35
67
  isSingleStep: false,
36
- sections: ["Aires", "Géométrie euclidienne"],
37
68
  generator: (nb) => getDistinctQuestions(getSquareArea, nb, 20),
38
69
  qcmTimer: 60,
39
70
  freeTimer: 60,
@@ -41,4 +72,6 @@ export const squareArea = {
41
72
  getPropositions,
42
73
  isAnswerValid,
43
74
  subject: "Mathématiques",
75
+ getQuestionFromIdentifiers,
76
+ hasHintAndCorrection: true,
44
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"triangleArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/triangleArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAGL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AASnD,OAAO,EAGL,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAKxC,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA6GF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAiB9C,CAAC"}
1
+ {"version":3,"file":"triangleArea.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/areas/triangleArea.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAGL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AAOnD,OAAO,EAGL,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAKxC,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA4GF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAiB9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cartesianEquationOfLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/cartesianEquationOfLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAqBrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AA0KF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAazD,CAAC"}
1
+ {"version":3,"file":"cartesianEquationOfLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/cartesianEquationOfLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAqBrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAyNF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAczD,CAAC"}
@@ -3,12 +3,13 @@ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQue
3
3
  import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
4
4
  import { Line } from "../../../../math/geometry/line.js";
5
5
  import { Point } from "../../../../math/geometry/point.js";
6
- import { Vector } from "../../../../math/geometry/vector.js";
6
+ import { Vector, VectorConstructor } from "../../../../math/geometry/vector.js";
7
7
  import { randint } from "../../../../math/utils/random/randint.js";
8
8
  import { EqualNode } from "../../../../tree/nodes/equations/equalNode.js";
9
+ import { opposite } from "../../../../tree/nodes/functions/oppositeNode.js";
9
10
  import { NumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
10
- import { AddNode } from "../../../../tree/nodes/operators/addNode.js";
11
- import { MultiplyNode, } from "../../../../tree/nodes/operators/multiplyNode.js";
11
+ import { add, AddNode } from "../../../../tree/nodes/operators/addNode.js";
12
+ import { multiply, MultiplyNode, } from "../../../../tree/nodes/operators/multiplyNode.js";
12
13
  import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
13
14
  import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
14
15
  import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
@@ -24,6 +25,43 @@ const getAnswer = (identifiers) => {
24
25
  const correctAnswer = line.getCartesianEquation();
25
26
  return correctAnswer.toTex();
26
27
  };
28
+ const getHint = (identifiers) => {
29
+ return `Détermine un vecteur directeur de $d$. Cela permet de trouver les coefficients $a$ et $b$ dans l'équation cartésienne $ax+by+c=0$. Puis, utilise un point appartenant à $d$ pour obtenir $c$. `;
30
+ };
31
+ const getCorrection = (identifiers) => {
32
+ const { aX, aY, bX, bY } = identifiers;
33
+ const A = new Point("A", aX, aY);
34
+ const B = new Point("B", bX, bY);
35
+ const vec = VectorConstructor.fromPoints(A, B);
36
+ const partial = add(multiply(opposite(vec.y), "x"), multiply(vec.x, "y")).simplify({
37
+ forbidFactorize: true,
38
+ });
39
+ const partialEv = partial.toDetailedEvaluation({ x: A.x, y: A.y });
40
+ const partialEvSimp = partialEv.simplify();
41
+ const c = opposite(partialEvSimp).simplify();
42
+ return `On lit graphiquement que la droite passe par les points $${A.toTexWithCoords()}$ et $${B.toTexWithCoords()}$. On en déduit qu'un vecteur directeur de $d$ est $${vec.toTexWithCoords()}$.
43
+
44
+ Une équation cartésienne de $d$ est donc de la forme :
45
+
46
+ $$
47
+ ${partial.toTex()}+c = 0
48
+ $$
49
+
50
+ Pour déterminer $c$, on utilise le fait que le point $${A.toTexWithCoords()}$ appartient à $d$ :
51
+
52
+ $$
53
+ ${partialEv.toTex()}+c = 0
54
+ $$
55
+
56
+ ce qui donne $c=${c.toTex()}$.
57
+
58
+ Ainsi, une équation cartésienne de $d$ est :
59
+
60
+ $$
61
+ ${getAnswer(identifiers)}
62
+ $$
63
+ `;
64
+ };
27
65
  const getGGBOptions = (identifiers) => {
28
66
  const { aX, aY, bX, bY } = identifiers;
29
67
  const a = new Point("a", aX, aY);
@@ -40,10 +78,14 @@ const getGGBOptions = (identifiers) => {
40
78
  });
41
79
  };
42
80
  const getCartesianEquationOfLineQuestion = () => {
43
- const aX = randint(-5, 6);
44
- const aY = randint(-5, 6);
45
- const bX = randint(-5, 6, [aX]);
46
- const bY = randint(-5, 6, [aY]);
81
+ let aX = randint(-5, 6);
82
+ let aY = randint(-5, 6);
83
+ let bX = randint(-5, 6, [aX]);
84
+ let bY = randint(-5, 6, [aY]);
85
+ if (aX > bX) {
86
+ [aX, bX] = [bX, aX];
87
+ [aY, bY] = [bY, aY];
88
+ }
47
89
  const identifiers = { aX, aY, bX, bY };
48
90
  return getQuestionFromIdentifiers(identifiers);
49
91
  };
@@ -55,6 +97,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
55
97
  keys: ["x", "y", "equal"],
56
98
  answerFormat: "tex",
57
99
  identifiers,
100
+ // hint: getHint(identifiers),
101
+ // correction: getCorrection(identifiers),
58
102
  };
59
103
  return question;
60
104
  };
@@ -135,5 +179,6 @@ export const cartesianEquationOfLine = {
135
179
  isAnswerValid,
136
180
  hasGeogebra: true,
137
181
  subject: "Mathématiques",
182
+ // hasHintAndCorrection: true,
138
183
  getQuestionFromIdentifiers,
139
184
  };
@@ -56,7 +56,7 @@ const getCorrection = (identifiers) => {
56
56
  forbidFactorize: true,
57
57
  });
58
58
  const line = LineConstructor.fromPointAndVector(point, vector);
59
- const { a, b, c } = line.toCartesianCoeffs();
59
+ const [a, b, c] = line.toCartesianCoeffs();
60
60
  const [aEv, bEv, cEv] = [a.evaluate(), b.evaluate(), c.evaluate()];
61
61
  const allNeg = aEv < 0 && bEv < 0 && cEv < 0;
62
62
  const pgcd = gcd(aEv, bEv, cEv);
@@ -53,7 +53,7 @@ const getCorrection = (identifiers) => {
53
53
  forbidFactorize: true,
54
54
  });
55
55
  const line = LineConstructor.fromPointAndVector(point, vector);
56
- const { a, b, c } = line.toCartesianCoeffs();
56
+ const [a, b, c] = line.toCartesianCoeffs();
57
57
  const [aEv, bEv, cEv] = [a.evaluate(), b.evaluate(), c.evaluate()];
58
58
  const allNeg = aEv < 0 && bEv < 0 && cEv < 0;
59
59
  const pgcd = gcd(aEv, bEv, cEv);
@@ -1 +1 @@
1
- {"version":3,"file":"directionVectorEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/directionVectorEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CAEX,CAAC;AA+HF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAgBzD,CAAC"}
1
+ {"version":3,"file":"directionVectorEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/directionVectorEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAcrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CAEX,CAAC;AAqKF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAiBzD,CAAC"}
@@ -3,10 +3,14 @@ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQue
3
3
  import { Vector } from "../../../../math/geometry/vector.js";
4
4
  import { randint } from "../../../../math/utils/random/randint.js";
5
5
  import { equal } from "../../../../tree/nodes/equations/equalNode.js";
6
+ import { opposite } from "../../../../tree/nodes/functions/oppositeNode.js";
6
7
  import { NumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
7
8
  import { add } from "../../../../tree/nodes/operators/addNode.js";
9
+ import { isBinomialCoefficientNode } from "../../../../tree/nodes/operators/binomialCoefficientNode.js";
8
10
  import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
11
+ import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
9
12
  import { vectorParser } from "../../../../tree/parsers/vectorParser.js";
13
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
10
14
  const rebuildIdentifiers = (oldIds) => {
11
15
  if (oldIds.c !== undefined)
12
16
  return oldIds;
@@ -27,10 +31,13 @@ $$
27
31
 
28
32
  Déterminez les coordonnées d'un vecteur directeur de $d$.`;
29
33
  };
34
+ const getKeys = (identifiers) => {
35
+ return ["binom", "semicolon"];
36
+ };
30
37
  const getAnswer = (identifiers) => {
31
38
  const { xValue, yValue, c } = identifiers;
32
39
  const vector = new Vector("v", xValue.toTree(), yValue.toTree());
33
- return vector.toInlineCoordsTex();
40
+ return vector.toBinomCoords().toTex();
34
41
  };
35
42
  const getDirectionVectorEquationQuestion = () => {
36
43
  let x1 = randint(-8, 8);
@@ -43,13 +50,40 @@ const getDirectionVectorEquationQuestion = () => {
43
50
  const identifiers = { xValue, yValue, c };
44
51
  return getQuestionFromIdentifiers(identifiers);
45
52
  };
53
+ const getHint = (identifiers) => {
54
+ const vec = new Vector("u", opposite("b"), "a".toTree());
55
+ return `Si une droite $d$ admet une équation cartésienne de la forme :
56
+
57
+ $$
58
+ ax+by+c=0
59
+ $$
60
+
61
+ alors un vecteur directeur de $d$ est $${vec.toTexWithCoords()}$.`;
62
+ };
63
+ const getCorrection = (identifiers) => {
64
+ const { xValue, yValue, c } = identifiers;
65
+ const vec = new Vector("u", opposite("b"), "a".toTree());
66
+ return `Si une droite $d$ admet une équation cartésienne de la forme :
67
+
68
+ $$
69
+ ax+by+c=0
70
+ $$
71
+
72
+ alors un vecteur directeur de $d$ est $${vec.toTexWithCoords()}$.
73
+
74
+ Ici, $a = ${yValue}$ et $b = ${-xValue}$.
75
+
76
+ On en déduit qu'un vecteur directeur de $d$ est $\\overrightarrow{u}${getAnswer(identifiers)}$.`;
77
+ };
46
78
  const getQuestionFromIdentifiers = (identifiers) => {
47
79
  return {
48
80
  answer: getAnswer(identifiers),
49
81
  instruction: getInstruction(identifiers),
50
- keys: ["semicolon", "x", "y"],
82
+ keys: getKeys(identifiers),
51
83
  answerFormat: "tex",
52
84
  identifiers,
85
+ hint: getHint(identifiers),
86
+ correction: getCorrection(identifiers),
53
87
  };
54
88
  };
55
89
  const getPropositions = (n, { answer, xValue, yValue }) => {
@@ -77,16 +111,25 @@ const getPropositions = (n, { answer, xValue, yValue }) => {
77
111
  return shuffleProps(propositions, n);
78
112
  };
79
113
  const isAnswerValid = (ans, { answer, xValue, yValue }) => {
80
- const parsed = vectorParser(ans);
81
- if (!parsed)
82
- return false;
83
- const { x, y } = parsed;
84
- const correctVector = new Vector("u", xValue.toTree(), yValue.toTree());
85
- const studentVector = new Vector("v", x, y);
86
- if (!studentVector.isColinear(correctVector)) {
87
- return false;
114
+ try {
115
+ const solVector = new Vector("v", xValue.toTree(), yValue.toTree());
116
+ if (ans.includes("binom")) {
117
+ const parsed = parseAlgebraic(ans);
118
+ if (!isBinomialCoefficientNode(parsed))
119
+ return false;
120
+ const vec = new Vector("u", parsed.leftChild, parsed.rightChild);
121
+ return solVector.isColinear(vec);
122
+ }
123
+ else {
124
+ const vec = vectorParser(ans);
125
+ if (!vec)
126
+ return false;
127
+ return solVector.isColinear(vec);
128
+ }
129
+ }
130
+ catch (err) {
131
+ return handleVEAError(err);
88
132
  }
89
- return true;
90
133
  };
91
134
  export const directionVectorEquation = {
92
135
  id: "directionVectorEquation",
@@ -102,4 +145,5 @@ export const directionVectorEquation = {
102
145
  getInstruction,
103
146
  getQuestionFromIdentifiers,
104
147
  rebuildIdentifiers,
148
+ hasHintAndCorrection: true,
105
149
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cartesianEquationToReduced.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/cartesianEquationToReduced.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAcrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAoLF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAiB5D,CAAC"}
1
+ {"version":3,"file":"cartesianEquationToReduced.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/cartesianEquationToReduced.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAgBrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AA0MF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAkB5D,CAAC"}
@@ -70,9 +70,27 @@ ${toReduced
70
70
  : `Donner une équation cartésienne de $d$.`}`;
71
71
  };
72
72
  // const getHint: GetHint<Identifiers> = (identifiers) => {
73
- // return "";
73
+ // if (identifiers.toReduced)
74
+ // return `Pour déterminer l'équation réduite de $d$, il faut isoler la variable $y$ à gauche de l'équation, afin d'obtenir une équation de la forme :
75
+ // $$
76
+ // y = ax+b
77
+ // $$`;
78
+ // return `Pour déterminer une équation cartésienne de $d$, il faut transformer son équation réduite en une équation de la forme :
79
+ // $$
80
+ // ax+by+c = 0
81
+ // $$`;
74
82
  // };
75
83
  // const getCorrection: GetCorrection<Identifiers> = (identifiers) => {
84
+ // const { a, b, c, toReduced } = identifiers;
85
+ // const cartesian = new EqualNode(
86
+ // getCartesianEquation(identifiers),
87
+ // (0).toTree(),
88
+ // );
89
+ // if (toReduced)
90
+ // return `On isole $y$ à gauche de l'équation :
91
+ // $$
92
+ // ${cartesian.isolate("y").toTex()}
93
+ // $$`;
76
94
  // return "";
77
95
  // };
78
96
  const getKeys = (identifiers) => {
@@ -168,4 +186,5 @@ export const cartesianEquationToReduced = {
168
186
  // getCorrection,
169
187
  getAnswer,
170
188
  getQuestionFromIdentifiers,
189
+ // hasHintAndCorrection: true,
171
190
  };
@@ -0,0 +1,9 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
3
+ type Identifiers = {
4
+ cartesianCoeffs1: NodeIdentifiers[];
5
+ cartesianCoeffs2: NodeIdentifiers[];
6
+ };
7
+ export declare const cartesianEquationsIntersection: Exercise<Identifiers>;
8
+ export {};
9
+ //# sourceMappingURL=cartesianEquationsIntersection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cartesianEquationsIntersection.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/cartesianEquationsIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAO7C,KAAK,WAAW,GAAG;IACjB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACrC,CAAC;AAkHF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,CAoBhE,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { LineConstructor } from "../../../../math/geometry/line.js";
4
+ import { Point, PointConstructor } from "../../../../math/geometry/point.js";
5
+ import { Vector } from "../../../../math/geometry/vector.js";
6
+ import { GeneralSystem } from "../../../../math/systems/generalSystem.js";
7
+ import { randint } from "../../../../math/utils/random/randint.js";
8
+ import { EqualNode } from "../../../../tree/nodes/equations/equalNode.js";
9
+ import { opposite } from "../../../../tree/nodes/functions/oppositeNode.js";
10
+ import { reifyAlgebraic, } from "../../../../tree/nodes/nodeConstructor.js";
11
+ import { add } from "../../../../tree/nodes/operators/addNode.js";
12
+ import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
13
+ import { pointParser } from "../../../../tree/parsers/pointParser.js";
14
+ import { doWhile } from "../../../../utils/doWhile.js";
15
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
16
+ const getEquation = (coeffs) => {
17
+ const [a, b, c] = coeffs;
18
+ return new EqualNode(add(add(multiply(a, "x"), multiply(b, "y")), c).simplify({
19
+ forbidFactorize: true,
20
+ }), (0).toTree());
21
+ };
22
+ const getPropositions = (n, { answer }) => {
23
+ const propositions = [];
24
+ addValidProp(propositions, answer);
25
+ while (propositions.length < n) {
26
+ tryToAddWrongProp(propositions, PointConstructor.random("A").toCoords());
27
+ }
28
+ return shuffleProps(propositions, n);
29
+ };
30
+ const getAnswer = (identifiers) => {
31
+ const { cartesianCoeffs1, cartesianCoeffs2 } = identifiers;
32
+ const coeffs1 = cartesianCoeffs1.map((c) => reifyAlgebraic(c));
33
+ coeffs1[2] = opposite(coeffs1[2]).simplify();
34
+ const coeffs2 = cartesianCoeffs2.map((c) => reifyAlgebraic(c));
35
+ coeffs2[2] = opposite(coeffs2[2]).simplify();
36
+ const sys = new GeneralSystem([coeffs1, coeffs2]);
37
+ const { x, y } = sys.solve();
38
+ const point = new Point("A", x, y);
39
+ return point.toCoords();
40
+ };
41
+ const getInstruction = (identifiers) => {
42
+ const { cartesianCoeffs1, cartesianCoeffs2 } = identifiers;
43
+ const coeffs1 = cartesianCoeffs1.map((c) => reifyAlgebraic(c));
44
+ const coeffs2 = cartesianCoeffs2.map((c) => reifyAlgebraic(c));
45
+ return `Soit $d_1$ une droite d'équation cartésienne :
46
+
47
+ $$
48
+ ${getEquation(coeffs1).toTex()}
49
+ $$
50
+
51
+ et $d_2$ une droite d'équation cartésienne :
52
+
53
+ $$
54
+ ${getEquation(coeffs2).toTex()}
55
+ $$
56
+
57
+ Déterminer les coordonnées du point d'intersection de $d_1$ et $d_2$.`;
58
+ };
59
+ // const getHint: GetHint<Identifiers> = (identifiers) => {};
60
+ // const getCorrection: GetCorrection<Identifiers> = (identifiers) => {};
61
+ const getKeys = (identifiers) => {
62
+ return ["semicolon"];
63
+ };
64
+ const isAnswerValid = (ans, { answer }) => {
65
+ try {
66
+ const parsed = pointParser(ans);
67
+ if (!parsed)
68
+ return false;
69
+ return parsed.simplify().toCoords() === answer;
70
+ }
71
+ catch (err) {
72
+ return handleVEAError(err);
73
+ }
74
+ };
75
+ const getCartesianEquationsIntersectionQuestion = (ops) => {
76
+ const inter = PointConstructor.random("A");
77
+ const randVec = new Vector("u", randint(-10, 11, [0]).toTree(), randint(-10, 11, [0]).toTree());
78
+ const randVec2 = doWhile(() => new Vector("v", randint(-10, 11, [0]).toTree(), randint(-10, 11, [0]).toTree()), (v) => v.isColinear(randVec));
79
+ const line1 = LineConstructor.fromPointAndVector(inter, randVec);
80
+ const line2 = LineConstructor.fromPointAndVector(inter, randVec2);
81
+ const coeffs1 = line1.toCartesianCoeffs();
82
+ const coeffs2 = line2.toCartesianCoeffs();
83
+ const identifiers = {
84
+ cartesianCoeffs1: coeffs1.map((e) => e.toIdentifiers()),
85
+ cartesianCoeffs2: coeffs2.map((e) => e.toIdentifiers()),
86
+ };
87
+ return getQuestionFromIdentifiers(identifiers);
88
+ };
89
+ const getQuestionFromIdentifiers = (identifiers) => {
90
+ return {
91
+ answer: getAnswer(identifiers),
92
+ instruction: getInstruction(identifiers),
93
+ keys: getKeys(identifiers),
94
+ answerFormat: "tex",
95
+ identifiers,
96
+ // hint: getHint(identifiers),
97
+ // correction: getCorrection(identifiers),
98
+ };
99
+ };
100
+ export const cartesianEquationsIntersection = {
101
+ id: "cartesianEquationsIntersection",
102
+ label: "Déterminer l'intersection de deux droites à partir de leur équation cartésienne",
103
+ isSingleStep: true,
104
+ generator: (nb, opts) => getDistinctQuestions(() => getCartesianEquationsIntersectionQuestion(opts), nb),
105
+ qcmTimer: 60,
106
+ freeTimer: 60,
107
+ getPropositions,
108
+ isAnswerValid,
109
+ subject: "Mathématiques",
110
+ getInstruction,
111
+ // getHint,
112
+ // getCorrection,
113
+ getAnswer,
114
+ getQuestionFromIdentifiers,
115
+ };
@@ -1,8 +1,9 @@
1
1
  import { Exercise } from "../../../../exercises/exercise.js";
2
2
  import { PointIdentifiers } from "../../../../math/geometry/point.js";
3
+ import { VectorIdentifiers } from "../../../../math/geometry/vector.js";
3
4
  type Identifiers = {
4
- AIds: PointIdentifiers;
5
- BIds: PointIdentifiers;
5
+ pointIds: PointIdentifiers;
6
+ vectorIds: VectorIdentifiers;
6
7
  };
7
8
  export declare const drawLineFromCartesianEquation: Exercise<Identifiers>;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"drawLineFromCartesianEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/drawLineFromCartesianEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAQtC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAwHF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAmB/D,CAAC"}
1
+ {"version":3,"file":"drawLineFromCartesianEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/drawLineFromCartesianEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAQvC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AA+HF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAmB/D,CAAC"}