math-exercises 3.0.201 → 3.0.202

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 (113) hide show
  1. package/lib/exercises/math/dataRepresentations/scatterPlot/index.d.ts +2 -0
  2. package/lib/exercises/math/dataRepresentations/scatterPlot/index.d.ts.map +1 -1
  3. package/lib/exercises/math/dataRepresentations/scatterPlot/index.js +2 -2
  4. package/lib/exercises/math/dataRepresentations/scatterPlot/scatterPlotFillDataTableFromScatterPlotData.js +2 -2
  5. package/lib/exercises/math/dataRepresentations/scatterPlot/scatterPlotFillDataTableWithDataClassesFromScatterPlotData.d.ts.map +1 -1
  6. package/lib/exercises/math/dataRepresentations/scatterPlot/scatterPlotFillDataTableWithDataClassesFromScatterPlotData.js +9 -2
  7. package/lib/exercises/math/derivation/derivative/exp/secondDerivativeOfExpoFunction.js +1 -1
  8. package/lib/exercises/math/derivation/derivative/trigo/index.d.ts +1 -0
  9. package/lib/exercises/math/derivation/derivative/trigo/index.d.ts.map +1 -1
  10. package/lib/exercises/math/derivation/derivative/trigo/index.js +1 -1
  11. package/lib/exercises/math/derivation/derivative/trigo/sinCosDerivativeRewriteUsingCos2PlusSin2Equals1.d.ts.map +1 -1
  12. package/lib/exercises/math/derivation/derivative/trigo/sinCosDerivativeRewriteUsingCos2PlusSin2Equals1.js +1 -1
  13. package/lib/exercises/math/derivation/problems/index.d.ts +1 -0
  14. package/lib/exercises/math/derivation/problems/index.d.ts.map +1 -1
  15. package/lib/exercises/math/derivation/problems/index.js +1 -1
  16. package/lib/exercises/math/derivation/problems/problemMaximizeProfitFindProduction.d.ts.map +1 -1
  17. package/lib/exercises/math/derivation/problems/problemMaximizeProfitFindProduction.js +31 -21
  18. package/lib/exercises/math/derivation/tangent/derivativeEquationSolvingByManipulatingLineY.d.ts.map +1 -1
  19. package/lib/exercises/math/derivation/tangent/derivativeEquationSolvingByManipulatingLineY.js +8 -128
  20. package/lib/exercises/math/derivation/tangent/index.d.ts +1 -0
  21. package/lib/exercises/math/derivation/tangent/index.d.ts.map +1 -1
  22. package/lib/exercises/math/derivation/tangent/index.js +1 -1
  23. package/lib/exercises/math/derivation/variations/index.d.ts +1 -0
  24. package/lib/exercises/math/derivation/variations/index.d.ts.map +1 -1
  25. package/lib/exercises/math/derivation/variations/index.js +1 -1
  26. package/lib/exercises/math/derivation/variations/signVarTableQuotientFExp.d.ts.map +1 -1
  27. package/lib/exercises/math/derivation/variations/signVarTableQuotientFExp.js +47 -20
  28. package/lib/exercises/math/equaDiff/equaDiffAyPlusB.d.ts.map +1 -1
  29. package/lib/exercises/math/equaDiff/equaDiffAyPlusB.js +29 -6
  30. package/lib/exercises/math/equaDiff/equaDiffCheckSolutionFirstOrder.d.ts.map +1 -1
  31. package/lib/exercises/math/equaDiff/equaDiffCheckSolutionFirstOrder.js +33 -0
  32. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.d.ts +7 -0
  33. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.d.ts.map +1 -0
  34. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.js +86 -0
  35. package/lib/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.d.ts.map +1 -1
  36. package/lib/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.js +35 -7
  37. package/lib/exercises/math/equaDiff/index.d.ts +1 -1
  38. package/lib/exercises/math/equaDiff/index.d.ts.map +1 -1
  39. package/lib/exercises/math/equaDiff/index.js +1 -1
  40. package/lib/exercises/math/functions/integral/integralExpU.d.ts.map +1 -1
  41. package/lib/exercises/math/functions/integral/integralExpU.js +48 -0
  42. package/lib/exercises/math/functions/integral/integralFractions.d.ts.map +1 -1
  43. package/lib/exercises/math/functions/integral/integralFractions.js +52 -0
  44. package/lib/exercises/math/functions/integral/integralTrinomials.d.ts.map +1 -1
  45. package/lib/exercises/math/functions/integral/integralTrinomials.js +40 -0
  46. package/lib/exercises/math/functions/logarithm/log10Simplifying.js +2 -2
  47. package/lib/exercises/math/functions/logarithm/powerEquation.js +1 -1
  48. package/lib/exercises/math/geometry/parametric/extractVectorFromParametricLine.d.ts.map +1 -1
  49. package/lib/exercises/math/geometry/parametric/extractVectorFromParametricLine.js +30 -25
  50. package/lib/exercises/math/geometry/parametric/pointFromParametricLine.d.ts.map +1 -1
  51. package/lib/exercises/math/geometry/parametric/pointFromParametricLine.js +52 -5
  52. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.d.ts.map +1 -1
  53. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.js +26 -35
  54. package/lib/exercises/math/integration/fromExpr/index.d.ts +1 -0
  55. package/lib/exercises/math/integration/fromExpr/index.d.ts.map +1 -1
  56. package/lib/exercises/math/integration/fromExpr/index.js +1 -1
  57. package/lib/exercises/math/primitive/constantPrimitive.d.ts.map +1 -1
  58. package/lib/exercises/math/primitive/constantPrimitive.js +25 -1
  59. package/lib/exercises/math/primitive/exponentialPrimitive.d.ts.map +1 -1
  60. package/lib/exercises/math/primitive/exponentialPrimitive.js +17 -0
  61. package/lib/exercises/math/primitive/polynomialPrimitive.d.ts.map +1 -1
  62. package/lib/exercises/math/primitive/polynomialPrimitive.js +17 -1
  63. package/lib/exercises/math/primitive/sinCosPrimitive.d.ts.map +1 -1
  64. package/lib/exercises/math/primitive/sinCosPrimitive.js +20 -1
  65. package/lib/exercises/math/primitive/usualPrimitives.d.ts.map +1 -1
  66. package/lib/exercises/math/primitive/usualPrimitives.js +1 -0
  67. package/lib/exercises/math/sets/cartesianProduct/findCardinalOfCartesianProductOfFiniteSets.js +4 -4
  68. package/lib/exercises/math/sets/cartesianProduct/findCardinalOfCartesianProductOfFiniteSetsFromSituation.js +3 -3
  69. package/lib/exercises/math/sets/cartesianProduct/proposeElementInCartesianProductOfFiniteSets.js +4 -4
  70. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystemFromVecPath.js +1 -1
  71. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.d.ts.map +1 -1
  72. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.js +12 -25
  73. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts +1 -1
  74. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts.map +1 -1
  75. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.js +1 -2
  76. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.d.ts.map +1 -1
  77. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.js +11 -26
  78. package/lib/exercises/math/spaceGeometry/planes/index.d.ts +1 -0
  79. package/lib/exercises/math/spaceGeometry/planes/index.d.ts.map +1 -1
  80. package/lib/exercises/math/spaceGeometry/planes/index.js +1 -1
  81. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.d.ts.map +1 -1
  82. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.js +11 -25
  83. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.d.ts.map +1 -1
  84. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.js +25 -5
  85. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts +1 -0
  86. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts.map +1 -1
  87. package/lib/exercises/math/spaceGeometry/scalarProduct/index.js +1 -1
  88. package/lib/exercises/math/spaceGeometry/vectors/findLinearDecompositionWrtCoplanarUVFromCoords.js +2 -2
  89. package/lib/exercises/math/trigonometry/functions/equationCosOnRandomInterval.d.ts.map +1 -1
  90. package/lib/exercises/math/trigonometry/functions/equationCosOnRandomInterval.js +87 -24
  91. package/lib/exercises/pc/mathExosInPC.d.ts +1 -1
  92. package/lib/exercises/pc/mathExosInPC.d.ts.map +1 -1
  93. package/lib/exercises/pc/mathExosInPC.js +1 -1
  94. package/lib/index.d.ts +55 -0
  95. package/lib/index.d.ts.map +1 -1
  96. package/lib/math/geometry/spaceVector.d.ts +2 -0
  97. package/lib/math/geometry/spaceVector.d.ts.map +1 -1
  98. package/lib/math/geometry/spaceVector.js +40 -0
  99. package/lib/math/utils/polynomial/polynomialUtils.d.ts +2 -2
  100. package/lib/math/utils/polynomial/polynomialUtils.d.ts.map +1 -1
  101. package/lib/math/utils/polynomial/polynomialUtils.js +5 -2
  102. package/lib/tests/exoTest.js +1 -1
  103. package/lib/tests/questionTest.d.ts.map +1 -1
  104. package/lib/tests/questionTest.js +7 -3
  105. package/lib/tests/singleExo.test.d.ts.map +1 -1
  106. package/lib/tests/singleExo.test.js +2 -2
  107. package/lib/tree/utilities/nodeComparator.d.ts +1 -1
  108. package/lib/tree/utilities/nodeComparator.d.ts.map +1 -1
  109. package/lib/tree/utilities/nodeComparator.js +6 -4
  110. package/lib/tree/utilities/nodeSimplifier.d.ts +1 -0
  111. package/lib/tree/utilities/nodeSimplifier.d.ts.map +1 -1
  112. package/lib/tree/utilities/nodeSimplifier.js +40 -0
  113. package/package.json +1 -1
@@ -26,6 +26,36 @@ const getAnswer = (identifiers) => {
26
26
  const answer = identifiers.isSolution ? "Oui" : "Non";
27
27
  return answer;
28
28
  };
29
+ const getHint = () => {
30
+ return `Calcule la dérivée $y'$ de $y$. Puis, remplace ton résultat dans l'équation différentielle donnée. La fonction $y$ est une solution si et seulement si l'égalité est vérifiée pour tout réel $x$.`;
31
+ };
32
+ const getCorrection = (identifiers) => {
33
+ const { equaDiffIdentifiers, randFuncIdentifiers } = identifiers;
34
+ const equaDiff = reifyAlgebraic(equaDiffIdentifiers);
35
+ const y = reifyAlgebraic(randFuncIdentifiers);
36
+ const yPrime = y.derivative().simplify({ forbidFactorize: true });
37
+ return `On calcule la fonction dérivée de $y$ :
38
+
39
+ $$
40
+ y' = ${yPrime.toTex()}
41
+ $$
42
+
43
+ La fonction $y$ est solution de l'équation différentielle proposée si et seulement si :
44
+
45
+ $$
46
+ ${equaDiff.toTex()}
47
+ $$
48
+
49
+ C'est à dire si et seulement si :
50
+
51
+ $$
52
+ ${equaDiff.toDetailedEvaluation({ y: y, "y'": yPrime }).toTex()}
53
+ $$
54
+
55
+ ${identifiers.isSolution
56
+ ? `L'égalité est bien vérifiée pour tout réel $x$ : la fonction $y$ est donc bien une solution de cette équation différentielle.`
57
+ : "L'égalité n'est pas vérifiée pour tout réel $x$ : la fontion $y$ n'est donc pas une solution de cette équation différentielle."}.`;
58
+ };
29
59
  const getQuestionFromIdentifiers = (identifiers) => {
30
60
  const question = {
31
61
  answer: getAnswer(identifiers),
@@ -33,6 +63,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
33
63
  keys: [],
34
64
  answerFormat: "raw",
35
65
  identifiers,
66
+ hint: getHint(identifiers),
67
+ correction: getCorrection(identifiers),
36
68
  };
37
69
  return question;
38
70
  };
@@ -117,4 +149,5 @@ export const equaDiffCheckSolutionFirstOrder = {
117
149
  answerType: "QCU",
118
150
  subject: "Mathématiques",
119
151
  getQuestionFromIdentifiers,
152
+ hasHintAndCorrection: true,
120
153
  };
@@ -0,0 +1,7 @@
1
+ import { Exercise } from "../../../exercises/exercise.js";
2
+ type Identifiers = {
3
+ a: number;
4
+ };
5
+ export declare const exponentialDifferentialEquation: Exercise<Identifiers>;
6
+ export {};
7
+ //# sourceMappingURL=exponentialDifferentialEquation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exponentialDifferentialEquation.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/equaDiff/exponentialDifferentialEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAmGF,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,WAAW,CAajE,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { addValidProp, propWhile, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { randint } from "../../../math/utils/random/randint.js";
4
+ import { ExpNode } from "../../../tree/nodes/functions/expNode.js";
5
+ import { NumberNode } from "../../../tree/nodes/numbers/numberNode.js";
6
+ import { VariableNode } from "../../../tree/nodes/variables/variableNode.js";
7
+ import { EqualNode } from "../../../tree/nodes/equations/equalNode.js";
8
+ import { multiply, MultiplyNode, } from "../../../tree/nodes/operators/multiplyNode.js";
9
+ import { shuffle } from "../../../utils/alea/shuffle.js";
10
+ const getInstruction = (identifiers) => {
11
+ const { a } = identifiers;
12
+ const equation = new MultiplyNode(new NumberNode(a), new VariableNode("y"));
13
+ return `Résoudre l'équation différentielle suivante :
14
+
15
+ $$
16
+ y' = ${equation.toTex()}
17
+ $$`;
18
+ };
19
+ const getAnswer = (identifiers) => {
20
+ const { a } = identifiers;
21
+ const answer = new EqualNode(new VariableNode("y"), new MultiplyNode(new VariableNode("C"), new ExpNode(new MultiplyNode(new NumberNode(a), new VariableNode("x"))))).toTex();
22
+ return answer;
23
+ };
24
+ const getHint = () => {
25
+ return "La solution générale d'une équation différentielle de la forme $y' = ay$ est de la forme $y = Ce^{ax}$, où $C$ est une constante d'intégration.";
26
+ };
27
+ const getCorrection = (identifiers) => {
28
+ const { a } = identifiers;
29
+ return `La solution générale d'une équation différentielle de la forme $y' = ay$ est de la forme $y = Ce^{ax}$, où $C$ est une constante d'intégration.
30
+
31
+ Donc, la solution générale de l'équation différentielle $y' = ${multiply(a, "y").toTex()}$ est :
32
+
33
+ $$
34
+ y = Ce^{${multiply(a, "x").toTex()}}
35
+ $$`;
36
+ };
37
+ const getQuestionFromIdentifiers = (identifiers) => {
38
+ const question = {
39
+ instruction: getInstruction(identifiers),
40
+ startStatement: `y(x)`,
41
+ answer: getAnswer(identifiers),
42
+ hint: getHint(identifiers),
43
+ correction: getCorrection(identifiers),
44
+ keys: ["x", "y", "epower", "exp", "C", "equal"],
45
+ answerFormat: "tex",
46
+ identifiers,
47
+ };
48
+ return question;
49
+ };
50
+ const getExponentialEquation = () => {
51
+ const a = randint(-19, 20, [0]);
52
+ const identifiers = { a };
53
+ return getQuestionFromIdentifiers(identifiers);
54
+ };
55
+ const getPropositions = (n, { answer }) => {
56
+ const propositions = [];
57
+ addValidProp(propositions, answer);
58
+ const yNode = new VariableNode("y");
59
+ const cNode = new VariableNode("C");
60
+ const xNode = new VariableNode("x");
61
+ propWhile(propositions, n, () => {
62
+ const a = randint(1, 10);
63
+ const myWrongAnswer = new EqualNode(yNode, new MultiplyNode(cNode, new ExpNode(new MultiplyNode(new NumberNode(a), xNode))));
64
+ tryToAddWrongProp(propositions, myWrongAnswer.toTex());
65
+ });
66
+ return shuffle(propositions);
67
+ };
68
+ const isAnswerValid = (ans, { a }) => {
69
+ const answer = new EqualNode(new VariableNode("y"), new MultiplyNode(new VariableNode("C"), new ExpNode(new MultiplyNode(new NumberNode(a), new VariableNode("x")))), { allowRawRightChildAsSolution: true });
70
+ const texs = answer.toAllValidTexs();
71
+ return texs.includes(ans);
72
+ };
73
+ export const exponentialDifferentialEquation = {
74
+ id: "exponentialDifferentialEquation",
75
+ connector: "=",
76
+ label: "Équation différentielle $y' = ay$",
77
+ isSingleStep: false,
78
+ generator: (nb) => getDistinctQuestions(getExponentialEquation, nb),
79
+ qcmTimer: 60,
80
+ freeTimer: 60,
81
+ getPropositions,
82
+ isAnswerValid,
83
+ subject: "Mathématiques",
84
+ hasHintAndCorrection: true,
85
+ getQuestionFromIdentifiers,
86
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"exponentialDifferentialEquationWithIC.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA4GF,eAAO,MAAM,qCAAqC,EAAE,QAAQ,CAAC,WAAW,CAavE,CAAC"}
1
+ {"version":3,"file":"exponentialDifferentialEquationWithIC.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA2IF,eAAO,MAAM,qCAAqC,EAAE,QAAQ,CAAC,WAAW,CAcvE,CAAC"}
@@ -4,7 +4,7 @@ import { randint } from "../../../math/utils/random/randint.js";
4
4
  import { ExpNode } from "../../../tree/nodes/functions/expNode.js";
5
5
  import { NumberNode } from "../../../tree/nodes/numbers/numberNode.js";
6
6
  import { EqualNode } from "../../../tree/nodes/equations/equalNode.js";
7
- import { MultiplyNode } from "../../../tree/nodes/operators/multiplyNode.js";
7
+ import { multiply, MultiplyNode, } from "../../../tree/nodes/operators/multiplyNode.js";
8
8
  import { VariableNode } from "../../../tree/nodes/variables/variableNode.js";
9
9
  import { shuffle } from "../../../utils/alea/shuffle.js";
10
10
  const getInstruction = (identifiers) => {
@@ -24,12 +24,37 @@ const getAnswer = (identifiers) => {
24
24
  const answer = new EqualNode(new VariableNode("y"), solution).toTex();
25
25
  return answer;
26
26
  };
27
- // const getHint: GetHint<Identifiers> = (identifiers) => {
28
- // return ``;
29
- // };
30
- // const getCorrection: GetCorrection<Identifiers> = (identifiers) => {
31
- // return ``;
32
- // };
27
+ const getHint = (identifiers) => {
28
+ return `La solution générale d'une équation différentielle de la forme $y' = ay$ est de la forme $y = Ce^{ax}$, où $C$ est une constante d'intégration.
29
+
30
+ Pour déterminer $C$, utilise le fait que la solution $y$ vérifie :
31
+
32
+ $$
33
+ y(0) = ${identifiers.initialY}
34
+ $$`;
35
+ };
36
+ const getCorrection = (identifiers) => {
37
+ const { a } = identifiers;
38
+ return `La solution générale d'une équation différentielle de la forme $y' = ay$ est de la forme $y = Ce^{ax}$, où $C$ est une constante d'intégration.
39
+
40
+ Donc, la solution générale de l'équation différentielle $y' = ${multiply(a, "y").toTex()}$ est :
41
+
42
+ $$
43
+ y = Ce^{${multiply(a, "x").toTex()}}
44
+ $$
45
+
46
+ Or, on sait de plus que :
47
+
48
+ $$
49
+ y(0) = ${identifiers.initialY}
50
+ $$
51
+
52
+ On en déduit que l'unique solution de cette équation différentielle est :
53
+
54
+ $$
55
+ ${getAnswer(identifiers)}
56
+ $$`;
57
+ };
33
58
  const getQuestionFromIdentifiers = (identifiers) => {
34
59
  const question = {
35
60
  instruction: getInstruction(identifiers),
@@ -38,6 +63,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
38
63
  keys: ["x", "y", "epower", "exp", "equal"],
39
64
  answerFormat: "tex",
40
65
  identifiers,
66
+ hint: getHint(identifiers),
67
+ correction: getCorrection(identifiers),
41
68
  };
42
69
  return question;
43
70
  };
@@ -89,4 +116,5 @@ export const exponentialDifferentialEquationWithIC = {
89
116
  isAnswerValid,
90
117
  subject: "Mathématiques",
91
118
  getQuestionFromIdentifiers,
119
+ hasHintAndCorrection: true,
92
120
  };
@@ -1,4 +1,4 @@
1
- export * from "./equaDiffGeneralForme.js";
1
+ export * from "./exponentialDifferentialEquation.js";
2
2
  export * from "./exponentialDifferentialEquationWithIC.js";
3
3
  export * from "./equaDiffCheckSolutionFirstOrder.js";
4
4
  export * from "./equaDiffAyPlusB.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/equaDiff/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/equaDiff/index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,sBAAsB,CAAC"}
@@ -1,4 +1,4 @@
1
- export * from "./equaDiffGeneralForme.js";
1
+ export * from "./exponentialDifferentialEquation.js";
2
2
  export * from "./exponentialDifferentialEquationWithIC.js";
3
3
  export * from "./equaDiffCheckSolutionFirstOrder.js";
4
4
  export * from "./equaDiffAyPlusB.js";
@@ -1 +1 @@
1
- {"version":3,"file":"integralExpU.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralExpU.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA+JF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAW9C,CAAC"}
1
+ {"version":3,"file":"integralExpU.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralExpU.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8NF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAY9C,CAAC"}
@@ -8,6 +8,7 @@ import { AddNode } from "../../../../tree/nodes/operators/addNode.js";
8
8
  import { MultiplyNode } from "../../../../tree/nodes/operators/multiplyNode.js";
9
9
  import { SubstractNode } from "../../../../tree/nodes/operators/substractNode.js";
10
10
  import { coinFlip } from "../../../../utils/alea/coinFlip.js";
11
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
11
12
  const doesTrinomialVanishInInterval = (trinomial, a, b) => {
12
13
  const calculate = (x) => trinomial.calculate(x);
13
14
  for (let x = a; x <= b; x++) {
@@ -45,6 +46,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
45
46
  keys: ["epower", "e"],
46
47
  answerFormat: "tex",
47
48
  identifiers,
49
+ hint: getHint(identifiers),
50
+ correction: getCorrection(identifiers),
48
51
  };
49
52
  return question;
50
53
  };
@@ -75,6 +78,50 @@ const getIntegralExpUQuestion = () => {
75
78
  };
76
79
  return getQuestionFromIdentifiers(identifiers);
77
80
  };
81
+ const getHint = (identifiers) => {
82
+ const { questionType, trinomial } = identifiers;
83
+ const trinom = new Trinom(trinomial[0], trinomial[1], trinomial[2]);
84
+ const affine = trinom.derivate();
85
+ const polynomial = questionType === "Trinomial" ? trinom : affine;
86
+ const expU = new MultiplyNode(polynomial.derivate().toTree(), new ExpNode(polynomial.toTree()));
87
+ return `Commence par déterminer une primitive de la fonction $x\\mapsto ${expU.toTex()}$.
88
+
89
+ Puis, utilise le fait que si $F$ est une primitive d'une fonction $f$, alors :
90
+
91
+ $$
92
+ \\int_{a}^b f(x) \\, \\mathrm{d}x = F(b)-F(a)
93
+ $$`;
94
+ };
95
+ const getCorrection = (identifiers) => {
96
+ const { lowerBound, upperBound, questionType, trinomial } = identifiers;
97
+ const trinom = new Trinom(trinomial[0], trinomial[1], trinomial[2]);
98
+ const affine = trinom.derivate();
99
+ const polynomial = questionType === "Trinomial" ? trinom : affine;
100
+ const expU = new MultiplyNode(polynomial.derivate().toTree(), new ExpNode(polynomial.toTree()));
101
+ const integral = new IntegralNode(expU, lowerBound.toTree(), upperBound.toTree(), "x");
102
+ return `On remarque que :
103
+
104
+ $$
105
+ ${expU.toTex()} = u'(x)e^{u(x)}
106
+ $$
107
+
108
+ où $u(x) = ${questionType === "Trinomial" ? trinom.toTex() : affine.toTex()}$.
109
+
110
+ Une primitive de la fonction $x\\mapsto ${expU.toTex()}$ est donc :
111
+
112
+ $$
113
+ F(x) = ${new ExpNode(polynomial.toTree()).toTex()}
114
+ $$
115
+
116
+ On a donc :
117
+
118
+ ${alignTex([
119
+ ["", integral.toTex()],
120
+ ["=", `F(${upperBound.frenchify()}) - F(${lowerBound.frenchify()})`],
121
+ ["=", getAnswer(identifiers)],
122
+ ])}
123
+ `;
124
+ };
78
125
  const getPropositions = (n, { answer, questionType, trinomial, upperBound, lowerBound }) => {
79
126
  const propositions = [];
80
127
  addValidProp(propositions, answer);
@@ -112,4 +159,5 @@ export const integralExpU = {
112
159
  isAnswerValid,
113
160
  subject: "Mathématiques",
114
161
  getQuestionFromIdentifiers,
162
+ hasHintAndCorrection: true,
115
163
  };
@@ -1 +1 @@
1
- {"version":3,"file":"integralFractions.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralFractions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA2NF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAYnD,CAAC"}
1
+ {"version":3,"file":"integralFractions.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralFractions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA6RF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAanD,CAAC"}
@@ -2,12 +2,14 @@ import { addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../..
2
2
  import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
3
  import { Trinom, TrinomConstructor } from "../../../../math/polynomials/trinom.js";
4
4
  import { randint } from "../../../../math/utils/random/randint.js";
5
+ import { abs } from "../../../../tree/nodes/functions/absNode.js";
5
6
  import { IntegralNode } from "../../../../tree/nodes/functions/integralNode.js";
6
7
  import { LogNode } from "../../../../tree/nodes/functions/logNode.js";
7
8
  import { AddNode } from "../../../../tree/nodes/operators/addNode.js";
8
9
  import { FractionNode } from "../../../../tree/nodes/operators/fractionNode.js";
9
10
  import { SubstractNode } from "../../../../tree/nodes/operators/substractNode.js";
10
11
  import { coinFlip } from "../../../../utils/alea/coinFlip.js";
12
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
11
13
  const doesTrinomialVanishInInterval = (trinomial, a, b) => {
12
14
  const calculate = (x) => trinomial.calculate(x);
13
15
  for (let x = a; x <= b; x++) {
@@ -46,6 +48,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
46
48
  instruction: getInstruction(identifiers),
47
49
  keys: ["lnBrackets"],
48
50
  answerFormat: "tex",
51
+ hint: getHint(identifiers),
52
+ correction: getCorrection(identifiers),
49
53
  identifiers,
50
54
  };
51
55
  return question;
@@ -80,6 +84,53 @@ const getIntegralFractionsQuestion = () => {
80
84
  };
81
85
  return getQuestionFromIdentifiers(identifiers);
82
86
  };
87
+ const getHint = (identifiers) => {
88
+ const { questionType, trinomial } = identifiers;
89
+ const trinom = new Trinom(trinomial[0], trinomial[1], trinomial[2]);
90
+ const affine = trinom.derivate();
91
+ const fraction = questionType === "Trinomial"
92
+ ? new FractionNode(affine.toTree(), trinom.toTree())
93
+ : new FractionNode(affine.coefficients[1].toTree(), affine.toTree());
94
+ return `Commence par déterminer une primitive de la fonction $x\\mapsto ${fraction.toTex()}$.
95
+
96
+ Puis, utilise le fait que si $F$ est une primitive d'une fonction $f$, alors :
97
+
98
+ $$
99
+ \\int_{a}^b f(x) \\, \\mathrm{d}x = F(b)-F(a)
100
+ $$`;
101
+ };
102
+ const getCorrection = (identifiers) => {
103
+ const { lowerBound, upperBound, questionType, trinomial } = identifiers;
104
+ const trinom = new Trinom(trinomial[0], trinomial[1], trinomial[2]);
105
+ const affine = trinom.derivate();
106
+ const fraction = questionType === "Trinomial"
107
+ ? new FractionNode(affine.toTree(), trinom.toTree())
108
+ : new FractionNode(affine.coefficients[1].toTree(), affine.toTree());
109
+ const log = new LogNode(abs(questionType === "Trinomial" ? trinom.toTree() : affine.toTree()));
110
+ const integral = new IntegralNode(fraction, lowerBound.toTree(), upperBound.toTree(), "x");
111
+ return `On remarque que :
112
+
113
+ $$
114
+ ${fraction.toTex()} = \\frac{u'}{u}
115
+ $$
116
+
117
+ où $u(x) = ${questionType === "Trinomial" ? trinom.toTex() : affine.toTex()}$.
118
+
119
+ Une primitive de la fonction $x\\mapsto ${fraction.toTex()}$ est donc :
120
+
121
+ $$
122
+ F(x) = ${log.toTex()}
123
+ $$
124
+
125
+ On a donc :
126
+
127
+ ${alignTex([
128
+ ["", integral.toTex()],
129
+ ["=", `F(${upperBound.frenchify()}) - F(${lowerBound.frenchify()})`],
130
+ ["=", getAnswer(identifiers)],
131
+ ])}
132
+ `;
133
+ };
83
134
  const getPropositions = (n, { answer, questionType, trinomial, upperBound, lowerBound }) => {
84
135
  const propositions = [];
85
136
  addValidProp(propositions, answer);
@@ -128,4 +179,5 @@ export const integralFractions = {
128
179
  isAnswerValid,
129
180
  subject: "Mathématiques",
130
181
  getQuestionFromIdentifiers,
182
+ hasHintAndCorrection: true,
131
183
  };
@@ -1 +1 @@
1
- {"version":3,"file":"integralTrinomials.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralTrinomials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAwGF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAYpD,CAAC"}
1
+ {"version":3,"file":"integralTrinomials.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/integral/integralTrinomials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAqJF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAapD,CAAC"}
@@ -4,6 +4,7 @@ import { numberVEA } from "../../../../exercises/vea/numberVEA.js";
4
4
  import { Polynomial } from "../../../../math/polynomials/polynomial.js";
5
5
  import { randint } from "../../../../math/utils/random/randint.js";
6
6
  import { IntegralNode } from "../../../../tree/nodes/functions/integralNode.js";
7
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
7
8
  const getInstruction = (identifiers) => {
8
9
  const { lowerBound, upperBound, quadrinomial } = identifiers;
9
10
  const quadrinomial1 = new Polynomial(quadrinomial);
@@ -50,6 +51,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
50
51
  keys: [],
51
52
  answerFormat: "tex",
52
53
  identifiers,
54
+ hint: getHint(identifiers),
55
+ correction: getCorrection(identifiers),
53
56
  };
54
57
  return question;
55
58
  };
@@ -75,6 +78,42 @@ const getPropositions = (n, { answer, lowerBound, upperBound, quadrinomial }) =>
75
78
  });
76
79
  return shuffleProps(propositions, n);
77
80
  };
81
+ const getHint = (identifiers) => {
82
+ const { quadrinomial } = identifiers;
83
+ const quadrinomial1 = new Polynomial(quadrinomial);
84
+ const trinomial = quadrinomial1.derivate();
85
+ return `Commence par déterminer une primitive de la fonction $x\\mapsto ${trinomial
86
+ .toTree()
87
+ .toTex()}$.
88
+
89
+ Puis, utilise le fait que si $F$ est une primitive d'une fonction $f$, alors :
90
+
91
+ $$
92
+ \\int_{a}^b f(x) \\, \\mathrm{d}x = F(b)-F(a)
93
+ $$`;
94
+ };
95
+ const getCorrection = (identifiers) => {
96
+ const { lowerBound, upperBound, quadrinomial } = identifiers;
97
+ const quadrinomial1 = new Polynomial(quadrinomial);
98
+ const trinomial = quadrinomial1.derivate();
99
+ const integral = new IntegralNode(trinomial.toTree(), lowerBound.toTree(), upperBound.toTree(), "x").toTex();
100
+ return `Une primitive de la fonction $x\\mapsto ${trinomial
101
+ .toTree()
102
+ .toTex()}$ est :
103
+
104
+ $$
105
+ F(x) = ${quadrinomial1.toTree().toTex()}
106
+ $$
107
+
108
+ On a donc :
109
+
110
+ ${alignTex([
111
+ ["", integral],
112
+ ["=", `F(${upperBound.frenchify()}) - F(${lowerBound.frenchify()})`],
113
+ ["=", getAnswer(identifiers)],
114
+ ])}
115
+ `;
116
+ };
78
117
  const isAnswerValid = (ans, { answer }) => {
79
118
  return numberVEA(ans, answer);
80
119
  };
@@ -89,4 +128,5 @@ export const integralTrinomials = {
89
128
  isAnswerValid,
90
129
  subject: "Mathématiques",
91
130
  getQuestionFromIdentifiers,
131
+ hasHintAndCorrection: true,
92
132
  };
@@ -99,7 +99,7 @@ const isAnswerValid = (ans, { nb, powers, signs, isLog10 }) => {
99
99
  export const log10SumSimplifying = {
100
100
  id: "log10SumSimplifying",
101
101
  connector: "=",
102
- label: "Simplifer une somme de logarithmes décimaux",
102
+ label: "Simplifier une somme de logarithmes décimaux",
103
103
  isSingleStep: true,
104
104
  generator: (nb) => getDistinctQuestions(() => getLog10SumSimplifyingQuestion({ isLog10: true }), nb),
105
105
  qcmTimer: 60,
@@ -112,7 +112,7 @@ export const log10SumSimplifying = {
112
112
  export const logSumSimplifying = {
113
113
  id: "logSumSimplifying",
114
114
  connector: "=",
115
- label: "Simplifer une somme de logarithmes népériens",
115
+ label: "Simplifier une somme de logarithmes népériens",
116
116
  isSingleStep: true,
117
117
  generator: (nb) => getDistinctQuestions(() => getLog10SumSimplifyingQuestion({ isLog10: false }), nb),
118
118
  qcmTimer: 60,
@@ -129,7 +129,7 @@ const options = [
129
129
  ];
130
130
  export const powerEquation = {
131
131
  id: "powerEquation",
132
- label: "Résoudre une équation de type $a^x = b$",
132
+ label: "Résoudre une équation du type $a^x = b$",
133
133
  isSingleStep: true,
134
134
  generator: (nb, opts) => getDistinctQuestions(() => getPowerEquationQuestion(opts), nb),
135
135
  qcmTimer: 60,
@@ -1 +1 @@
1
- {"version":3,"file":"extractVectorFromParametricLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/parametric/extractVectorFromParametricLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AA6GF,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,WAAW,CAkBjE,CAAC"}
1
+ {"version":3,"file":"extractVectorFromParametricLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/parametric/extractVectorFromParametricLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAgHF,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,WAAW,CAmBjE,CAAC"}
@@ -33,29 +33,33 @@ où $t\\in \\mathbb{R}$.
33
33
  Donner les coordonnées d'un vecteur directeur de la droite $d$.
34
34
  `;
35
35
  };
36
- // const getHint: GetHint<Identifiers> = (identifiers) => {
37
- // return `Il suffit de remplacer $t$ par une valeur afin d'obtenir les coordonnées d'un point de la droite.`;
38
- // };
39
- // const getCorrection: GetCorrection<Identifiers> = (identifiers) => {
40
- // const line = new ParametricLine(
41
- // SpacePointConstructor.fromScalars(identifiers.startPoint),
42
- // SpaceVectorConstructor.fromScalars(identifiers.vector),
43
- // );
44
- // const detailedEquations = line.toDetailedEvaluation(new NumberNode(0));
45
- // const point = line.getPointCoords(new NumberNode(0));
46
- // return `Pour obtenir les coordonnées d'un point appartenant à la droite, il suffit de remplacer $t$ par n'importe quelle valeur dans les trois équations. Par simplicité, prenons $t = 0$. On obtient alors :
47
- // $$
48
- // \\left\\{\\begin{matrix}
49
- // x=${detailedEquations[0].toTex()} \\\\
50
- // y=${detailedEquations[1].toTex()} \\\\
51
- // z=${detailedEquations[2].toTex()}
52
- // \\end{matrix}
53
- // \\right.
54
- // $$
55
- // On en déduit que le point de coordonnées $\\left(${point
56
- // .map((e) => e.toTex())
57
- // .join(";")}\\right)$ appartient à la droite $d$.`;
58
- // };
36
+ const getHint = () => {
37
+ return `Dans un repère de l'espace, la droite $d$ passant par le point $A(x_0; y_0; z_0)$ et de vecteur directeur $\\overrightarrow{u}(a,b,c)$ a pour représentation paramétrique :
38
+
39
+ $$
40
+ \\left\\{\\begin{matrix}
41
+ x=x_0 + at \\\\
42
+ y=y_0 + bt \\\\
43
+ z=z_0 + ct
44
+ \\end{matrix}
45
+ \\right.
46
+ $$`;
47
+ };
48
+ const getCorrection = (identifiers) => {
49
+ const { startPoint, vector } = identifiers;
50
+ return `Dans un repère de l'espace, la droite $d$ passant par le point $A(x_0; y_0; z_0)$ et de vecteur directeur $\\overrightarrow{u}(a,b,c)$ a pour représentation paramétrique :
51
+
52
+ $$
53
+ \\left\\{\\begin{matrix}
54
+ x=x_0 + at \\\\
55
+ y=y_0 + bt \\\\
56
+ z=z_0 + ct
57
+ \\end{matrix}
58
+ \\right.
59
+ $$
60
+
61
+ Ici, la droite $d$ passe donc par le point $A(${startPoint[0]}; ${startPoint[1]}; ${startPoint[2]})$ et a pour vecteur directeur $\\overrightarrow{u}(${vector[0]}; ${vector[1]}; ${vector[2]})$.`;
62
+ };
59
63
  const getKeys = () => {
60
64
  return ["semicolon"];
61
65
  };
@@ -87,8 +91,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
87
91
  keys: getKeys(identifiers),
88
92
  answerFormat: "tex",
89
93
  identifiers,
90
- // hint: getHint(identifiers),
91
- // correction: getCorrection(identifiers),
94
+ hint: getHint(identifiers),
95
+ correction: getCorrection(identifiers),
92
96
  };
93
97
  return question;
94
98
  };
@@ -107,5 +111,6 @@ export const extractVectorFromParametricLine = {
107
111
  // getCorrection,
108
112
  getAnswer,
109
113
  getInstruction,
114
+ hasHintAndCorrection: true,
110
115
  getQuestionFromIdentifiers,
111
116
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pointFromParametricLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/parametric/pointFromParametricLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAwFF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAmBzD,CAAC"}
1
+ {"version":3,"file":"pointFromParametricLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/parametric/pointFromParametricLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAerC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkJF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAoBzD,CAAC"}