math-exercises 3.0.172 → 3.0.173

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 (172) hide show
  1. package/lib/exercises/math/functions/trinoms/devForm/variationsFromAlgebricForm.d.ts.map +1 -1
  2. package/lib/exercises/math/functions/trinoms/devForm/variationsFromAlgebricForm.js +12 -0
  3. package/lib/exercises/math/functions/trinoms/parabole/index.d.ts +2 -0
  4. package/lib/exercises/math/functions/trinoms/parabole/index.d.ts.map +1 -1
  5. package/lib/exercises/math/functions/trinoms/parabole/index.js +2 -0
  6. package/lib/exercises/math/functions/trinoms/parabole/parabolaVarTable.d.ts +8 -0
  7. package/lib/exercises/math/functions/trinoms/parabole/parabolaVarTable.d.ts.map +1 -0
  8. package/lib/exercises/math/functions/trinoms/parabole/parabolaVarTable.js +106 -0
  9. package/lib/exercises/math/functions/trinoms/parabole/paraboleSolveGraphEquation.d.ts +14 -0
  10. package/lib/exercises/math/functions/trinoms/parabole/paraboleSolveGraphEquation.d.ts.map +1 -0
  11. package/lib/exercises/math/functions/trinoms/parabole/paraboleSolveGraphEquation.js +186 -0
  12. package/lib/exercises/math/functions/trinoms/summitAndCanonical/extremumTypeFromAlgebricForm.d.ts +6 -2
  13. package/lib/exercises/math/functions/trinoms/summitAndCanonical/extremumTypeFromAlgebricForm.d.ts.map +1 -1
  14. package/lib/exercises/math/functions/trinoms/summitAndCanonical/extremumTypeFromAlgebricForm.js +98 -13
  15. package/lib/exercises/math/geometry/lines/index.d.ts +1 -0
  16. package/lib/exercises/math/geometry/lines/index.d.ts.map +1 -1
  17. package/lib/exercises/math/geometry/lines/index.js +1 -0
  18. package/lib/exercises/math/geometry/lines/readLineNormalVectorOnGraph.d.ts +13 -0
  19. package/lib/exercises/math/geometry/lines/readLineNormalVectorOnGraph.d.ts.map +1 -0
  20. package/lib/exercises/math/geometry/lines/readLineNormalVectorOnGraph.js +195 -0
  21. package/lib/exercises/math/probaStat/randomVariable/index.d.ts +1 -0
  22. package/lib/exercises/math/probaStat/randomVariable/index.d.ts.map +1 -1
  23. package/lib/exercises/math/probaStat/randomVariable/index.js +1 -0
  24. package/lib/exercises/math/probaStat/randomVariable/missingValueInRandomVariableProbabilityLaw.d.ts +9 -0
  25. package/lib/exercises/math/probaStat/randomVariable/missingValueInRandomVariableProbabilityLaw.d.ts.map +1 -0
  26. package/lib/exercises/math/probaStat/randomVariable/missingValueInRandomVariableProbabilityLaw.js +119 -0
  27. package/lib/exercises/math/python/sequences/index.d.ts +8 -0
  28. package/lib/exercises/math/python/sequences/index.d.ts.map +1 -0
  29. package/lib/exercises/math/python/sequences/index.js +7 -0
  30. package/lib/exercises/math/python/sequences/pySequenceFactorialInstructionFalseOneOut.d.ts +11 -0
  31. package/lib/exercises/math/python/sequences/pySequenceFactorialInstructionFalseOneOut.d.ts.map +1 -0
  32. package/lib/exercises/math/python/sequences/pySequenceFactorialInstructionFalseOneOut.js +274 -0
  33. package/lib/exercises/math/python/sequences/pySequenceFirstTermsListInstructionCompletion.d.ts +12 -0
  34. package/lib/exercises/math/python/sequences/pySequenceFirstTermsListInstructionCompletion.d.ts.map +1 -0
  35. package/lib/exercises/math/python/sequences/pySequenceFirstTermsListInstructionCompletion.js +368 -0
  36. package/lib/exercises/math/python/sequences/pySequenceFirstTermsSumInstructionCompletion.d.ts +13 -0
  37. package/lib/exercises/math/python/sequences/pySequenceFirstTermsSumInstructionCompletion.d.ts.map +1 -0
  38. package/lib/exercises/math/python/sequences/pySequenceFirstTermsSumInstructionCompletion.js +254 -0
  39. package/lib/exercises/math/python/sequences/pySequenceProgramReading.d.ts +14 -0
  40. package/lib/exercises/math/python/sequences/pySequenceProgramReading.d.ts.map +1 -0
  41. package/lib/exercises/math/python/sequences/pySequenceProgramReading.js +365 -0
  42. package/lib/exercises/math/python/sequences/pySequenceTermForLoopInstructionCompletion.d.ts +11 -0
  43. package/lib/exercises/math/python/sequences/pySequenceTermForLoopInstructionCompletion.d.ts.map +1 -0
  44. package/lib/exercises/math/python/sequences/pySequenceTermForLoopInstructionCompletion.js +298 -0
  45. package/lib/exercises/math/python/sequences/pySequenceTermFromFunctionCallInstructionCompletion.d.ts +12 -0
  46. package/lib/exercises/math/python/sequences/pySequenceTermFromFunctionCallInstructionCompletion.d.ts.map +1 -0
  47. package/lib/exercises/math/python/sequences/pySequenceTermFromFunctionCallInstructionCompletion.js +408 -0
  48. package/lib/exercises/math/python/sequences/pySequenceThresholdInstructionCompletion.d.ts +17 -0
  49. package/lib/exercises/math/python/sequences/pySequenceThresholdInstructionCompletion.d.ts.map +1 -0
  50. package/lib/exercises/math/python/sequences/pySequenceThresholdInstructionCompletion.js +498 -0
  51. package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFromTwoTerms.d.ts +12 -0
  52. package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFromTwoTerms.d.ts.map +1 -0
  53. package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFromTwoTerms.js +191 -0
  54. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindExplicitFormulaFromSituation.d.ts +14 -0
  55. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindExplicitFormulaFromSituation.d.ts.map +1 -0
  56. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindExplicitFormulaFromSituation.js +153 -0
  57. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRankFromSituation.d.ts +15 -0
  58. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRankFromSituation.d.ts.map +1 -0
  59. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRankFromSituation.js +184 -0
  60. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRecurrenceFormulaFromSituation.d.ts +14 -0
  61. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRecurrenceFormulaFromSituation.d.ts.map +1 -0
  62. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRecurrenceFormulaFromSituation.js +210 -0
  63. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindTermFromSituation.d.ts +15 -0
  64. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindTermFromSituation.d.ts.map +1 -0
  65. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindTermFromSituation.js +161 -0
  66. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindThresholdFromSituation.d.ts +17 -0
  67. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindThresholdFromSituation.d.ts.map +1 -0
  68. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindThresholdFromSituation.js +188 -0
  69. package/lib/exercises/math/sequences/arithmetic/situations/index.d.ts +6 -0
  70. package/lib/exercises/math/sequences/arithmetic/situations/index.d.ts.map +1 -0
  71. package/lib/exercises/math/sequences/arithmetic/situations/index.js +5 -0
  72. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticComputeSumWithDots.d.ts +15 -0
  73. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticComputeSumWithDots.d.ts.map +1 -0
  74. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticComputeSumWithDots.js +233 -0
  75. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSum.d.ts +13 -0
  76. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSum.d.ts.map +1 -0
  77. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSum.js +111 -0
  78. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSumThreshold.d.ts +13 -0
  79. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSumThreshold.d.ts.map +1 -0
  80. package/lib/exercises/math/sequences/arithmetic/sum/arithmeticFirstTermsSumThreshold.js +216 -0
  81. package/lib/exercises/math/sequences/arithmetic/sum/firstIntegersSum.d.ts +7 -0
  82. package/lib/exercises/math/sequences/arithmetic/sum/firstIntegersSum.d.ts.map +1 -0
  83. package/lib/exercises/math/sequences/arithmetic/sum/firstIntegersSum.js +94 -0
  84. package/lib/exercises/math/sequences/arithmetic/sum/index.d.ts +5 -0
  85. package/lib/exercises/math/sequences/arithmetic/sum/index.d.ts.map +1 -0
  86. package/lib/exercises/math/sequences/arithmetic/sum/index.js +4 -0
  87. package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFromTwoTerms.d.ts +14 -0
  88. package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFromTwoTerms.d.ts.map +1 -0
  89. package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFromTwoTerms.js +301 -0
  90. package/lib/exercises/math/sequences/geometric/geometricFindRandomTermFromTwoTerms.d.ts +15 -0
  91. package/lib/exercises/math/sequences/geometric/geometricFindRandomTermFromTwoTerms.d.ts.map +1 -0
  92. package/lib/exercises/math/sequences/geometric/geometricFindRandomTermFromTwoTerms.js +260 -0
  93. package/lib/exercises/math/sequences/geometric/situations/geometricFindExplicitFormulaFromSituation.d.ts +14 -0
  94. package/lib/exercises/math/sequences/geometric/situations/geometricFindExplicitFormulaFromSituation.d.ts.map +1 -0
  95. package/lib/exercises/math/sequences/geometric/situations/geometricFindExplicitFormulaFromSituation.js +186 -0
  96. package/lib/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.d.ts +15 -0
  97. package/lib/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.d.ts.map +1 -0
  98. package/lib/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.js +142 -0
  99. package/lib/exercises/math/sequences/geometric/situations/geometricFindRecurrenceFormulaFromSituation.d.ts +14 -0
  100. package/lib/exercises/math/sequences/geometric/situations/geometricFindRecurrenceFormulaFromSituation.d.ts.map +1 -0
  101. package/lib/exercises/math/sequences/geometric/situations/geometricFindRecurrenceFormulaFromSituation.js +205 -0
  102. package/lib/exercises/math/sequences/geometric/situations/geometricFindTermFromSituation.d.ts +15 -0
  103. package/lib/exercises/math/sequences/geometric/situations/geometricFindTermFromSituation.d.ts.map +1 -0
  104. package/lib/exercises/math/sequences/geometric/situations/geometricFindTermFromSituation.js +208 -0
  105. package/lib/exercises/math/sequences/geometric/situations/geometricFindThresholdFromSituation.d.ts +17 -0
  106. package/lib/exercises/math/sequences/geometric/situations/geometricFindThresholdFromSituation.d.ts.map +1 -0
  107. package/lib/exercises/math/sequences/geometric/situations/geometricFindThresholdFromSituation.js +152 -0
  108. package/lib/exercises/math/sequences/geometric/situations/index.d.ts +4 -0
  109. package/lib/exercises/math/sequences/geometric/situations/index.d.ts.map +1 -0
  110. package/lib/exercises/math/sequences/geometric/situations/index.js +5 -0
  111. package/lib/exercises/math/sequences/geometric/sum/geometricComputeSumWithDots.d.ts +15 -0
  112. package/lib/exercises/math/sequences/geometric/sum/geometricComputeSumWithDots.d.ts.map +1 -0
  113. package/lib/exercises/math/sequences/geometric/sum/geometricComputeSumWithDots.js +248 -0
  114. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsGeneralSum.d.ts +14 -0
  115. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsGeneralSum.d.ts.map +1 -0
  116. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsGeneralSum.js +126 -0
  117. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsSum.d.ts +8 -0
  118. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsSum.d.ts.map +1 -0
  119. package/lib/exercises/math/sequences/geometric/sum/geometricFirstTermsSum.js +91 -0
  120. package/lib/exercises/math/sequences/geometric/sum/index.d.ts +4 -0
  121. package/lib/exercises/math/sequences/geometric/sum/index.d.ts.map +1 -0
  122. package/lib/exercises/math/sequences/geometric/sum/index.js +3 -0
  123. package/lib/exercises/math/sequences/seqArithmGeom/index.d.ts +2 -0
  124. package/lib/exercises/math/sequences/seqArithmGeom/index.d.ts.map +1 -0
  125. package/lib/exercises/math/sequences/seqArithmGeom/index.js +1 -0
  126. package/lib/exercises/math/sequences/seqArithmGeom/seqArithmGeomRecurrenceFormulaUsage.d.ts +14 -0
  127. package/lib/exercises/math/sequences/seqArithmGeom/seqArithmGeomRecurrenceFormulaUsage.d.ts.map +1 -0
  128. package/lib/exercises/math/sequences/seqArithmGeom/seqArithmGeomRecurrenceFormulaUsage.js +202 -0
  129. package/lib/exercises/options/optionFirstTermRankOne.d.ts +16 -0
  130. package/lib/exercises/options/optionFirstTermRankOne.d.ts.map +1 -0
  131. package/lib/exercises/options/optionFirstTermRankOne.js +17 -0
  132. package/lib/exercises/options/optionIsUsePythonDef.d.ts +16 -0
  133. package/lib/exercises/options/optionIsUsePythonDef.d.ts.map +1 -0
  134. package/lib/exercises/options/optionIsUsePythonDef.js +17 -0
  135. package/lib/exercises/options/optionIsWithSuperfluousData.d.ts +16 -0
  136. package/lib/exercises/options/optionIsWithSuperfluousData.d.ts.map +1 -0
  137. package/lib/exercises/options/optionIsWithSuperfluousData.js +17 -0
  138. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts +1 -0
  139. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts.map +1 -1
  140. package/lib/exercises/vea/colinearVectorVEA.d.ts +2 -0
  141. package/lib/exercises/vea/colinearVectorVEA.d.ts.map +1 -0
  142. package/lib/exercises/vea/colinearVectorVEA.js +11 -0
  143. package/lib/exercises/vea/varLineVEA.d.ts.map +1 -1
  144. package/lib/exercises/vea/varLineVEA.js +5 -2
  145. package/lib/index.d.ts +25 -2
  146. package/lib/index.d.ts.map +1 -1
  147. package/lib/math/geometry/line.d.ts +1 -1
  148. package/lib/math/geometry/line.d.ts.map +1 -1
  149. package/lib/math/geometry/line.js +3 -3
  150. package/lib/math/geometry/point.d.ts +1 -1
  151. package/lib/math/geometry/point.d.ts.map +1 -1
  152. package/lib/math/geometry/point.js +4 -1
  153. package/lib/math/utils/sequences/situations/seqArithmeticSituations.d.ts +53 -0
  154. package/lib/math/utils/sequences/situations/seqArithmeticSituations.d.ts.map +1 -0
  155. package/lib/math/utils/sequences/situations/seqArithmeticSituations.js +1928 -0
  156. package/lib/math/utils/sequences/situations/seqArithmeticUtils.d.ts +15 -0
  157. package/lib/math/utils/sequences/situations/seqArithmeticUtils.d.ts.map +1 -0
  158. package/lib/math/utils/sequences/situations/seqArithmeticUtils.js +136 -0
  159. package/lib/math/utils/sequences/situations/seqGeometricSituations.d.ts +42 -0
  160. package/lib/math/utils/sequences/situations/seqGeometricSituations.d.ts.map +1 -0
  161. package/lib/math/utils/sequences/situations/seqGeometricSituations.js +932 -0
  162. package/lib/math/utils/sequences/situations/seqGeometricUtils.d.ts +12 -0
  163. package/lib/math/utils/sequences/situations/seqGeometricUtils.d.ts.map +1 -0
  164. package/lib/math/utils/sequences/situations/seqGeometricUtils.js +90 -0
  165. package/lib/tests/exosTest.d.ts.map +1 -1
  166. package/lib/tests/exosTest.js +0 -2
  167. package/lib/tree/nodes/operators/binomialCoefficientNode.d.ts +3 -3
  168. package/lib/tree/nodes/operators/binomialCoefficientNode.d.ts.map +1 -1
  169. package/lib/tree/nodes/operators/binomialCoefficientNode.js +6 -3
  170. package/lib/tree/parsers/vectorParser.d.ts.map +1 -1
  171. package/lib/tree/parsers/vectorParser.js +8 -0
  172. package/package.json +1 -1
@@ -0,0 +1,260 @@
1
+ import { addValidProp, tryToAddWrongProp, propWhile, } from "../../../../exercises/exercise.js";
2
+ import { getOptionFirstTermRankOneStuff, } from "../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
4
+ import { numberVEA } from "../../../../exercises/vea/numberVEA.js";
5
+ import { randfloat } from "../../../../math/utils/random/randfloat.js";
6
+ import { randint } from "../../../../math/utils/random/randint.js";
7
+ import { round } from "../../../../math/utils/round.js";
8
+ import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
9
+ import { power } from "../../../../tree/nodes/operators/powerNode.js";
10
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
11
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
12
+ import { random } from "../../../../utils/alea/random.js";
13
+ import { shuffle } from "../../../../utils/alea/shuffle.js";
14
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
15
+ import { alignTex } from "../../../../utils/latex/alignTex.js";
16
+ const getInstruction = (identifiers) => {
17
+ const { rank1, value1, rank2, value2, rankAsked } = identifiers;
18
+ return `Soit $u$ une suite géométrique telle que $u_{${rank1.frenchify()}} = ${value1.frenchify()}$ et $u_{${rank2.frenchify()}} = ${value2.frenchify()}$.
19
+
20
+ Que vaut $u_{${rankAsked}}$ ?`;
21
+ };
22
+ const getAnswerStuff = (identifiers, _opts) => {
23
+ const { rank1, value1, rank2, value2, precisionInitial, precisionReason, rankAsked, } = identifiers;
24
+ const reason = round(power(frac(value2, value1), frac(1, substract(rank2, rank1))).evaluate(), precisionReason);
25
+ const valueAsked = round(frac(value1, power(reason, rank1 - rankAsked)).evaluate(), precisionInitial);
26
+ return {
27
+ reason,
28
+ answerNode: valueAsked.toTree(),
29
+ };
30
+ };
31
+ const getAnswer = (identifiers, optsIn) => {
32
+ const opts = optsIn ?? optsDefault;
33
+ return getAnswerStuff(identifiers, opts).answerNode.toTex();
34
+ };
35
+ const getHint = (identifiers, _optsIn) => {
36
+ const { rankAsked } = identifiers;
37
+ return `Commence par déterminer la raison $q$ de la suite $u$.
38
+
39
+ Puis, utilise cette raison et un des termes connus de la suite pour déterminer $u_{${rankAsked}}$.`;
40
+ };
41
+ const getCorrection = (identifiers, optsIn) => {
42
+ const opts = optsIn ?? optsDefault;
43
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
44
+ const { rank1, value1, rank2, value2, rankAsked } = identifiers;
45
+ const diff = rankAsked - rank1;
46
+ const { reason, answerNode } = getAnswerStuff(identifiers, opts);
47
+ return `On commence par déterminer la raison $q$ de la suite $u$.
48
+
49
+ On a :
50
+
51
+ ${alignTex([
52
+ [
53
+ `u_{${rank1}}`,
54
+ "=",
55
+ `u_{${firstRank}} \\times q^{${rank1.frenchify()} - ${firstRank.frenchify()}}`,
56
+ ],
57
+ [
58
+ `u_{${rank2}}`,
59
+ "=",
60
+ `u_{${firstRank}} \\times q^{${rank2.frenchify()} - ${firstRank.frenchify()}}`,
61
+ ],
62
+ ])}
63
+
64
+ On forme le quotient :
65
+
66
+ ${alignTex([
67
+ [
68
+ `\\frac{u_{${rank2}}}{u_{${rank1}}}`,
69
+ "=",
70
+ `q^{${rank2.frenchify()} - ${rank1.frenchify()}}`,
71
+ ],
72
+ [
73
+ `\\frac{${value2.frenchify()}}{${value1.frenchify()}}`,
74
+ "=",
75
+ `q^{${(rank2 - rank1).frenchify()}}`,
76
+ ],
77
+ ])}
78
+
79
+ On peut ainsi calculer $q$ :
80
+
81
+ ${alignTex([
82
+ [
83
+ `{\\left(\\frac{${value2.frenchify()}}{${value1.frenchify()}}\\right)}^{\\frac{1}{${(rank2 - rank1).frenchify()}}}`,
84
+ "=",
85
+ `q`,
86
+ ],
87
+ [`${reason.frenchify()}`, "=", `q`],
88
+ ])}
89
+
90
+
91
+ On peut alors déterminer $u_{${rankAsked.frenchify()}}$ en utilisant $u_{${rank1.frenchify()}}$ et $q$. En effet, on a :
92
+
93
+ ${alignTex([
94
+ [
95
+ `u_{${rankAsked.frenchify()}}`,
96
+ "=",
97
+ `\\frac{u_{${rank1.frenchify()}}}{q^{${(-diff).frenchify()}}}`,
98
+ ],
99
+ ["", "=", frac(value1, power(reason, -diff)).toTex()],
100
+ ["", "=", answerNode.toTex()],
101
+ ])}
102
+
103
+ `;
104
+ };
105
+ const getPropositions = (n, { answer, ..._identifiers }, optsIn) => {
106
+ const opts = optsIn ?? optsDefault;
107
+ // const firstRank = opts?.firstTermRankOne ? 1 : 0;
108
+ const propositions = [];
109
+ addValidProp(propositions, answer);
110
+ propWhile(propositions, n, () => {
111
+ const identifiersWrong = createRandomIdentifiersCurated(opts);
112
+ const texWrong = getAnswer(identifiersWrong, opts);
113
+ tryToAddWrongProp(propositions, texWrong);
114
+ });
115
+ return shuffle(propositions);
116
+ };
117
+ const isAnswerValid = (ans, { answer }) => {
118
+ try {
119
+ return numberVEA(ans, answer);
120
+ }
121
+ catch (err) {
122
+ return handleVEAError(err);
123
+ }
124
+ };
125
+ const createRandomIdentifiersRaw = (opts) => {
126
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
127
+ const isDivergent = coinFlip();
128
+ const isReasonNegative = coinFlip();
129
+ const signReason = isReasonNegative ? -1 : +1;
130
+ function createGeometricDivergent() {
131
+ const precisionInitial = 1;
132
+ const initial = randfloat(1, 10, precisionInitial, [1]);
133
+ const precisionReason = 0;
134
+ const reason = signReason * randint(2, 10);
135
+ return [initial, precisionInitial, reason, precisionReason];
136
+ }
137
+ function createGeometricConvergent() {
138
+ const poolReasonStuff = [
139
+ {
140
+ q: 0.5,
141
+ precision: 1,
142
+ invQ: 2,
143
+ },
144
+ {
145
+ q: 0.25,
146
+ precision: 2,
147
+ invQ: 4,
148
+ },
149
+ {
150
+ q: 0.2,
151
+ precision: 1,
152
+ invQ: 5,
153
+ },
154
+ {
155
+ q: 0.1,
156
+ precision: 1,
157
+ invQ: 10,
158
+ },
159
+ {
160
+ q: 0.05,
161
+ precision: 2,
162
+ invQ: 20,
163
+ },
164
+ ];
165
+ const { q, invQ, precision: precisionReason } = random(poolReasonStuff);
166
+ const reason = signReason * q;
167
+ const precisionInitial = 0;
168
+ const initial = round(randint(10, 100) * Math.pow(invQ, 8), precisionInitial);
169
+ return [initial, precisionInitial, reason, precisionReason];
170
+ }
171
+ const [initial, precisionInitial, reason, precisionReason] = (() => {
172
+ if (isDivergent) {
173
+ return createGeometricDivergent();
174
+ }
175
+ else {
176
+ return createGeometricConvergent();
177
+ }
178
+ })();
179
+ const rank1 = randint(firstRank + 1, 5);
180
+ const rank2 = rank1 + randint(1, 5);
181
+ const rankAsked = randint(2, 9, [rank1, rank2]);
182
+ function valueForRank(initial, reason, rank) {
183
+ return initial * Math.pow(reason, rank);
184
+ }
185
+ const [value1, value2] = [rank1, rank2].map((rank) => round(valueForRank(initial, reason, rank), 4));
186
+ const identifiers = {
187
+ rank1,
188
+ value1,
189
+ rank2,
190
+ value2,
191
+ precisionInitial,
192
+ precisionReason,
193
+ rankAsked,
194
+ };
195
+ return identifiers;
196
+ };
197
+ const createRandomIdentifiersCurated = (opts) => {
198
+ let identifiers;
199
+ let isValid = false;
200
+ let counter = -1;
201
+ while (!isValid && counter < 100) {
202
+ counter++;
203
+ const identifiersCandidate = createRandomIdentifiersRaw(opts);
204
+ const answer = getAnswer(identifiersCandidate, opts);
205
+ isValid = !answer.includes("NaN");
206
+ if (isValid) {
207
+ identifiers = identifiersCandidate;
208
+ }
209
+ }
210
+ if (!isValid) {
211
+ //2.5 * 2^n
212
+ const identifiersDefault = {
213
+ rank1: 2,
214
+ value1: 10,
215
+ rank2: 5,
216
+ value2: 40,
217
+ precisionInitial: 1,
218
+ precisionReason: 0,
219
+ rankAsked: 9,
220
+ };
221
+ identifiers = identifiersDefault;
222
+ }
223
+ return identifiers;
224
+ };
225
+ const getGeometricFindRandomTermFromTwoTermsQuestion = (optsIn) => {
226
+ const opts = optsIn ?? optsDefault;
227
+ const identifiers = createRandomIdentifiersCurated(opts);
228
+ return getQuestionFromIdentifiers(identifiers, opts);
229
+ };
230
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
231
+ const question = {
232
+ answer: getAnswer(identifiers, opts),
233
+ instruction: getInstruction(identifiers, opts),
234
+ keys: ["un", "equal", "n"],
235
+ answerFormat: "tex",
236
+ identifiers,
237
+ hint: getHint(identifiers, opts),
238
+ correction: getCorrection(identifiers, opts),
239
+ options: opts,
240
+ };
241
+ return question;
242
+ };
243
+ const { optsDefaultFirstTermRankOne, generatorOptionFirstTermRankOne } = getOptionFirstTermRankOneStuff(false);
244
+ const optsDefault = Object.assign({}, optsDefaultFirstTermRankOne);
245
+ const options = [generatorOptionFirstTermRankOne];
246
+ export const geometricFindRandomTermFromTwoTerms = {
247
+ id: "geometricFindRandomTermFromTwoTerms",
248
+ connector: "=",
249
+ label: "Connaissant deux termes d'une suite géométrique, en donner une formule générale",
250
+ isSingleStep: true,
251
+ generator: (nb, opts) => getDistinctQuestions(() => getGeometricFindRandomTermFromTwoTermsQuestion(opts), nb),
252
+ options,
253
+ qcmTimer: 60,
254
+ freeTimer: 60,
255
+ getPropositions,
256
+ isAnswerValid,
257
+ subject: "Mathématiques",
258
+ getQuestionFromIdentifiers,
259
+ hasHintAndCorrection: true,
260
+ };
@@ -0,0 +1,14 @@
1
+ import { Exercise } from "../../../../../exercises/exercise.js";
2
+ import { OptionFirstTermRankOne } from "../../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { OptionIsWithSuperfluousData } from "../../../../../exercises/options/optionIsWithSuperfluousData.js";
4
+ import { SituationGeometricSuperfluousData } from "../../../../../math/utils/sequences/situations/seqGeometricSituations.js";
5
+ type Identifiers = {
6
+ situationIndex: number;
7
+ initial: number;
8
+ reason: number;
9
+ superfluousData?: SituationGeometricSuperfluousData;
10
+ };
11
+ type Options = OptionFirstTermRankOne & OptionIsWithSuperfluousData;
12
+ export declare const geometricFindExplicitFormulaFromSituation: Exercise<Identifiers, Options>;
13
+ export {};
14
+ //# sourceMappingURL=geometricFindExplicitFormulaFromSituation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometricFindExplicitFormulaFromSituation.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/sequences/geometric/situations/geometricFindExplicitFormulaFromSituation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAEL,2BAA2B,EAC5B,MAAM,wDAAwD,CAAC;AAIhE,OAAO,EAEL,iCAAiC,EAElC,MAAM,iEAAiE,CAAC;AAiBzE,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,iCAAiC,CAAC;CACrD,CAAC;AA8OF,KAAK,OAAO,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAcpE,eAAO,MAAM,yCAAyC,EAAE,QAAQ,CAC9D,WAAW,EACX,OAAO,CAoBR,CAAC"}
@@ -0,0 +1,186 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../../exercises/exercise.js";
2
+ import { getOptionFirstTermRankOneStuff, } from "../../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { getOptionIsWithSuperfluousData, } from "../../../../../exercises/options/optionIsWithSuperfluousData.js";
4
+ import { getDistinctQuestions } from "../../../../../exercises/utils/getDistinctQuestions.js";
5
+ import { randint } from "../../../../../math/utils/random/randint.js";
6
+ import { round } from "../../../../../math/utils/round.js";
7
+ import { situationsGeometric, } from "../../../../../math/utils/sequences/situations/seqGeometricSituations.js";
8
+ import { EqualNode, isEqualNode, } from "../../../../../tree/nodes/equations/equalNode.js";
9
+ import { add } from "../../../../../tree/nodes/operators/addNode.js";
10
+ import { multiply } from "../../../../../tree/nodes/operators/multiplyNode.js";
11
+ import { power } from "../../../../../tree/nodes/operators/powerNode.js";
12
+ import { substract } from "../../../../../tree/nodes/operators/substractNode.js";
13
+ import { parseAlgebraic } from "../../../../../tree/parsers/latexParser.js";
14
+ import { handleVEAError } from "../../../../../utils/errors/handleVEAError.js";
15
+ const getNodeFactor = (firstRank, varName = "n") => {
16
+ const nodeN = varName.toTree();
17
+ return firstRank === 0 ? nodeN : substract(nodeN, 1);
18
+ };
19
+ const situations = situationsGeometric;
20
+ const getInstruction = (identifiers, optsIn) => {
21
+ const opts = optsIn ?? optsDefault;
22
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
23
+ const { situationIndex, initial, reason, superfluousData } = identifiers;
24
+ const situation = situations[situationIndex];
25
+ return `${situation.getStrSituation(initial, reason, firstRank, superfluousData)}
26
+
27
+ Donner l'expression de $u_n$ en fonction de $n$.`;
28
+ };
29
+ const getAnswerNode = (identifiers, opts) => {
30
+ const firstRank = opts.firstTermRankOne ? 1 : 0;
31
+ const { situationIndex, initial, reason } = identifiers;
32
+ const situation = situations[situationIndex];
33
+ return situation.variationFindExplicitFormula.getAnswerNode(initial, reason, firstRank);
34
+ };
35
+ const getAnswer = (identifiers, optsIn) => {
36
+ const opts = optsIn ?? optsDefault;
37
+ return getAnswerNode(identifiers, opts).toTex();
38
+ };
39
+ const getHint = (identifiers, optsIn) => {
40
+ const opts = optsIn ?? optsDefault;
41
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
42
+ const { situationIndex } = identifiers;
43
+ const situation = situations[situationIndex];
44
+ return situation.variationFindExplicitFormula.getHint(firstRank);
45
+ };
46
+ const getCorrection = (identifiers, optsIn) => {
47
+ const opts = optsIn ?? optsDefault;
48
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
49
+ const { situationIndex, initial, reason } = identifiers;
50
+ const situation = situations[situationIndex];
51
+ return situation.variationFindExplicitFormula.getCorrectionStuff(initial, reason, firstRank).str;
52
+ };
53
+ const getPropositions = (n, { answer, ...identifiers }, optsIn) => {
54
+ const opts = optsIn ?? optsDefault;
55
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
56
+ const propositions = [];
57
+ const { initial, reason } = identifiers;
58
+ const nodeFactor = getNodeFactor(firstRank);
59
+ addValidProp(propositions, answer);
60
+ //student: type-specific mistake
61
+ {
62
+ const { situationIndex } = identifiers;
63
+ const situation = situations[situationIndex];
64
+ switch (situation.type) {
65
+ case "factor":
66
+ {
67
+ (() => { })();
68
+ }
69
+ break;
70
+ case "factorPercentage":
71
+ {
72
+ (() => { })();
73
+ }
74
+ break;
75
+ case "evo":
76
+ {
77
+ (() => { })();
78
+ }
79
+ break;
80
+ case "evoPercentage":
81
+ {
82
+ const evoPercentage = round((reason - 1) * 100, 2);
83
+ //student: reason = evoPercentage
84
+ {
85
+ tryToAddWrongProp(propositions, new EqualNode("u_n".toTree(), multiply(initial, power(evoPercentage, nodeFactor))).toTex());
86
+ }
87
+ //student: reason = 100 + evoPercentage
88
+ {
89
+ tryToAddWrongProp(propositions, new EqualNode("u_n".toTree(), multiply(initial, power(100 + evoPercentage, nodeFactor))).toTex());
90
+ }
91
+ }
92
+ break;
93
+ }
94
+ }
95
+ //student: swaps(initial, reason)
96
+ tryToAddWrongProp(propositions, new EqualNode("u_n".toTree(), multiply(reason, power(initial, nodeFactor))).toTex());
97
+ //student: u_n = initial + reason * n
98
+ tryToAddWrongProp(propositions, new EqualNode("u_n".toTree(), add(initial, multiply(nodeFactor, reason))).toTex());
99
+ return shuffleProps(propositions, n);
100
+ };
101
+ const isAnswerValid = (ans, { answer, ...identifiers }, optsIn) => {
102
+ const opts = optsIn ?? optsDefault;
103
+ try {
104
+ if (!ans.includes("=")) {
105
+ return false;
106
+ }
107
+ //TODO faire fonctionner parseAlgebraic("u_n = 3 \\times 2^n") (token _ not implemented)
108
+ // const nodeAns = parseAlgebraic(ans);
109
+ const nodeAns = (() => {
110
+ const [lhs, rhs] = ans.split("=");
111
+ const nodeLhs = lhs.toTree();
112
+ const nodeRhs = parseAlgebraic(rhs);
113
+ return new EqualNode(nodeLhs, nodeRhs);
114
+ })();
115
+ if (!isEqualNode(nodeAns)) {
116
+ return false;
117
+ }
118
+ const nodeAnswer = getAnswerNode(identifiers, opts);
119
+ const isValidLhs = () => nodeAns.leftChild.toTex() === nodeAnswer.leftChild.toTex();
120
+ const isValidRhs = () => {
121
+ const nodeAnsRhs = nodeAns.rightChild;
122
+ const nodeAnswerRhs = nodeAnswer.rightChild;
123
+ return [0, 1, 2, 10].every((n) => {
124
+ return (substract(nodeAnsRhs.evaluate({ n }), nodeAnswerRhs.evaluate({ n })).evaluate() === 0);
125
+ });
126
+ };
127
+ return isValidLhs() && isValidRhs();
128
+ }
129
+ catch (e) {
130
+ handleVEAError(e);
131
+ return false;
132
+ }
133
+ };
134
+ const getGeometricFindExplicitFormulaFromSituationQuestion = (optsIn) => {
135
+ const opts = optsIn ?? optsDefault;
136
+ const { isWithSuperfluousData } = opts;
137
+ const situationIndex = randint(0, situations.length);
138
+ const situation = situations[situationIndex];
139
+ const initial = situation.randInitial();
140
+ const reason = situation.randReason();
141
+ const superfluousData = isWithSuperfluousData
142
+ ? situation.randSuperfluousData()
143
+ : undefined;
144
+ const identifiers = {
145
+ situationIndex,
146
+ initial,
147
+ reason,
148
+ superfluousData,
149
+ };
150
+ return getQuestionFromIdentifiers(identifiers, opts);
151
+ };
152
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
153
+ const question = {
154
+ answer: getAnswer(identifiers, opts),
155
+ instruction: getInstruction(identifiers, opts),
156
+ keys: ["un", "equal", "n"],
157
+ answerFormat: "tex",
158
+ identifiers,
159
+ hint: getHint(identifiers, opts),
160
+ correction: getCorrection(identifiers, opts),
161
+ options: opts,
162
+ };
163
+ return question;
164
+ };
165
+ const optionsStuffFirstTermRankOne = getOptionFirstTermRankOneStuff(false);
166
+ const optionsStuffIsWithSuperfluousData = getOptionIsWithSuperfluousData(false);
167
+ const optsDefault = Object.assign({}, optionsStuffFirstTermRankOne.optsDefaultFirstTermRankOne, optionsStuffIsWithSuperfluousData.optsDefaultIsWithSuperfluousData);
168
+ const options = [
169
+ optionsStuffFirstTermRankOne.generatorOptionFirstTermRankOne,
170
+ optionsStuffIsWithSuperfluousData.generatorOptionIsWithSuperfluousData,
171
+ ];
172
+ export const geometricFindExplicitFormulaFromSituation = {
173
+ id: "geometricFindExplicitFormulaFromSituation",
174
+ connector: "=",
175
+ label: "À partir d'une situation décrivant une évolution géométrique, exprimer $u_n$ en fonction de $n$",
176
+ isSingleStep: true,
177
+ generator: (nb, opts) => getDistinctQuestions(() => getGeometricFindExplicitFormulaFromSituationQuestion(opts), nb),
178
+ options,
179
+ qcmTimer: 60,
180
+ freeTimer: 60,
181
+ getPropositions,
182
+ isAnswerValid,
183
+ subject: "Mathématiques",
184
+ getQuestionFromIdentifiers,
185
+ hasHintAndCorrection: true,
186
+ };
@@ -0,0 +1,15 @@
1
+ import { Exercise } from "../../../../../exercises/exercise.js";
2
+ import { OptionFirstTermRankOne } from "../../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { OptionIsWithSuperfluousData } from "../../../../../exercises/options/optionIsWithSuperfluousData.js";
4
+ import { SituationGeometricSuperfluousData } from "../../../../../math/utils/sequences/situations/seqGeometricSituations.js";
5
+ type Identifiers = {
6
+ situationIndex: number;
7
+ initial: number;
8
+ reason: number;
9
+ superfluousData?: SituationGeometricSuperfluousData;
10
+ valueAsked: number;
11
+ };
12
+ type Options = OptionFirstTermRankOne & OptionIsWithSuperfluousData;
13
+ export declare const geometricFindRankFromSituation: Exercise<Identifiers, Options>;
14
+ export {};
15
+ //# sourceMappingURL=geometricFindRankFromSituation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometricFindRankFromSituation.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/sequences/geometric/situations/geometricFindRankFromSituation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAEL,2BAA2B,EAC5B,MAAM,wDAAwD,CAAC;AAIhE,OAAO,EAEL,iCAAiC,EAElC,MAAM,iEAAiE,CAAC;AAGzE,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,iCAAiC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA0JF,KAAK,OAAO,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAcpE,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAmBzE,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, propWhile, } from "../../../../../exercises/exercise.js";
2
+ import { getOptionFirstTermRankOneStuff, } from "../../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { getOptionIsWithSuperfluousData, } from "../../../../../exercises/options/optionIsWithSuperfluousData.js";
4
+ import { getDistinctQuestions } from "../../../../../exercises/utils/getDistinctQuestions.js";
5
+ import { numberVEA } from "../../../../../exercises/vea/numberVEA.js";
6
+ import { randint } from "../../../../../math/utils/random/randint.js";
7
+ import { situationsGeometric, } from "../../../../../math/utils/sequences/situations/seqGeometricSituations.js";
8
+ import { handleVEAError } from "../../../../../utils/errors/handleVEAError.js";
9
+ const situations = situationsGeometric;
10
+ const getInstruction = (identifiers, optsIn) => {
11
+ const opts = optsIn ?? optsDefault;
12
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
13
+ const { situationIndex, initial, reason, superfluousData } = identifiers;
14
+ const situation = situations[situationIndex];
15
+ return `${situation.getStrSituation(initial, reason, firstRank, superfluousData)}
16
+
17
+ situation.variationFindRank.getStrQuestion!(
18
+ initial,
19
+ reason,
20
+ firstRank,
21
+ valueAsked,
22
+ )`;
23
+ };
24
+ const getAnswerNode = (_identifiers, _opts) => {
25
+ // const firstRank = opts?.firstTermRankOne ? 1 : 0;
26
+ // const { situationIndex, initial, reason, valueAsked } = identifiers;
27
+ // const situation = situations[situationIndex];
28
+ // return situation.variationFindRank.getAnswerNode(
29
+ // initial,
30
+ // reason,
31
+ // firstRank,
32
+ // valueAsked,
33
+ // );
34
+ return (0).toTree();
35
+ };
36
+ const getAnswer = (identifiers, optsIn) => {
37
+ const opts = optsIn ?? optsDefault;
38
+ return getAnswerNode(identifiers, opts).simplify().toTex();
39
+ };
40
+ const getHint = (_identifiers, _optsIn) => {
41
+ // const opts = optsIn ?? optsDefault;
42
+ // const firstRank = opts?.firstTermRankOne ? 1 : 0;
43
+ // const { situationIndex, valueAsked } = identifiers;
44
+ // const situation = situations[situationIndex];
45
+ // return situation.variationFindRank.getHint(firstRank, valueAsked);
46
+ return "hint";
47
+ };
48
+ const getCorrection = (_identifiers, _optsIn) => {
49
+ // const opts = optsIn ?? optsDefault;
50
+ // const firstRank = opts?.firstTermRankOne ? 1 : 0;
51
+ // const { situationIndex, initial, reason, valueAsked } = identifiers;
52
+ // const situation = situations[situationIndex];
53
+ // return situation.variationFindRank.getCorrectionStuff(
54
+ // initial,
55
+ // reason,
56
+ // firstRank,
57
+ // valueAsked,
58
+ // ).str as string;
59
+ return "correction";
60
+ };
61
+ const getPropositions = (n, { answer, ..._identifiers }, _optsIn) => {
62
+ // const opts = optsIn ?? optsDefault;
63
+ // const firstRank = opts?.firstTermRankOne ? 1 : 0;
64
+ // const { situationIndex, initial, reason, valueAsked } = identifiers;
65
+ // const situation = situations[situationIndex];
66
+ const propositions = [];
67
+ addValidProp(propositions, answer);
68
+ //filler
69
+ {
70
+ propWhile(propositions, n, () => {
71
+ tryToAddWrongProp(propositions, randint(1, 25).frenchify());
72
+ });
73
+ }
74
+ return shuffleProps(propositions, n);
75
+ };
76
+ const isAnswerValid = (ans, { answer }) => {
77
+ try {
78
+ return numberVEA(ans, answer);
79
+ }
80
+ catch (err) {
81
+ return handleVEAError(err);
82
+ }
83
+ };
84
+ const getGeometricFindRankFromSituationQuestion = (optsIn) => {
85
+ const opts = optsIn ?? optsDefault;
86
+ const { isWithSuperfluousData } = opts;
87
+ const firstRank = opts?.firstTermRankOne ? 1 : 0;
88
+ const situationIndex = randint(0, situations.length);
89
+ const situation = situations[situationIndex];
90
+ const initial = situation.randInitial();
91
+ const reason = situation.randReason();
92
+ const superfluousData = isWithSuperfluousData
93
+ ? situation.randSuperfluousData()
94
+ : undefined;
95
+ const rankAsked = randint(4, 15);
96
+ const valueAsked = situation.variationFindRandomTerm
97
+ .getAnswerNode(initial, reason, firstRank, rankAsked)
98
+ .evaluate();
99
+ const identifiers = {
100
+ situationIndex,
101
+ initial,
102
+ reason,
103
+ superfluousData,
104
+ valueAsked,
105
+ };
106
+ return getQuestionFromIdentifiers(identifiers, opts);
107
+ };
108
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
109
+ const question = {
110
+ answer: getAnswer(identifiers, opts),
111
+ instruction: getInstruction(identifiers, opts),
112
+ keys: [],
113
+ answerFormat: "tex",
114
+ identifiers,
115
+ hint: getHint(identifiers, opts),
116
+ correction: getCorrection(identifiers, opts),
117
+ options: opts,
118
+ };
119
+ return question;
120
+ };
121
+ const optionsStuffFirstTermRankOne = getOptionFirstTermRankOneStuff(false);
122
+ const optionsStuffIsWithSuperfluousData = getOptionIsWithSuperfluousData(false);
123
+ const optsDefault = Object.assign({}, optionsStuffFirstTermRankOne.optsDefaultFirstTermRankOne, optionsStuffIsWithSuperfluousData.optsDefaultIsWithSuperfluousData);
124
+ const options = [
125
+ optionsStuffFirstTermRankOne.generatorOptionFirstTermRankOne,
126
+ optionsStuffIsWithSuperfluousData.generatorOptionIsWithSuperfluousData,
127
+ ];
128
+ export const geometricFindRankFromSituation = {
129
+ id: "geometricFindRankFromSituation",
130
+ connector: "=",
131
+ label: "À partir d'une situation décrivant une évolution géométrique, retrouver le rang d'une valeur donnée",
132
+ isSingleStep: true,
133
+ generator: (nb, opts) => getDistinctQuestions(() => getGeometricFindRankFromSituationQuestion(opts), nb),
134
+ options,
135
+ qcmTimer: 60,
136
+ freeTimer: 60,
137
+ getPropositions,
138
+ isAnswerValid,
139
+ subject: "Mathématiques",
140
+ getQuestionFromIdentifiers,
141
+ hasHintAndCorrection: true,
142
+ };
@@ -0,0 +1,14 @@
1
+ import { Exercise } from "../../../../../exercises/exercise.js";
2
+ import { OptionFirstTermRankOne } from "../../../../../exercises/options/optionFirstTermRankOne.js";
3
+ import { OptionIsWithSuperfluousData } from "../../../../../exercises/options/optionIsWithSuperfluousData.js";
4
+ import { SituationGeometricSuperfluousData } from "../../../../../math/utils/sequences/situations/seqGeometricSituations.js";
5
+ type Identifiers = {
6
+ situationIndex: number;
7
+ initial: number;
8
+ reason: number;
9
+ superfluousData?: SituationGeometricSuperfluousData;
10
+ };
11
+ type Options = OptionFirstTermRankOne & OptionIsWithSuperfluousData;
12
+ export declare const geometricFindRecurrenceFormulaFromSituation: Exercise<Identifiers, Options>;
13
+ export {};
14
+ //# sourceMappingURL=geometricFindRecurrenceFormulaFromSituation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometricFindRecurrenceFormulaFromSituation.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/sequences/geometric/situations/geometricFindRecurrenceFormulaFromSituation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAEL,2BAA2B,EAC5B,MAAM,wDAAwD,CAAC;AAIhE,OAAO,EAEL,iCAAiC,EAElC,MAAM,iEAAiE,CAAC;AAkBzE,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,iCAAiC,CAAC;CACrD,CAAC;AAgRF,KAAK,OAAO,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAcpE,eAAO,MAAM,2CAA2C,EAAE,QAAQ,CAChE,WAAW,EACX,OAAO,CAoBR,CAAC"}