math-exercises 3.0.201 → 3.0.203

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 (198) 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/productOfSinAXPlusBCosCXPlusDDerivative.js +1 -1
  12. package/lib/exercises/math/derivation/derivative/trigo/sinAndCosMixedWithSquareDerivative.js +1 -1
  13. package/lib/exercises/math/derivation/derivative/trigo/sinCosDerivativeRewriteUsingCos2PlusSin2Equals1.js +1 -1
  14. package/lib/exercises/math/derivation/problems/index.d.ts +1 -0
  15. package/lib/exercises/math/derivation/problems/index.d.ts.map +1 -1
  16. package/lib/exercises/math/derivation/problems/index.js +1 -1
  17. package/lib/exercises/math/derivation/problems/problemMaximizeProfitFindProduction.d.ts.map +1 -1
  18. package/lib/exercises/math/derivation/problems/problemMaximizeProfitFindProduction.js +31 -21
  19. package/lib/exercises/math/derivation/tangent/derivativeEquationSolvingByManipulatingLineY.d.ts.map +1 -1
  20. package/lib/exercises/math/derivation/tangent/derivativeEquationSolvingByManipulatingLineY.js +8 -128
  21. package/lib/exercises/math/derivation/tangent/index.d.ts +1 -0
  22. package/lib/exercises/math/derivation/tangent/index.d.ts.map +1 -1
  23. package/lib/exercises/math/derivation/tangent/index.js +1 -1
  24. package/lib/exercises/math/derivation/variations/index.d.ts +1 -0
  25. package/lib/exercises/math/derivation/variations/index.d.ts.map +1 -1
  26. package/lib/exercises/math/derivation/variations/index.js +1 -1
  27. package/lib/exercises/math/derivation/variations/signVarTableQuotientFExp.d.ts.map +1 -1
  28. package/lib/exercises/math/derivation/variations/signVarTableQuotientFExp.js +47 -20
  29. package/lib/exercises/math/equaDiff/equaDiffAyPlusB.d.ts.map +1 -1
  30. package/lib/exercises/math/equaDiff/equaDiffAyPlusB.js +29 -6
  31. package/lib/exercises/math/equaDiff/equaDiffCheckSolutionFirstOrder.d.ts.map +1 -1
  32. package/lib/exercises/math/equaDiff/equaDiffCheckSolutionFirstOrder.js +33 -0
  33. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.d.ts +7 -0
  34. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.d.ts.map +1 -0
  35. package/lib/exercises/math/equaDiff/exponentialDifferentialEquation.js +86 -0
  36. package/lib/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.d.ts.map +1 -1
  37. package/lib/exercises/math/equaDiff/exponentialDifferentialEquationWithIC.js +35 -7
  38. package/lib/exercises/math/equaDiff/index.d.ts +1 -1
  39. package/lib/exercises/math/equaDiff/index.d.ts.map +1 -1
  40. package/lib/exercises/math/equaDiff/index.js +1 -1
  41. package/lib/exercises/math/functions/integral/integralExpU.d.ts.map +1 -1
  42. package/lib/exercises/math/functions/integral/integralExpU.js +48 -0
  43. package/lib/exercises/math/functions/integral/integralFractions.d.ts.map +1 -1
  44. package/lib/exercises/math/functions/integral/integralFractions.js +52 -0
  45. package/lib/exercises/math/functions/integral/integralTrinomials.d.ts.map +1 -1
  46. package/lib/exercises/math/functions/integral/integralTrinomials.js +40 -0
  47. package/lib/exercises/math/functions/logarithm/log10Simplifying.js +2 -2
  48. package/lib/exercises/math/functions/logarithm/powerEquation.js +1 -1
  49. package/lib/exercises/math/geometry/angles/anglesUsingIsParallel.d.ts.map +1 -1
  50. package/lib/exercises/math/geometry/angles/anglesUsingIsParallel.js +172 -51
  51. package/lib/exercises/math/geometry/angles/index.d.ts +1 -0
  52. package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -1
  53. package/lib/exercises/math/geometry/angles/index.js +1 -1
  54. package/lib/exercises/math/geometry/parametric/extractVectorFromParametricLine.d.ts.map +1 -1
  55. package/lib/exercises/math/geometry/parametric/extractVectorFromParametricLine.js +30 -25
  56. package/lib/exercises/math/geometry/parametric/pointFromParametricLine.d.ts.map +1 -1
  57. package/lib/exercises/math/geometry/parametric/pointFromParametricLine.js +52 -5
  58. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.d.ts.map +1 -1
  59. package/lib/exercises/math/integration/fromExpr/areaBetweenCrossingCurvesFixedPosFromExpr.js +26 -35
  60. package/lib/exercises/math/integration/fromExpr/index.d.ts +1 -0
  61. package/lib/exercises/math/integration/fromExpr/index.d.ts.map +1 -1
  62. package/lib/exercises/math/integration/fromExpr/index.js +1 -1
  63. package/lib/exercises/math/limits/index.d.ts +1 -5
  64. package/lib/exercises/math/limits/index.d.ts.map +1 -1
  65. package/lib/exercises/math/limits/index.js +1 -5
  66. package/lib/exercises/math/limits/limitReading.d.ts.map +1 -1
  67. package/lib/exercises/math/limits/limitReading.js +70 -0
  68. package/lib/exercises/math/limits/polynomLimit.d.ts.map +1 -1
  69. package/lib/exercises/math/limits/polynomLimit.js +55 -4
  70. package/lib/exercises/math/limits/polynomLimitNoFI.d.ts.map +1 -1
  71. package/lib/exercises/math/limits/polynomLimitNoFI.js +35 -2
  72. package/lib/exercises/math/limits/sequenceGeometricLimit.d.ts.map +1 -1
  73. package/lib/exercises/math/limits/sequenceGeometricLimit.js +45 -9
  74. package/lib/exercises/math/limits/sequencePolynomLimit.d.ts.map +1 -1
  75. package/lib/exercises/math/limits/sequencePolynomLimit.js +56 -3
  76. package/lib/exercises/math/limits/sequencePolynomNoFILimit.d.ts.map +1 -1
  77. package/lib/exercises/math/limits/sequencePolynomNoFILimit.js +32 -0
  78. package/lib/exercises/math/limits/sequencePolynomProductLimit.d.ts.map +1 -1
  79. package/lib/exercises/math/limits/sequencePolynomProductLimit.js +33 -3
  80. package/lib/exercises/math/limits/sequenceRationalFracLimit.d.ts.map +1 -1
  81. package/lib/exercises/math/limits/sequenceRationalFracLimit.js +2 -2
  82. package/lib/exercises/math/limits/sequences/index.d.ts +6 -0
  83. package/lib/exercises/math/limits/sequences/index.d.ts.map +1 -0
  84. package/lib/exercises/math/limits/sequences/index.js +5 -0
  85. package/lib/exercises/math/limits/sequences/sequenceGeometricLimit.d.ts +9 -0
  86. package/lib/exercises/math/limits/sequences/sequenceGeometricLimit.d.ts.map +1 -0
  87. package/lib/exercises/math/limits/sequences/sequenceGeometricLimit.js +110 -0
  88. package/lib/exercises/math/limits/sequences/sequencePolynomLimit.d.ts +7 -0
  89. package/lib/exercises/math/limits/sequences/sequencePolynomLimit.d.ts.map +1 -0
  90. package/lib/exercises/math/limits/sequences/sequencePolynomLimit.js +116 -0
  91. package/lib/exercises/math/limits/sequences/sequencePolynomNoFILimit.d.ts +7 -0
  92. package/lib/exercises/math/limits/sequences/sequencePolynomNoFILimit.d.ts.map +1 -0
  93. package/lib/exercises/math/limits/sequences/sequencePolynomNoFILimit.js +95 -0
  94. package/lib/exercises/math/limits/sequences/sequencePolynomProductLimit.d.ts +8 -0
  95. package/lib/exercises/math/limits/sequences/sequencePolynomProductLimit.d.ts.map +1 -0
  96. package/lib/exercises/math/limits/sequences/sequencePolynomProductLimit.js +111 -0
  97. package/lib/exercises/math/limits/sequences/sequenceRationalFracLimit.d.ts +8 -0
  98. package/lib/exercises/math/limits/sequences/sequenceRationalFracLimit.d.ts.map +1 -0
  99. package/lib/exercises/math/limits/sequences/sequenceRationalFracLimit.js +114 -0
  100. package/lib/exercises/math/primitive/constantPrimitive.d.ts.map +1 -1
  101. package/lib/exercises/math/primitive/constantPrimitive.js +25 -1
  102. package/lib/exercises/math/primitive/exponentialPrimitive.d.ts.map +1 -1
  103. package/lib/exercises/math/primitive/exponentialPrimitive.js +17 -0
  104. package/lib/exercises/math/primitive/polynomialPrimitive.d.ts.map +1 -1
  105. package/lib/exercises/math/primitive/polynomialPrimitive.js +17 -1
  106. package/lib/exercises/math/primitive/sinCosPrimitive.d.ts.map +1 -1
  107. package/lib/exercises/math/primitive/sinCosPrimitive.js +20 -1
  108. package/lib/exercises/math/primitive/usualPrimitives.d.ts.map +1 -1
  109. package/lib/exercises/math/primitive/usualPrimitives.js +1 -0
  110. package/lib/exercises/math/sequences/index.d.ts +1 -0
  111. package/lib/exercises/math/sequences/index.d.ts.map +1 -1
  112. package/lib/exercises/math/sequences/index.js +1 -0
  113. package/lib/exercises/math/sequences/proofByInduction/index.d.ts +5 -0
  114. package/lib/exercises/math/sequences/proofByInduction/index.d.ts.map +1 -0
  115. package/lib/exercises/math/sequences/proofByInduction/index.js +4 -0
  116. package/lib/exercises/math/sequences/proofByInduction/proofByInductionCheckInitialization.d.ts +10 -0
  117. package/lib/exercises/math/sequences/proofByInduction/proofByInductionCheckInitialization.d.ts.map +1 -0
  118. package/lib/exercises/math/sequences/proofByInduction/proofByInductionCheckInitialization.js +236 -0
  119. package/lib/exercises/math/sequences/proofByInduction/proofByInductionReorderProof.d.ts +13 -0
  120. package/lib/exercises/math/sequences/proofByInduction/proofByInductionReorderProof.d.ts.map +1 -0
  121. package/lib/exercises/math/sequences/proofByInduction/proofByInductionReorderProof.js +244 -0
  122. package/lib/exercises/math/sequences/proofByInduction/proofByInductionSituations.d.ts +98 -0
  123. package/lib/exercises/math/sequences/proofByInduction/proofByInductionSituations.d.ts.map +1 -0
  124. package/lib/exercises/math/sequences/proofByInduction/proofByInductionSituations.js +175 -0
  125. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWriteMissingStep.d.ts +13 -0
  126. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWriteMissingStep.d.ts.map +1 -0
  127. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWriteMissingStep.js +317 -0
  128. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWritePropAtRankKPlus1.d.ts +13 -0
  129. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWritePropAtRankKPlus1.d.ts.map +1 -0
  130. package/lib/exercises/math/sequences/proofByInduction/proofByInductionWritePropAtRankKPlus1.js +265 -0
  131. package/lib/exercises/math/sets/cartesianProduct/findCardinalOfCartesianProductOfFiniteSets.js +4 -4
  132. package/lib/exercises/math/sets/cartesianProduct/findCardinalOfCartesianProductOfFiniteSetsFromSituation.js +3 -3
  133. package/lib/exercises/math/sets/cartesianProduct/proposeElementInCartesianProductOfFiniteSets.js +4 -4
  134. package/lib/exercises/math/spaceGeometry/basis/spaceCoordinatesOfPointInCubeCoordSystemFromVecPath.js +1 -1
  135. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.d.ts.map +1 -1
  136. package/lib/exercises/math/spaceGeometry/orthogonalProjection/findOrthogonalProjectionOfPointOnPlane.js +12 -25
  137. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts +1 -1
  138. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.d.ts.map +1 -1
  139. package/lib/exercises/math/spaceGeometry/orthogonalProjection/index.js +1 -2
  140. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.d.ts.map +1 -1
  141. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlanePointsCoords.js +11 -26
  142. package/lib/exercises/math/spaceGeometry/planes/index.d.ts +1 -0
  143. package/lib/exercises/math/spaceGeometry/planes/index.d.ts.map +1 -1
  144. package/lib/exercises/math/spaceGeometry/planes/index.js +1 -1
  145. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.d.ts.map +1 -1
  146. package/lib/exercises/math/spaceGeometry/planes/planePlaneRelativePositions.js +11 -25
  147. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.d.ts.map +1 -1
  148. package/lib/exercises/math/spaceGeometry/scalarProduct/angleFromScalarProductFromSpacePointCoords.js +25 -5
  149. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts +1 -0
  150. package/lib/exercises/math/spaceGeometry/scalarProduct/index.d.ts.map +1 -1
  151. package/lib/exercises/math/spaceGeometry/scalarProduct/index.js +1 -1
  152. package/lib/exercises/math/spaceGeometry/vectors/findLinearDecompositionWrtCoplanarUVFromCoords.js +2 -2
  153. package/lib/exercises/math/trigonometry/functions/equationCosOnRandomInterval.d.ts.map +1 -1
  154. package/lib/exercises/math/trigonometry/functions/equationCosOnRandomInterval.js +87 -24
  155. package/lib/exercises/pc/mathExosInPC.d.ts +1 -1
  156. package/lib/exercises/pc/mathExosInPC.d.ts.map +1 -1
  157. package/lib/exercises/pc/mathExosInPC.js +1 -1
  158. package/lib/exercises/vea/polynomialVEA.d.ts.map +1 -1
  159. package/lib/exercises/vea/polynomialVEA.js +4 -0
  160. package/lib/index.d.ts +104 -13
  161. package/lib/index.d.ts.map +1 -1
  162. package/lib/math/geometry/point.d.ts.map +1 -1
  163. package/lib/math/geometry/point.js +1 -1
  164. package/lib/math/geometry/spaceVector.d.ts +2 -0
  165. package/lib/math/geometry/spaceVector.d.ts.map +1 -1
  166. package/lib/math/geometry/spaceVector.js +40 -0
  167. package/lib/math/utils/functions/functionDecomposition.d.ts +2 -2
  168. package/lib/math/utils/functions/functionDecomposition.d.ts.map +1 -1
  169. package/lib/math/utils/polynomial/polynomialUtils.d.ts +2 -2
  170. package/lib/math/utils/polynomial/polynomialUtils.d.ts.map +1 -1
  171. package/lib/math/utils/polynomial/polynomialUtils.js +5 -2
  172. package/lib/tests/exoTest.d.ts.map +1 -1
  173. package/lib/tests/exoTest.js +8 -12
  174. package/lib/tests/questionTest.d.ts.map +1 -1
  175. package/lib/tests/questionTest.js +14 -6
  176. package/lib/tests/singleExo.test.js +2 -2
  177. package/lib/tree/nodes/node.d.ts +2 -1
  178. package/lib/tree/nodes/node.d.ts.map +1 -1
  179. package/lib/tree/nodes/node.js +1 -0
  180. package/lib/tree/nodes/student/iDontKnowNode.d.ts +26 -0
  181. package/lib/tree/nodes/student/iDontKnowNode.d.ts.map +1 -0
  182. package/lib/tree/nodes/student/iDontKnowNode.js +63 -0
  183. package/lib/tree/parsers/latexParser.d.ts +3 -2
  184. package/lib/tree/parsers/latexParser.d.ts.map +1 -1
  185. package/lib/tree/parsers/latexParser.js +7 -0
  186. package/lib/tree/parsers/monomParser.d.ts +1 -1
  187. package/lib/tree/parsers/monomParser.d.ts.map +1 -1
  188. package/lib/tree/parsers/polynomialParser.d.ts +1 -1
  189. package/lib/tree/parsers/polynomialParser.d.ts.map +1 -1
  190. package/lib/tree/parsers/trinomParser.d.ts +1 -1
  191. package/lib/tree/parsers/trinomParser.d.ts.map +1 -1
  192. package/lib/tree/utilities/nodeComparator.d.ts +3 -1
  193. package/lib/tree/utilities/nodeComparator.d.ts.map +1 -1
  194. package/lib/tree/utilities/nodeComparator.js +68 -8
  195. package/lib/tree/utilities/nodeSimplifier.d.ts +1 -0
  196. package/lib/tree/utilities/nodeSimplifier.d.ts.map +1 -1
  197. package/lib/tree/utilities/nodeSimplifier.js +40 -0
  198. package/package.json +1 -1
@@ -28,6 +28,20 @@ export const getExponentialPrimitive = () => {
28
28
  const identifiers = { a };
29
29
  return getExponentialPrimitiveQuestionFromIdentifiers(identifiers);
30
30
  };
31
+ const getHint = (identifiers) => {
32
+ const { a } = identifiers;
33
+ const integratedFuction = new MultiplyNode(new NumberNode(a), new ExpNode(new VariableNode("x")));
34
+ return `Quelles sont les fonctions qui ont pour dérivée $x\\mapsto ${integratedFuction.toTex()}$ ?`;
35
+ };
36
+ const getCorrection = (identifiers) => {
37
+ return `La forme générale des primitives de la fonction $f$ est :
38
+
39
+ $$
40
+ F(x) = ${getAnswer(identifiers)}
41
+ $$
42
+
43
+ où $C$ est un réel. En effet, en dérivant $F(x)$, on obtient bien $F'(x) = f(x)$.`;
44
+ };
31
45
  export const getExponentialPrimitiveQuestionFromIdentifiers = (identifiers) => {
32
46
  const question = {
33
47
  instruction: getInstruction(identifiers),
@@ -36,6 +50,8 @@ export const getExponentialPrimitiveQuestionFromIdentifiers = (identifiers) => {
36
50
  keys: ["x", "C", "epower", "exp"],
37
51
  answerFormat: "tex",
38
52
  identifiers,
53
+ hint: getHint(identifiers),
54
+ correction: getCorrection(identifiers),
39
55
  };
40
56
  return question;
41
57
  };
@@ -80,4 +96,5 @@ export const exponentialPrimitive = {
80
96
  subject: "Mathématiques",
81
97
  pdfOptions: { shouldSpreadPropositions: true },
82
98
  getQuestionFromIdentifiers: getExponentialPrimitiveQuestionFromIdentifiers,
99
+ hasHintAndCorrection: true,
83
100
  };
@@ -1 +1 @@
1
- {"version":3,"file":"polynomialPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/polynomialPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAIJ,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAiBF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAKjE,CAAC;AAEF,eAAO,MAAM,6CAA6C,EAAE,0BAA0B,CACpF,WAAW,CAYZ,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAexE,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,GAAG,CAAC,WAAW,CA8B7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAYrD,CAAC"}
1
+ {"version":3,"file":"polynomialPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/polynomialPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAKR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAIJ,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAiCF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAKjE,CAAC;AAEF,eAAO,MAAM,6CAA6C,EAAE,0BAA0B,CACpF,WAAW,CAcZ,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAexE,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,GAAG,CAAC,WAAW,CA8B7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAarD,CAAC"}
@@ -6,13 +6,26 @@ import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
6
6
  import { shuffle } from "../../../utils/alea/shuffle.js";
7
7
  import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
8
8
  const getInstruction = (identifiers) => {
9
- const polynomial = new Polynomial(identifiers.coeffs);
9
+ const polynomial = new Polynomial(identifiers.coeffs).toTree();
10
10
  return `Déterminer la forme générale des primitives de la fonction polynomiale $f$ définie par :
11
11
 
12
12
  $$
13
13
  f(x) = ${polynomial.toTex()}
14
14
  $$`;
15
15
  };
16
+ const getHint = (identifiers) => {
17
+ const polynomial = new Polynomial(identifiers.coeffs).toTree();
18
+ return `Quelles sont les fonctions qui ont pour dérivée $x\\mapsto ${polynomial.toTex()}$ ?`;
19
+ };
20
+ const getCorrection = (identifiers) => {
21
+ return `La forme générale des primitives de la fonction $f$ est :
22
+
23
+ $$
24
+ F(x) = ${getAnswer(identifiers)}
25
+ $$
26
+
27
+ où $C$ est un réel. En effet, en dérivant $F(x)$, on obtient bien $F'(x) = f(x)$.`;
28
+ };
16
29
  const getAnswer = (identifiers) => {
17
30
  const polynomial = new Polynomial(identifiers.coeffs);
18
31
  const integralPolynomial = polynomial.integrateToNode();
@@ -33,6 +46,8 @@ export const getPolynomialPrimitiveQuestionFromIdentifiers = (identifiers) => {
33
46
  keys: ["x", "C"],
34
47
  answerFormat: "tex",
35
48
  identifiers,
49
+ hint: getHint(identifiers),
50
+ correction: getCorrection(identifiers),
36
51
  };
37
52
  return question;
38
53
  };
@@ -85,4 +100,5 @@ export const polynomialPrimitive = {
85
100
  isAnswerValid: isPolynomialPrimitiveAnswerValid,
86
101
  subject: "Mathématiques",
87
102
  getQuestionFromIdentifiers: getPolynomialPrimitiveQuestionFromIdentifiers,
103
+ hasHintAndCorrection: true,
88
104
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sinCosPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/sinCosPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAIJ,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAwBF,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,WAAW,CAM7D,CAAC;AAEF,eAAO,MAAM,yCAAyC,EAAE,0BAA0B,CAChF,WAAW,CAYZ,CAAC;AACF,eAAO,MAAM,8BAA8B,EAAE,YAAY,CAAC,WAAW,CA4BpE,CAAC;AACF,eAAO,MAAM,4BAA4B,EAAE,GAAG,CAAC,WAAW,CAYzD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAYjD,CAAC"}
1
+ {"version":3,"file":"sinCosPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/sinCosPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAKR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAIJ,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAwBF,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,WAAW,CAM7D,CAAC;AAoBF,eAAO,MAAM,yCAAyC,EAAE,0BAA0B,CAChF,WAAW,CAcZ,CAAC;AACF,eAAO,MAAM,8BAA8B,EAAE,YAAY,CAAC,WAAW,CA4BpE,CAAC;AACF,eAAO,MAAM,4BAA4B,EAAE,GAAG,CAAC,WAAW,CAYzD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAajD,CAAC"}
@@ -34,6 +34,22 @@ export const getSinCosPrimitive = () => {
34
34
  const identifiers = { a, isCos };
35
35
  return getSinCosPrimitiveQuestionFromIdentifiers(identifiers);
36
36
  };
37
+ const getHint = (identifiers) => {
38
+ const { a, isCos } = identifiers;
39
+ const selectedFunction = isCos
40
+ ? new MultiplyNode(new NumberNode(a), new CosNode(new VariableNode("x")))
41
+ : new MultiplyNode(new NumberNode(a), new SinNode(new VariableNode("x")));
42
+ return `Quelles sont les fonctions qui ont pour dérivée $x\\mapsto ${selectedFunction.toTex()}$ ?`;
43
+ };
44
+ const getCorrection = (identifiers) => {
45
+ return `La forme générale des primitives de la fonction $f$ est :
46
+
47
+ $$
48
+ F(x) = ${getAnswer(identifiers)}
49
+ $$
50
+
51
+ où $C$ est un réel. En effet, en dérivant $F(x)$, on obtient bien $F'(x) = f(x)$.`;
52
+ };
37
53
  export const getSinCosPrimitiveQuestionFromIdentifiers = (identifiers) => {
38
54
  const question = {
39
55
  instruction: getInstruction(identifiers),
@@ -42,6 +58,8 @@ export const getSinCosPrimitiveQuestionFromIdentifiers = (identifiers) => {
42
58
  keys: ["x", "C", "sin", "cos"],
43
59
  answerFormat: "tex",
44
60
  identifiers,
61
+ hint: getHint(identifiers),
62
+ correction: getCorrection(identifiers),
45
63
  };
46
64
  return question;
47
65
  };
@@ -74,7 +92,7 @@ export const isSinCosPrimitiveAnswerValid = (ans, { isCos, a }) => {
74
92
  export const sinCosPrimitive = {
75
93
  id: "sinCosPrimitive",
76
94
  connector: "=",
77
- label: "Primitive de sin et cos",
95
+ label: "Primitive de $\\sin$ et $\\cos$",
78
96
  isSingleStep: false,
79
97
  generator: (nb) => getDistinctQuestions(getSinCosPrimitive, nb),
80
98
  qcmTimer: 60,
@@ -83,4 +101,5 @@ export const sinCosPrimitive = {
83
101
  isAnswerValid: isSinCosPrimitiveAnswerValid,
84
102
  subject: "Mathématiques",
85
103
  getQuestionFromIdentifiers: getSinCosPrimitiveQuestionFromIdentifiers,
104
+ hasHintAndCorrection: true,
86
105
  };
@@ -1 +1 @@
1
- {"version":3,"file":"usualPrimitives.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/usualPrimitives.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAOT,MAAM,6BAA6B,CAAC;AA4BrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AA+HF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAajD,CAAC"}
1
+ {"version":3,"file":"usualPrimitives.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/usualPrimitives.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAOT,MAAM,6BAA6B,CAAC;AA4BrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AA+HF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAcjD,CAAC"}
@@ -131,4 +131,5 @@ export const usualPrimitives = {
131
131
  subject: "Mathématiques",
132
132
  pdfOptions: { shouldSpreadPropositions: true },
133
133
  getQuestionFromIdentifiers,
134
+ hasHintAndCorrection: true,
134
135
  };
@@ -9,4 +9,5 @@ export * from "./notation/index.js";
9
9
  export * from "./seqArithmGeom/index.js";
10
10
  export * from "./limits/index.js";
11
11
  export * from "./variations/index.js";
12
+ export * from "./proofByInduction/index.js";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sequences/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sequences/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
@@ -9,3 +9,4 @@ export * from "./notation/index.js";
9
9
  export * from "./seqArithmGeom/index.js";
10
10
  export * from "./limits/index.js";
11
11
  export * from "./variations/index.js";
12
+ export * from "./proofByInduction/index.js";
@@ -0,0 +1,5 @@
1
+ export * from "./proofByInductionCheckInitialization.js";
2
+ export * from "./proofByInductionWritePropAtRankKPlus1.js";
3
+ export * from "./proofByInductionWriteMissingStep.js";
4
+ export * from "./proofByInductionReorderProof.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/proofByInduction/index.ts"],"names":[],"mappings":"AAAA,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./proofByInductionCheckInitialization.js";
2
+ export * from "./proofByInductionWritePropAtRankKPlus1.js";
3
+ export * from "./proofByInductionWriteMissingStep.js";
4
+ export * from "./proofByInductionReorderProof.js";
@@ -0,0 +1,10 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { ProofByInductionSituationParams } from "./proofByInductionSituations.js";
3
+ type Identifiers = {
4
+ situationParams: ProofByInductionSituationParams;
5
+ isValid: boolean;
6
+ indexForNodeProperty: number;
7
+ };
8
+ export declare const proofByInductionCheckInitialization: Exercise<Identifiers>;
9
+ export {};
10
+ //# sourceMappingURL=proofByInductionCheckInitialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proofByInductionCheckInitialization.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/proofByInduction/proofByInductionCheckInitialization.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AASrC,OAAO,EAGL,+BAA+B,EAChC,MAAM,iCAAiC,CAAC;AAEzC,KAAK,WAAW,GAAG;IACjB,eAAe,EAAE,+BAA+B,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AA8PF,eAAO,MAAM,mCAAmC,EAAE,QAAQ,CAAC,WAAW,CAkBrE,CAAC"}
@@ -0,0 +1,236 @@
1
+ import { tryToAddWrongProp, addValidProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { nodeBySubstitutingVar } from "../../../../math/utils/functions/functionComposition.js";
4
+ import { randint } from "../../../../math/utils/random/randint.js";
5
+ import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
6
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
7
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
8
+ import { splitAndKeep } from "../../../../utils/strings/splitAndKeep.js";
9
+ import { getHydratedProofByInductionSituation, getRandomProofByInductionSituationParams, } from "./proofByInductionSituations.js";
10
+ const getHydrated = (identifiers) => {
11
+ const { situationParams, isValid, indexForNodeProperty } = identifiers;
12
+ const situation = getHydratedProofByInductionSituation(situationParams);
13
+ const { n0 } = situation;
14
+ switch (situation.id) {
15
+ case "generalFormulaOfArithmeticoGeometricSequence": {
16
+ const nodeProperty = (isValid ? situation.arrNodeValid : situation.arrNodeInvalid)[indexForNodeProperty];
17
+ const nodeVarN = new VariableNode("n");
18
+ const nodePropertySubstituted = nodeBySubstitutingVar(nodeBySubstitutingVar(nodeProperty, n0.toTree(), nodeVarN), new VariableNode(`u_{${n0}}`), new VariableNode("u_{n}"));
19
+ return {
20
+ situation,
21
+ isValid,
22
+ nodeProperty,
23
+ nodePropertySubstituted,
24
+ };
25
+ }
26
+ case "multipleFromPolynomial": {
27
+ const { nbMod } = situation.params;
28
+ const nodeProperty = (isValid ? situation.arrNodeValid : situation.arrNodeInvalid)[indexForNodeProperty];
29
+ const nodeVarN = new VariableNode("n");
30
+ const nodePropertySubstituted = nodeBySubstitutingVar(nodeProperty, n0.toTree(), nodeVarN);
31
+ return {
32
+ situation,
33
+ isValid,
34
+ nodeProperty,
35
+ nodePropertySubstituted,
36
+ nbMod,
37
+ };
38
+ }
39
+ default:
40
+ throw new Error("Unsupported situation.id: " + situation.id);
41
+ }
42
+ };
43
+ const getInstruction = (identifiers) => {
44
+ const { situation, nodeProperty, nbMod } = getHydrated(identifiers);
45
+ const { n0 } = situation;
46
+ switch (situation.id) {
47
+ case "generalFormulaOfArithmeticoGeometricSequence": {
48
+ return `${situation.strContext}
49
+
50
+ Pour $n \\geq ${n0}$, on note $\\mathcal{P}(n)$ la propriété :
51
+
52
+ $$
53
+ \\mathcal{P}(n) :\\ \\ ${nodeProperty.toTex()}
54
+ $$
55
+
56
+ La propriété $\\mathcal{P}(${n0})$ est-elle vraie ?`;
57
+ }
58
+ case "multipleFromPolynomial": {
59
+ return `${situation.strContext}
60
+
61
+ Pour $n \\geq ${n0}$, on note $\\mathcal{P}(n)$ la propriété :
62
+
63
+ $$
64
+ \\mathcal{P}(n) :\\ \\ f(n) \\text{ est un multiple de } ${nbMod}
65
+ $$
66
+
67
+ La propriété $\\mathcal{P}(${n0})$ est-elle vraie ?`;
68
+ }
69
+ default:
70
+ throw new Error("Unsupported situation.id: " + situation.id);
71
+ }
72
+ };
73
+ const getAnswer = (identifiers) => {
74
+ const { isValid } = identifiers;
75
+ return isValid ? "Oui" : "Non";
76
+ };
77
+ const getHint = (identifiers) => {
78
+ const { situation } = getHydrated(identifiers);
79
+ const { n0 } = situation;
80
+ return `Remplace $n$ par $${n0}$ dans la formule proposée et compare la valeur obtenue avec la valeur de $u_{${n0}}$ fournie dans l'énoncé.`;
81
+ };
82
+ const getCorrection = (identifiers) => {
83
+ const { isValid } = identifiers;
84
+ const { situation, nodePropertySubstituted } = getHydrated(identifiers);
85
+ const { n0 } = situation;
86
+ switch (situation.id) {
87
+ case "generalFormulaOfArithmeticoGeometricSequence": {
88
+ return `On calcule la valeur de $u_{${n0}}$ d'après $\\mathcal{P}(${n0})$ :
89
+
90
+ ${alignTex([
91
+ splitAndKeep(nodePropertySubstituted.toTex(), "="),
92
+ splitAndKeep(nodePropertySubstituted.simplify().toTex(), "="),
93
+ ])}
94
+
95
+ ${(() => {
96
+ if (isValid) {
97
+ return `La propriété $\\mathcal{P}(${n0})$ est donc vraie.`;
98
+ }
99
+ else {
100
+ return `La propriété $\\mathcal{P}(${n0})$ est donc fausse.`;
101
+ }
102
+ })()}
103
+
104
+ `;
105
+ }
106
+ case "multipleFromPolynomial": {
107
+ return `On calcule la valeur de $f(${n0})$ :
108
+
109
+ ${alignTex([
110
+ [`f(${n0})`, "=", nodePropertySubstituted.toTex()],
111
+ ["", "=", nodePropertySubstituted.simplify().toTex()],
112
+ ])}
113
+
114
+ ${(() => {
115
+ if (isValid) {
116
+ return `La propriété $\\mathcal{P}(${n0})$ est donc vraie.`;
117
+ }
118
+ else {
119
+ return `La propriété $\\mathcal{P}(${n0})$ est donc fausse.`;
120
+ }
121
+ })()}
122
+
123
+ `;
124
+ }
125
+ default:
126
+ throw new Error("Unsupported situation.id: " + situation.id);
127
+ }
128
+ };
129
+ const getPropositions = (_n, { answer }) => {
130
+ const propositions = [];
131
+ ["Oui", "Non", "On ne peut pas savoir"].forEach((str) => {
132
+ if (str === answer) {
133
+ addValidProp(propositions, answer, "raw");
134
+ }
135
+ else {
136
+ tryToAddWrongProp(propositions, str, "raw");
137
+ }
138
+ });
139
+ return propositions;
140
+ };
141
+ const createRandomIdentifiers = () => {
142
+ const situationParams = getRandomProofByInductionSituationParams();
143
+ const situation = getHydratedProofByInductionSituation(situationParams);
144
+ const [isValid, indexForNodeProperty] = (() => {
145
+ switch (situation.id) {
146
+ case "generalFormulaOfArithmeticoGeometricSequence": {
147
+ const isValid = coinFlip();
148
+ const indexForNodeProperty = randint(0, isValid
149
+ ? situation.arrNodeValid.length
150
+ : situation.arrNodeInvalid.length);
151
+ return [isValid, indexForNodeProperty];
152
+ }
153
+ case "multipleFromPolynomial": {
154
+ const isValid = situation.arrNodeValid.length > 0;
155
+ const indexForNodeProperty = 0;
156
+ return [isValid, indexForNodeProperty];
157
+ }
158
+ default:
159
+ throw new Error("Unsupported situation.id: " + situation.id);
160
+ }
161
+ })();
162
+ const identifiers = {
163
+ situationParams,
164
+ isValid,
165
+ indexForNodeProperty,
166
+ };
167
+ return identifiers;
168
+ };
169
+ // const isIdentifiersQCPassed = (identifiers: Identifiers) => {
170
+ // const isExploding = (identifiers: Identifiers) => {
171
+ // let isExploding = false;
172
+ // try {
173
+ // getHydrated(identifiers);
174
+ // } catch (_) {
175
+ // isExploding = true;
176
+ // }
177
+ // return isExploding;
178
+ // };
179
+ // return !isExploding(identifiers);
180
+ // };
181
+ // const createQCPassedIdentifiers = () => {
182
+ // let identifiers: Identifiers;
183
+ // let counter = -1;
184
+ // let isValid = false;
185
+ // while (!isValid && counter < 100) {
186
+ // counter++;
187
+ // const identifiersCandidate = createRandomIdentifiers();
188
+ // isValid = isIdentifiersQCPassed(identifiersCandidate);
189
+ // if (isValid) {
190
+ // identifiers = identifiersCandidate;
191
+ // }
192
+ // }
193
+ // if (!isValid) {
194
+ // const [situationParams] = getArrProofByInductionSituationParams([
195
+ // "generalFormulaOfArithmeticoGeometricSequence",
196
+ // ]);
197
+ // const identifiersDefault: Identifiers = (() => {
198
+ // return {
199
+ // situationParams,
200
+ // isValid: true,
201
+ // indexForNodeProperty: 0,
202
+ // };
203
+ // })();
204
+ // identifiers = identifiersDefault;
205
+ // }
206
+ // return identifiers!;
207
+ // };
208
+ const getProofByInductionCheckInitializationQuestion = () => {
209
+ const identifiers = createRandomIdentifiers();
210
+ return getQuestionFromIdentifiers(identifiers);
211
+ };
212
+ const getQuestionFromIdentifiers = (identifiers) => {
213
+ return {
214
+ answer: getAnswer(identifiers),
215
+ instruction: getInstruction(identifiers),
216
+ keys: [],
217
+ answerFormat: "raw",
218
+ identifiers,
219
+ hint: getHint(identifiers),
220
+ correction: getCorrection(identifiers),
221
+ };
222
+ };
223
+ export const proofByInductionCheckInitialization = {
224
+ id: "proofByInductionCheckInitialization",
225
+ connector: "=",
226
+ label: "Vérifier si une propriété $\\mathcal{P}(n)$ est vraie pour un rang $n_{0}$ donné",
227
+ isSingleStep: true,
228
+ generator: (nb, opts) => getDistinctQuestions(() => getProofByInductionCheckInitializationQuestion(opts), nb),
229
+ qcmTimer: 60,
230
+ freeTimer: 60,
231
+ getPropositions,
232
+ subject: "Mathématiques",
233
+ getQuestionFromIdentifiers,
234
+ hasHintAndCorrection: true,
235
+ answerType: "QCU",
236
+ };
@@ -0,0 +1,13 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
3
+ import { ProofByInductionSituationParams } from "./proofByInductionSituations.js";
4
+ type Identifiers = {
5
+ situationParams: ProofByInductionSituationParams;
6
+ isValid: boolean;
7
+ indexForNodeProperty: number;
8
+ nodeIdsVarStepDefinition: NodeIdentifiers;
9
+ nodeIdsVarStepInduction: NodeIdentifiers;
10
+ };
11
+ export declare const proofByInductionReorderProof: Exercise<Identifiers>;
12
+ export {};
13
+ //# sourceMappingURL=proofByInductionReorderProof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proofByInductionReorderProof.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/proofByInduction/proofByInductionReorderProof.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAK7C,OAAO,EAGL,+BAA+B,EAChC,MAAM,iCAAiC,CAAC;AAQzC,KAAK,WAAW,GAAG;IACjB,eAAe,EAAE,+BAA+B,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,eAAe,CAAC;IAC1C,uBAAuB,EAAE,eAAe,CAAC;CAC1C,CAAC;AA0WF,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,WAAW,CAiB9D,CAAC"}