math-exercises 3.0.132 → 3.0.134
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.
- package/lib/exercises/math/calcul/mentalCaluls/mentalProgramSolve.d.ts +1 -1
- package/lib/exercises/math/calcul/mentalCaluls/mentalProgramSolve.d.ts.map +1 -1
- package/lib/exercises/math/calcul/mentalCaluls/mentalProgramSolve.js +5 -5
- package/lib/exercises/math/calcul/ordering/compareA10N.d.ts.map +1 -1
- package/lib/exercises/math/calcul/ordering/compareA10N.js +12 -7
- package/lib/exercises/math/calcul/rounding/estimatePow10NPlusPow10MinusN.d.ts.map +1 -1
- package/lib/exercises/math/calcul/rounding/estimatePow10NPlusPow10MinusN.js +8 -6
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistri.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistri.js +4 -0
- package/lib/exercises/math/calculLitteral/equation/equationFromProblem.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/equation/equationFromProblem.js +8 -9
- package/lib/exercises/math/calculLitteral/simplifying/compareATimes0.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/simplifying/compareATimes0.js +4 -4
- package/lib/exercises/math/conversion/prefixToNumber.d.ts +0 -2
- package/lib/exercises/math/conversion/prefixToNumber.d.ts.map +1 -1
- package/lib/exercises/math/conversion/prefixToNumber.js +27 -22
- package/lib/exercises/math/functions/affines/drawAffineFromPointAndLeadingCoeff.d.ts.map +1 -1
- package/lib/exercises/math/functions/affines/drawAffineFromPointAndLeadingCoeff.js +1 -2
- package/lib/exercises/math/functions/trinoms/roots/rootsReading.d.ts +4 -1
- package/lib/exercises/math/functions/trinoms/roots/rootsReading.d.ts.map +1 -1
- package/lib/exercises/math/functions/trinoms/roots/rootsReading.js +29 -9
- package/lib/exercises/math/geometry/cartesian/index.d.ts +1 -0
- package/lib/exercises/math/geometry/cartesian/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/cartesian/index.js +1 -0
- package/lib/exercises/math/geometry/cartesian/midpoint.d.ts.map +1 -1
- package/lib/exercises/math/geometry/cartesian/midpoint.js +8 -1
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLine.d.ts +6 -9
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLine.d.ts.map +1 -1
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLine.js +60 -137
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLineV2.d.ts +16 -0
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLineV2.d.ts.map +1 -0
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnSemiLineV2.js +213 -0
- package/lib/exercises/math/probaStat/basicProbas/possibleValuesForProba.js +2 -2
- package/lib/exercises/math/probaStat/conditionalProbaWriteFromFrench.js +6 -6
- package/lib/exercises/math/probaStat/probaAsSumOfProbas.d.ts +0 -1
- package/lib/exercises/math/probaStat/probaAsSumOfProbas.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/probaAsSumOfProbas.js +52 -59
- package/lib/exercises/math/probaStat/stats1var/plausibilityOfAverage.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/stats1var/plausibilityOfAverage.js +70 -23
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.d.ts +8 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.d.ts.map +1 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.js +105 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindTermFirstRankOne.d.ts +9 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindTermFirstRankOne.d.ts.map +1 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticFindTermFirstRankOne.js +99 -0
- package/lib/exercises/math/sequences/arithmetic/arithmeticRecurrenceFormulaUsage.d.ts.map +1 -1
- package/lib/exercises/math/sequences/arithmetic/arithmeticRecurrenceFormulaUsage.js +9 -1
- package/lib/exercises/math/sequences/arithmetic/index.d.ts +2 -0
- package/lib/exercises/math/sequences/arithmetic/index.d.ts.map +1 -1
- package/lib/exercises/math/sequences/arithmetic/index.js +2 -0
- package/lib/exercises/math/sequences/genericSequenceVariations.d.ts.map +1 -1
- package/lib/exercises/math/sequences/genericSequenceVariations.js +5 -1
- package/lib/exercises/math/sequences/geometric/geometricExplicitFormulaUsage.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricExplicitFormulaUsage.js +7 -1
- package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormula.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormula.js +1 -1
- package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFirstRankOne.d.ts +8 -0
- package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFirstRankOne.d.ts.map +1 -0
- package/lib/exercises/math/sequences/geometric/geometricFindExplicitFormulaFirstRankOne.js +112 -0
- package/lib/exercises/math/sequences/geometric/geometricFindTermFirstRankOne.d.ts +9 -0
- package/lib/exercises/math/sequences/geometric/geometricFindTermFirstRankOne.d.ts.map +1 -0
- package/lib/exercises/math/sequences/geometric/geometricFindTermFirstRankOne.js +97 -0
- package/lib/exercises/math/sequences/geometric/geometricReasonUsage.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricReasonUsage.js +3 -1
- package/lib/exercises/math/sequences/geometric/geometricRecurrenceFormulaUsage.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/geometricRecurrenceFormulaUsage.js +9 -1
- package/lib/exercises/math/sequences/geometric/index.d.ts +2 -0
- package/lib/exercises/math/sequences/geometric/index.d.ts.map +1 -1
- package/lib/exercises/math/sequences/geometric/index.js +2 -0
- package/lib/exercises/math/sequences/recurrenceFormulaUsage.d.ts.map +1 -1
- package/lib/exercises/math/sequences/recurrenceFormulaUsage.js +10 -3
- package/lib/exercises/pc/index.d.ts +0 -1
- package/lib/exercises/pc/index.d.ts.map +1 -1
- package/lib/exercises/pc/index.js +0 -1
- package/lib/exercises/pc/motion/averageSpeed.d.ts +0 -2
- package/lib/exercises/pc/motion/averageSpeed.d.ts.map +1 -1
- package/lib/exercises/pc/motion/averageSpeed.js +28 -36
- package/lib/exercises/pc/weight/calculateWeight.d.ts +0 -1
- package/lib/exercises/pc/weight/calculateWeight.d.ts.map +1 -1
- package/lib/exercises/pc/weight/calculateWeight.js +26 -19
- package/lib/index.d.ts +26 -39
- package/lib/index.d.ts.map +1 -1
- package/lib/playgroundUtils.d.ts +3 -0
- package/lib/playgroundUtils.d.ts.map +1 -0
- package/lib/playgroundUtils.js +13 -0
- package/lib/server.js +126 -0
- package/package.json +1 -1
|
@@ -216,8 +216,7 @@ class FiniteProbDistr {
|
|
|
216
216
|
const dictPToArrayOfIndexes = {};
|
|
217
217
|
for (let i = 0; i < arrProba.length; i++) {
|
|
218
218
|
const p = arrProba[i];
|
|
219
|
-
|
|
220
|
-
const tex = p.simplify().toTex();
|
|
219
|
+
const tex = p.toTex();
|
|
221
220
|
if (dictPToArrayOfIndexes[tex] === undefined) {
|
|
222
221
|
dictPToArrayOfIndexes[tex] = [];
|
|
223
222
|
}
|
|
@@ -233,7 +232,7 @@ class FiniteProbDistr {
|
|
|
233
232
|
return p;
|
|
234
233
|
}
|
|
235
234
|
getArrIndexForP(p) {
|
|
236
|
-
return this.dictPToArrayOfIndexes[p.
|
|
235
|
+
return this.dictPToArrayOfIndexes[p.toTex()];
|
|
237
236
|
}
|
|
238
237
|
getArrFrenchStrings(isDisplayingValue) {
|
|
239
238
|
return Object.entries(this.dictPToArrayOfIndexes)
|
|
@@ -273,12 +272,15 @@ const getAnswerValueNode = (identifiers) => {
|
|
|
273
272
|
const { eventIds, arrProba } = identifiers;
|
|
274
273
|
const evUnion = EventConstructor.fromIdentifiers(eventIds);
|
|
275
274
|
const finiteProbDistr = FiniteProbDistrConstructor.fromArrProba(arrProba.map((nodeIds) => NodeConstructor.fromIdentifiers(nodeIds)));
|
|
276
|
-
const
|
|
275
|
+
const arrFrac = evUnion
|
|
277
276
|
.getArrElem()
|
|
278
|
-
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index))
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
277
|
+
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index));
|
|
278
|
+
const nodeSumSimplified = (() => {
|
|
279
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
280
|
+
return frac(arrFrac
|
|
281
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
282
|
+
.reduce((acc, x) => acc + x, 0), den);
|
|
283
|
+
})();
|
|
282
284
|
return nodeSumSimplified;
|
|
283
285
|
};
|
|
284
286
|
const getAnswerNode = (identifiers) => {
|
|
@@ -320,11 +322,7 @@ $$
|
|
|
320
322
|
p_{${evElem.id}} = ${finiteProbDistr.getPForIndex(evElem.index).toTex()}
|
|
321
323
|
$$`).join(`
|
|
322
324
|
`)}`;
|
|
323
|
-
const nodeSumSimplified =
|
|
324
|
-
.getArrElem()
|
|
325
|
-
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index))).simplify({
|
|
326
|
-
//nbMaxSteps: 100,
|
|
327
|
-
});
|
|
325
|
+
const nodeSumSimplified = getAnswerNode(identifiers);
|
|
328
326
|
strCorrection += `
|
|
329
327
|
Donc:
|
|
330
328
|
|
|
@@ -344,7 +342,6 @@ $$`;
|
|
|
344
342
|
const optsDefault = {
|
|
345
343
|
nbElem: ["4", "6", "10", "12"],
|
|
346
344
|
unionLength: ["2", "3", "4", "5"],
|
|
347
|
-
isProbasAreNumbers: true,
|
|
348
345
|
};
|
|
349
346
|
const options = [
|
|
350
347
|
{
|
|
@@ -363,13 +360,6 @@ const options = [
|
|
|
363
360
|
values: ["2", "3", "4", "5", "6"],
|
|
364
361
|
defaultValue: optsDefault.unionLength,
|
|
365
362
|
},
|
|
366
|
-
// {
|
|
367
|
-
// id: "isProbasAreNumbers",
|
|
368
|
-
// label: "Probabilités sous forme de nombres ?",
|
|
369
|
-
// type: GeneratorOptionType.checkbox,
|
|
370
|
-
// target: GeneratorOptionTarget.generation,
|
|
371
|
-
// defaultValue: optsDefault.isProbasAreNumbers,
|
|
372
|
-
// },
|
|
373
363
|
];
|
|
374
364
|
const getKeys = () => {
|
|
375
365
|
return [];
|
|
@@ -382,39 +372,41 @@ const getPropositions = (n, { answer, ...identifiers }) => {
|
|
|
382
372
|
addValidProp(propositions, answer);
|
|
383
373
|
if (isProbasAreNumbers) {
|
|
384
374
|
const finiteProbDistr = FiniteProbDistrConstructor.fromArrProba(arrProba.map((nodeIds) => NodeConstructor.fromIdentifiers(nodeIds)));
|
|
385
|
-
|
|
386
|
-
.getArrElem()
|
|
387
|
-
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index)))
|
|
388
|
-
.simplify({
|
|
389
|
-
//nbMaxSteps: 100,
|
|
390
|
-
})
|
|
391
|
-
.toTex());
|
|
392
|
-
tryToAddWrongProp(propositions, substract(1, operatorComposition(MultiplyNode, evUnion
|
|
393
|
-
.getArrElem()
|
|
394
|
-
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index))))
|
|
395
|
-
.simplify({
|
|
396
|
-
//nbMaxSteps: 100,
|
|
397
|
-
})
|
|
398
|
-
.toTex());
|
|
399
|
-
tryToAddWrongProp(propositions, substract(1, operatorComposition(AddNode, evUnion
|
|
400
|
-
.getArrElem()
|
|
401
|
-
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index))).simplify({
|
|
402
|
-
//nbMaxSteps: 100,
|
|
403
|
-
})).toTex());
|
|
404
|
-
tryToAddWrongProp(propositions, operatorComposition(AddNode, evUnion
|
|
375
|
+
const arrFrac = evUnion
|
|
405
376
|
.getArrElem()
|
|
406
|
-
.map((evElem) =>
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
.
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
377
|
+
.map((evElem) => finiteProbDistr.getPForIndex(evElem.index));
|
|
378
|
+
tryToAddWrongProp(propositions, (() => {
|
|
379
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
380
|
+
return frac(arrFrac
|
|
381
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
382
|
+
.reduce((acc, x) => acc * x, 0), den);
|
|
383
|
+
})().toTex());
|
|
384
|
+
tryToAddWrongProp(propositions, (() => {
|
|
385
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
386
|
+
return frac(den -
|
|
387
|
+
arrFrac
|
|
388
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
389
|
+
.reduce((acc, x) => acc * x, 0), den);
|
|
390
|
+
})().toTex());
|
|
391
|
+
tryToAddWrongProp(propositions, (() => {
|
|
392
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
393
|
+
return frac(den -
|
|
394
|
+
arrFrac
|
|
395
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
396
|
+
.reduce((acc, x) => acc + x, 0), den);
|
|
397
|
+
})().toTex());
|
|
398
|
+
tryToAddWrongProp(propositions, (() => {
|
|
399
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
400
|
+
return frac(arrFrac
|
|
401
|
+
.map((fNode, i) => fNode.leftChild.evaluate() * i)
|
|
402
|
+
.reduce((acc, x) => acc + x, 0), den);
|
|
403
|
+
})().toTex());
|
|
404
|
+
tryToAddWrongProp(propositions, (() => {
|
|
405
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
406
|
+
return frac(arrFrac
|
|
407
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
408
|
+
.reduce((acc, x) => acc + x, 0), den * evUnion.getArrElem().length);
|
|
409
|
+
})().toTex());
|
|
418
410
|
}
|
|
419
411
|
else {
|
|
420
412
|
tryToAddWrongProp(propositions, operatorComposition(MultiplyNode, evUnion.getArrElem().map((evElem) => evElem.p))
|
|
@@ -451,10 +443,13 @@ const getValueNode = (tex, arrProba) => {
|
|
|
451
443
|
return parseInt(texVar.substring(texVar.indexOf("E_{") + 3, texVar.indexOf("}}")));
|
|
452
444
|
}
|
|
453
445
|
});
|
|
454
|
-
const
|
|
455
|
-
return
|
|
456
|
-
|
|
457
|
-
|
|
446
|
+
const arrFrac = arrayOfIndexes.map((i) => finiteProbDistr.getPForIndex(i));
|
|
447
|
+
return (() => {
|
|
448
|
+
const den = arrFrac[0].rightChild.evaluate();
|
|
449
|
+
return frac(arrFrac
|
|
450
|
+
.map((fNode) => fNode.leftChild.evaluate())
|
|
451
|
+
.reduce((acc, x) => acc + x, 0), den);
|
|
452
|
+
})();
|
|
458
453
|
};
|
|
459
454
|
const isAnswerValid = (ans, { answer, ...identifiers }) => {
|
|
460
455
|
const { arrProba } = identifiers;
|
|
@@ -481,12 +476,10 @@ const getProbaAsSumOfProbasQuestion = (optsIn) => {
|
|
|
481
476
|
const eventIds = evUnion.toIdentifiers();
|
|
482
477
|
const nbUnique = Math.min(randint(3, 7), situation.allElem.length - 1);
|
|
483
478
|
const finiteProbDistr = FiniteProbDistrConstructor.randomDistr(situation.allElem.length, nbUnique);
|
|
484
|
-
const isProbasAreNumbers = opts.isProbasAreNumbers;
|
|
485
479
|
const identifiers = {
|
|
486
480
|
indexSituation,
|
|
487
481
|
eventIds,
|
|
488
482
|
arrProba: finiteProbDistr.arrProba.map((node) => node.toIdentifiers()),
|
|
489
|
-
isProbasAreNumbers,
|
|
490
483
|
};
|
|
491
484
|
return getQuestionFromIdentifiers(identifiers, opts);
|
|
492
485
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plausibilityOfAverage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/probaStat/stats1var/plausibilityOfAverage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"plausibilityOfAverage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/probaStat/stats1var/plausibilityOfAverage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAMrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAiOF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,WAAW,CAkBvD,CAAC"}
|
|
@@ -3,7 +3,6 @@ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQue
|
|
|
3
3
|
import { randint } from "../../../../math/utils/random/randint.js";
|
|
4
4
|
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
5
5
|
import { random } from "../../../../utils/alea/random.js";
|
|
6
|
-
import { mdTable } from "../../../../utils/markdown/mdTable.js";
|
|
7
6
|
const getInstruction = (identifiers) => {
|
|
8
7
|
const { a, values, isQuestionIsAboveA } = identifiers;
|
|
9
8
|
return `Si on considère la série suivante :
|
|
@@ -20,36 +19,84 @@ La proposition suivante est-elle vraie ?
|
|
|
20
19
|
const getHint = ({ a }) => {
|
|
21
20
|
return `Regarde l'écart des valeurs par rapport à $${a.frenchify()}$.`;
|
|
22
21
|
};
|
|
22
|
+
// const getCorrection: GetCorrection<Identifiers> = (identifiers) => {
|
|
23
|
+
// const { a, values, isAboveA } = identifiers;
|
|
24
|
+
// const answer = getAnswer(identifiers);
|
|
25
|
+
// const valuesBelowA = values.filter((v) => v < a);
|
|
26
|
+
// const valuesAboveA = values.filter((v) => v > a);
|
|
27
|
+
// return `${answer}, car si l'on regarde les écarts par rapport à $${a.frenchify()}$ :
|
|
28
|
+
// $\\ $
|
|
29
|
+
// ${mdTable(
|
|
30
|
+
// [
|
|
31
|
+
// ["\\text{Valeur}", "\\text{Écart}"],
|
|
32
|
+
// [`\\text{Valeurs inférieures à } ${a.frenchify()}`, "\\text{}"],
|
|
33
|
+
// ...valuesBelowA.map((v) => [v.frenchify(), (v - a).frenchify()]),
|
|
34
|
+
// [
|
|
35
|
+
// "\\text{Total inférieur}",
|
|
36
|
+
// valuesBelowA
|
|
37
|
+
// .map((v) => v - a)
|
|
38
|
+
// .reduce((acc, v) => acc + v, 0)
|
|
39
|
+
// .frenchify(),
|
|
40
|
+
// ],
|
|
41
|
+
// [`\\text{Valeurs supérieures à } ${a.frenchify()}`, "\\text{}"],
|
|
42
|
+
// ...valuesAboveA.map((v) => [v.frenchify(), `+${(v - a).frenchify()}`]),
|
|
43
|
+
// [
|
|
44
|
+
// "\\text{Total supérieur}",
|
|
45
|
+
// `+${valuesAboveA
|
|
46
|
+
// .map((v) => v - a)
|
|
47
|
+
// .reduce((acc, v) => acc + v, 0)
|
|
48
|
+
// .frenchify()}`,
|
|
49
|
+
// ],
|
|
50
|
+
// ],
|
|
51
|
+
// true,
|
|
52
|
+
// )}
|
|
53
|
+
// $\\ $
|
|
54
|
+
// Le total ${
|
|
55
|
+
// isAboveA ? `supérieur` : `inférieur`
|
|
56
|
+
// } est plus grand, en valeur absolue, que le total ${
|
|
57
|
+
// isAboveA ? `inférieur` : `supérieur`
|
|
58
|
+
// } donc on peut affirmer que la moyenne de cette série est strictement ${
|
|
59
|
+
// isAboveA ? `supérieure` : `inférieure`
|
|
60
|
+
// } à $${a.frenchify()}$.`;
|
|
61
|
+
// };
|
|
23
62
|
const getCorrection = (identifiers) => {
|
|
24
63
|
const { a, values, isAboveA } = identifiers;
|
|
25
64
|
const answer = getAnswer(identifiers);
|
|
26
65
|
const valuesBelowA = values.filter((v) => v < a);
|
|
27
66
|
const valuesAboveA = values.filter((v) => v > a);
|
|
28
|
-
return `${answer}
|
|
67
|
+
return `${answer}. En effet :
|
|
29
68
|
|
|
30
69
|
$\\ $
|
|
70
|
+
|
|
71
|
+
Si l'on regarde les valeurs strictement inférieures à $${a.frenchify()}$ :
|
|
72
|
+
|
|
73
|
+
${valuesBelowA
|
|
74
|
+
.map((v) => `
|
|
75
|
+
|
|
76
|
+
$${v.frenchify()}$ est $${(a - v).frenchify()}$ points en dessous de $${a.frenchify()}$
|
|
31
77
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
78
|
+
`)
|
|
79
|
+
.join("")}
|
|
80
|
+
Ce qui fait en tout $${valuesBelowA
|
|
81
|
+
.map((v) => a - v)
|
|
82
|
+
.reduce((acc, v) => acc + v, 0)
|
|
83
|
+
.frenchify()}$ points en dessous de $${a.frenchify()}$.
|
|
84
|
+
|
|
85
|
+
$\\ $
|
|
86
|
+
|
|
87
|
+
Si l'on regarde les valeurs strictement supérieures à $${a.frenchify()}$ :
|
|
88
|
+
|
|
89
|
+
${valuesAboveA
|
|
90
|
+
.map((v) => `
|
|
91
|
+
|
|
92
|
+
$${v.frenchify()}$ est $${(v - a).frenchify()}$ points en dessus de $${a.frenchify()}$
|
|
93
|
+
|
|
94
|
+
`)
|
|
95
|
+
.join("")}
|
|
96
|
+
Ce qui fait en tout $${valuesAboveA
|
|
97
|
+
.map((v) => v - a)
|
|
98
|
+
.reduce((acc, v) => acc + v, 0)
|
|
99
|
+
.frenchify()}$ points au dessus de $${a.frenchify()}$.
|
|
53
100
|
|
|
54
101
|
$\\ $
|
|
55
102
|
|
package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
firstValue: number;
|
|
4
|
+
reason: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const arithmeticFindExplicitFormulaFirstRankOne: Exercise<Identifiers>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=arithmeticFindExplicitFormulaFirstRankOne.d.ts.map
|
package/lib/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmeticFindExplicitFormulaFirstRankOne.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticFindExplicitFormulaFirstRankOne.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA4GF,eAAO,MAAM,yCAAyC,EAAE,QAAQ,CAAC,WAAW,CAgBzE,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { addValidProp, propWhile, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { Polynomial } from "../../../../math/polynomials/polynomial.js";
|
|
4
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
5
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
6
|
+
import { shuffle } from "../../../../utils/alea/shuffle.js";
|
|
7
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
8
|
+
const getInstruction = (identifiers) => {
|
|
9
|
+
return `$(u_n)$ est une suite arithmétique de premier terme $u_{1} = ${identifiers.firstValue}$ et de raison $r = ${identifiers.reason}$.
|
|
10
|
+
|
|
11
|
+
Donner l'expression de $u_n$ en fonction de $n$.`;
|
|
12
|
+
};
|
|
13
|
+
const getHint = (_identifiers) => {
|
|
14
|
+
return `Utilise la formule générale d'une suite arithmétique :
|
|
15
|
+
|
|
16
|
+
$$
|
|
17
|
+
u_n = u_1 + (n-1) \\times r
|
|
18
|
+
$$
|
|
19
|
+
|
|
20
|
+
où $u_1$ est le premier terme et $r$ la raison.`;
|
|
21
|
+
};
|
|
22
|
+
const getCorrection = (identifiers) => {
|
|
23
|
+
const answer = getAnswer(identifiers);
|
|
24
|
+
return `La formule générale d'une suite arithmétique est :
|
|
25
|
+
|
|
26
|
+
$$
|
|
27
|
+
u_n = u_1 + (n-1) \\times r
|
|
28
|
+
$$
|
|
29
|
+
|
|
30
|
+
où $u_1$ est le premier terme et $r$ la raison.
|
|
31
|
+
|
|
32
|
+
Ici, puisque $u_1 = ${identifiers.firstValue}$ et $r = ${identifiers.reason}$, on a :
|
|
33
|
+
|
|
34
|
+
$$
|
|
35
|
+
${answer}
|
|
36
|
+
$$
|
|
37
|
+
|
|
38
|
+
`;
|
|
39
|
+
};
|
|
40
|
+
const getAnswer = (identifiers) => {
|
|
41
|
+
const { firstValue, reason } = identifiers;
|
|
42
|
+
const formula = new Polynomial([firstValue - reason, reason], "n");
|
|
43
|
+
const answer = "u_n=" + formula.toTex();
|
|
44
|
+
return answer;
|
|
45
|
+
};
|
|
46
|
+
const getArithmeticFindExplicitFormula = () => {
|
|
47
|
+
const firstValue = randint(-10, 10);
|
|
48
|
+
const reason = randint(-10, 10, [0]);
|
|
49
|
+
const identifiers = { firstValue, reason };
|
|
50
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
51
|
+
};
|
|
52
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
53
|
+
const question = {
|
|
54
|
+
instruction: getInstruction(identifiers),
|
|
55
|
+
answer: getAnswer(identifiers),
|
|
56
|
+
keys: ["un", "equal", "n"],
|
|
57
|
+
answerFormat: "tex",
|
|
58
|
+
identifiers,
|
|
59
|
+
hint: getHint(identifiers),
|
|
60
|
+
correction: getCorrection(identifiers),
|
|
61
|
+
};
|
|
62
|
+
return question;
|
|
63
|
+
};
|
|
64
|
+
const getPropositions = (n, { answer, firstValue, reason }) => {
|
|
65
|
+
const propositions = [];
|
|
66
|
+
addValidProp(propositions, answer);
|
|
67
|
+
propWhile(propositions, n, () => {
|
|
68
|
+
tryToAddWrongProp(propositions, "u_n=" +
|
|
69
|
+
new Polynomial([firstValue + randint(-3, 4), reason + randint(-3, 4, [-reason])], "n")
|
|
70
|
+
.toTree()
|
|
71
|
+
.toTex());
|
|
72
|
+
});
|
|
73
|
+
return shuffle(propositions);
|
|
74
|
+
};
|
|
75
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
76
|
+
try {
|
|
77
|
+
const formated = ans.replaceAll("u_n", "").replaceAll("=", "");
|
|
78
|
+
const parsed = parseAlgebraic(formated);
|
|
79
|
+
if (!parsed)
|
|
80
|
+
return false;
|
|
81
|
+
return (parsed
|
|
82
|
+
.simplify({
|
|
83
|
+
towardsDistribute: true,
|
|
84
|
+
forbidFactorize: true,
|
|
85
|
+
})
|
|
86
|
+
.toTex() === answer.split("=")[1]);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
return handleVEAError(err);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
export const arithmeticFindExplicitFormulaFirstRankOne = {
|
|
93
|
+
id: "arithmeticFindExplicitFormulaFirstRankOne",
|
|
94
|
+
connector: "=",
|
|
95
|
+
label: "Déterminer la formule générale d'une suite arithmétique (premier terme $u_1$)",
|
|
96
|
+
isSingleStep: false,
|
|
97
|
+
generator: (nb, opts) => getDistinctQuestions(() => getArithmeticFindExplicitFormula(opts), nb),
|
|
98
|
+
qcmTimer: 60,
|
|
99
|
+
freeTimer: 60,
|
|
100
|
+
getPropositions,
|
|
101
|
+
isAnswerValid,
|
|
102
|
+
subject: "Mathématiques",
|
|
103
|
+
hasHintAndCorrection: true,
|
|
104
|
+
getQuestionFromIdentifiers,
|
|
105
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
firstTerm: number;
|
|
4
|
+
reason: number;
|
|
5
|
+
askedRank: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const arithmeticFindTermFirstRankOne: Exercise<Identifiers>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=arithmeticFindTermFirstRankOne.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmeticFindTermFirstRankOne.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticFindTermFirstRankOne.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAsGF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,CAehE,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, tryToAddWrongProp, propWhile, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
4
|
+
import { AddNode } from "../../../../tree/nodes/operators/addNode.js";
|
|
5
|
+
import { MultiplyNode } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
6
|
+
import { SubstractNode } from "../../../../tree/nodes/operators/substractNode.js";
|
|
7
|
+
import { VariableNode } from "../../../../tree/nodes/variables/variableNode.js";
|
|
8
|
+
import { alignTex } from "../../../../utils/latex/alignTex.js";
|
|
9
|
+
const getInstruction = (identifiers) => {
|
|
10
|
+
const { firstTerm, reason, askedRank } = identifiers;
|
|
11
|
+
return `Soit $u$ la suite arithmétique de premier terme $u_1 = ${firstTerm}$ et de raison $r = ${reason}$.
|
|
12
|
+
|
|
13
|
+
Calculer $u_{${askedRank}}$.`;
|
|
14
|
+
};
|
|
15
|
+
const getAnswer = (identifiers) => {
|
|
16
|
+
const { firstTerm, reason, askedRank } = identifiers;
|
|
17
|
+
const answer = firstTerm + reason * (askedRank - 1);
|
|
18
|
+
return answer.frenchify();
|
|
19
|
+
};
|
|
20
|
+
const getHint = () => {
|
|
21
|
+
return `Le terme général d'une suite arithmétique est :
|
|
22
|
+
|
|
23
|
+
$$
|
|
24
|
+
u_n = u_1 + r \\times (n-1)
|
|
25
|
+
$$
|
|
26
|
+
|
|
27
|
+
où $u_1$ est le premier terme et $r$ la raison.`;
|
|
28
|
+
};
|
|
29
|
+
const getCorrection = (identifiers) => {
|
|
30
|
+
const { firstTerm, reason, askedRank } = identifiers;
|
|
31
|
+
return `Le terme général de la suite $u$ est :
|
|
32
|
+
|
|
33
|
+
${alignTex([
|
|
34
|
+
[`u_n`, "=", `u_1 + r \\times (n-1)`],
|
|
35
|
+
[
|
|
36
|
+
"",
|
|
37
|
+
"=",
|
|
38
|
+
new AddNode(firstTerm.toTree(), new MultiplyNode(reason.toTree(), new SubstractNode(new VariableNode("n"), (1).toTree()))).toTex(),
|
|
39
|
+
],
|
|
40
|
+
])}
|
|
41
|
+
|
|
42
|
+
Il suffit alors de remplacer $n$ par $${askedRank}$ dans la formule :
|
|
43
|
+
|
|
44
|
+
${alignTex([
|
|
45
|
+
[
|
|
46
|
+
`u_{${askedRank}}`,
|
|
47
|
+
"=",
|
|
48
|
+
`${new AddNode(firstTerm.toTree(), new MultiplyNode(reason.toTree(), (askedRank - 1).toTree())).toTex()}`,
|
|
49
|
+
],
|
|
50
|
+
["", "=", `${getAnswer(identifiers)}`],
|
|
51
|
+
])}
|
|
52
|
+
`;
|
|
53
|
+
};
|
|
54
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
55
|
+
const question = {
|
|
56
|
+
answer: getAnswer(identifiers),
|
|
57
|
+
instruction: getInstruction(identifiers),
|
|
58
|
+
keys: [],
|
|
59
|
+
answerFormat: "tex",
|
|
60
|
+
identifiers,
|
|
61
|
+
hint: getHint(identifiers),
|
|
62
|
+
correction: getCorrection(identifiers),
|
|
63
|
+
};
|
|
64
|
+
return question;
|
|
65
|
+
};
|
|
66
|
+
const getArithmeticFindTermQuestion = () => {
|
|
67
|
+
const firstRank = 1;
|
|
68
|
+
const firstTerm = randint(-15, 15);
|
|
69
|
+
const reason = randint(-10, 10, [0]);
|
|
70
|
+
const askedRank = randint(5, 15);
|
|
71
|
+
const identifiers = { firstRank, askedRank, firstTerm, reason };
|
|
72
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
73
|
+
};
|
|
74
|
+
const getPropositions = (n, { answer, askedRank, firstTerm, reason }) => {
|
|
75
|
+
const propositions = [];
|
|
76
|
+
addValidProp(propositions, answer);
|
|
77
|
+
propWhile(propositions, n, () => {
|
|
78
|
+
const fake = firstTerm + reason * (askedRank - randint(-4, 4, [1]));
|
|
79
|
+
tryToAddWrongProp(propositions, fake + "");
|
|
80
|
+
});
|
|
81
|
+
return shuffleProps(propositions, n);
|
|
82
|
+
};
|
|
83
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
84
|
+
return ans === answer;
|
|
85
|
+
};
|
|
86
|
+
export const arithmeticFindTermFirstRankOne = {
|
|
87
|
+
id: "arithmeticFindTermFirstRankOne",
|
|
88
|
+
connector: "=",
|
|
89
|
+
label: "Calculer un terme d'une suite arithmétique à partir de son premier terme ($u_1$) et sa raison",
|
|
90
|
+
isSingleStep: true,
|
|
91
|
+
generator: (nb) => getDistinctQuestions(getArithmeticFindTermQuestion, nb),
|
|
92
|
+
qcmTimer: 60,
|
|
93
|
+
freeTimer: 60,
|
|
94
|
+
getPropositions,
|
|
95
|
+
isAnswerValid,
|
|
96
|
+
subject: "Mathématiques",
|
|
97
|
+
hasHintAndCorrection: true,
|
|
98
|
+
getQuestionFromIdentifiers,
|
|
99
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arithmeticRecurrenceFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticRecurrenceFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAIrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"arithmeticRecurrenceFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticRecurrenceFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAIrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAwEF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,WAAW,CAalE,CAAC"}
|
|
@@ -5,7 +5,15 @@ import { shuffle } from "../../../../utils/alea/shuffle.js";
|
|
|
5
5
|
const getInstruction = (identifiers) => {
|
|
6
6
|
const { firstRank, firstValue, reason } = identifiers;
|
|
7
7
|
const askedRank = firstRank + 1;
|
|
8
|
-
return `$(u_n)$ est une suite définie par
|
|
8
|
+
return `$(u_n)$ est une suite définie par :
|
|
9
|
+
|
|
10
|
+
$$
|
|
11
|
+
u_{n+1} = ${reason} + u_n
|
|
12
|
+
$$
|
|
13
|
+
|
|
14
|
+
et $u_{${firstRank}} = ${firstValue}$.
|
|
15
|
+
|
|
16
|
+
Calculer le terme $u_{${askedRank}}$.`;
|
|
9
17
|
};
|
|
10
18
|
const getAnswer = (identifiers) => {
|
|
11
19
|
const { firstValue, reason } = identifiers;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./arithmeticExplicitFormulaUsage.js";
|
|
2
2
|
export * from "./arithmeticFindExplicitFormula.js";
|
|
3
|
+
export * from "./arithmeticFindExplicitFormulaFirstRankOne.js";
|
|
3
4
|
export * from "./arithmeticFindReason.js";
|
|
4
5
|
export * from "./arithmeticReasonUsage.js";
|
|
5
6
|
export * from "./arithmeticRecurrenceFormulaUsage.js";
|
|
@@ -14,5 +15,6 @@ export * from "./arithmeticFindExplictFormulaFirstTermRandom.js";
|
|
|
14
15
|
export * from "./arithmeticFindReasonRandomRange.js";
|
|
15
16
|
export * from "./arithmeticFindRandomTermFromTwoTerms.js";
|
|
16
17
|
export * from "./arithmeticFindTerm.js";
|
|
18
|
+
export * from "./arithmeticFindTermFirstRankOne.js";
|
|
17
19
|
export * from "./arithmeticFindAntecedent.js";
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AAEpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gDAAgD,CAAC;AAE/D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./arithmeticExplicitFormulaUsage.js";
|
|
2
2
|
export * from "./arithmeticFindExplicitFormula.js";
|
|
3
|
+
export * from "./arithmeticFindExplicitFormulaFirstRankOne.js";
|
|
3
4
|
export * from "./arithmeticFindReason.js";
|
|
4
5
|
export * from "./arithmeticReasonUsage.js";
|
|
5
6
|
export * from "./arithmeticRecurrenceFormulaUsage.js";
|
|
@@ -14,4 +15,5 @@ export * from "./arithmeticFindExplictFormulaFirstTermRandom.js";
|
|
|
14
15
|
export * from "./arithmeticFindReasonRandomRange.js";
|
|
15
16
|
export * from "./arithmeticFindRandomTermFromTwoTerms.js";
|
|
16
17
|
export * from "./arithmeticFindTerm.js";
|
|
18
|
+
export * from "./arithmeticFindTermFirstRankOne.js";
|
|
17
19
|
export * from "./arithmeticFindAntecedent.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genericSequenceVariations.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sequences/genericSequenceVariations.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"genericSequenceVariations.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sequences/genericSequenceVariations.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAyEF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAc3D,CAAC"}
|
|
@@ -5,7 +5,11 @@ import { randint } from "../../../math/utils/random/randint.js";
|
|
|
5
5
|
const getInstruction = (identifiers) => {
|
|
6
6
|
const { coeffs } = identifiers;
|
|
7
7
|
const u = new Polynomial(coeffs, "n");
|
|
8
|
-
return `Soit $u$ la suite définie par
|
|
8
|
+
return `Soit $u$ la suite définie par :
|
|
9
|
+
|
|
10
|
+
$$
|
|
11
|
+
u_n = ${u.toTree().toTex()}
|
|
12
|
+
$$
|
|
9
13
|
|
|
10
14
|
Quel est le sens de variations de $u$ ?`;
|
|
11
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometricExplicitFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricExplicitFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"geometricExplicitFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricExplicitFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAwGF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAmB/D,CAAC"}
|
|
@@ -13,7 +13,13 @@ const getInstruction = (identifiers) => {
|
|
|
13
13
|
const { firstValue, reason, askedRank } = identifiers;
|
|
14
14
|
const formula = new MultiplyNode(new NumberNode(firstValue), new PowerNode(new NumberNode(reason), new VariableNode("n")));
|
|
15
15
|
const formulaTex = formula.toTex();
|
|
16
|
-
return `$(u_n)$ est une suite géométrique définie par
|
|
16
|
+
return `$(u_n)$ est une suite géométrique définie par :
|
|
17
|
+
|
|
18
|
+
$$
|
|
19
|
+
u_n = ${formulaTex}
|
|
20
|
+
$$
|
|
21
|
+
|
|
22
|
+
Calculer le terme $u_{${askedRank}}$.`;
|
|
17
23
|
};
|
|
18
24
|
const getAnswer = (identifiers) => {
|
|
19
25
|
const { firstValue, reason, askedRank } = identifiers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometricFindExplicitFormula.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricFindExplicitFormula.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAcrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8HF,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"geometricFindExplicitFormula.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricFindExplicitFormula.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAcrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8HF,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,WAAW,CAe9D,CAAC"}
|
|
@@ -98,7 +98,7 @@ const isAnswerValid = (ans, { reason, firstValue }) => {
|
|
|
98
98
|
export const geometricFindExplicitFormula = {
|
|
99
99
|
id: "geometricFindExplicitFormula",
|
|
100
100
|
connector: "=",
|
|
101
|
-
label: "Déterminer la formule générale d'une suite géométrique",
|
|
101
|
+
label: "Déterminer la formule générale d'une suite géométrique (premier rang $u_0$)",
|
|
102
102
|
isSingleStep: false,
|
|
103
103
|
generator: (nb) => getDistinctQuestions(getGeometricFindExplicitFormula, nb),
|
|
104
104
|
qcmTimer: 60,
|