math-exercises 3.0.184 → 3.0.186

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 (89) hide show
  1. package/lib/exercises/exercise.d.ts +1 -0
  2. package/lib/exercises/exercise.d.ts.map +1 -1
  3. package/lib/exercises/math/derivation/derivative/exp/index.d.ts +2 -0
  4. package/lib/exercises/math/derivation/derivative/exp/index.d.ts.map +1 -1
  5. package/lib/exercises/math/derivation/derivative/exp/index.js +2 -0
  6. package/lib/exercises/math/derivation/derivative/index.d.ts +3 -0
  7. package/lib/exercises/math/derivation/derivative/index.d.ts.map +1 -1
  8. package/lib/exercises/math/derivation/derivative/index.js +3 -0
  9. package/lib/exercises/math/derivation/derivativeNumber/index.d.ts +2 -0
  10. package/lib/exercises/math/derivation/derivativeNumber/index.d.ts.map +1 -1
  11. package/lib/exercises/math/derivation/derivativeNumber/index.js +2 -0
  12. package/lib/exercises/math/derivation/index.d.ts +1 -0
  13. package/lib/exercises/math/derivation/index.d.ts.map +1 -1
  14. package/lib/exercises/math/derivation/index.js +1 -0
  15. package/lib/exercises/math/derivation/tangent/index.d.ts +9 -0
  16. package/lib/exercises/math/derivation/tangent/index.d.ts.map +1 -1
  17. package/lib/exercises/math/derivation/tangent/index.js +9 -0
  18. package/lib/exercises/math/derivation/variations/index.d.ts +8 -0
  19. package/lib/exercises/math/derivation/variations/index.d.ts.map +1 -1
  20. package/lib/exercises/math/derivation/variations/index.js +8 -0
  21. package/lib/exercises/math/derivation/variations/signVarTable3dDegree.d.ts +10 -0
  22. package/lib/exercises/math/derivation/variations/signVarTable3dDegree.d.ts.map +1 -1
  23. package/lib/exercises/math/derivation/variations/signVarTable3dDegree.js +235 -231
  24. package/lib/exercises/math/functions/exponential/algebraic/approxExpAPlusB.d.ts.map +1 -1
  25. package/lib/exercises/math/functions/exponential/algebraic/approxExpAPlusB.js +91 -38
  26. package/lib/exercises/math/probaStat/trees/index.d.ts +1 -1
  27. package/lib/exercises/math/probaStat/trees/index.d.ts.map +1 -1
  28. package/lib/exercises/math/probaStat/trees/index.js +1 -3
  29. package/lib/exercises/math/probaStat/trees/probabilityTree.d.ts +9 -3
  30. package/lib/exercises/math/probaStat/trees/probabilityTree.d.ts.map +1 -1
  31. package/lib/exercises/math/probaStat/trees/probabilityTree.js +419 -45
  32. package/lib/exercises/math/python/index.d.ts +1 -0
  33. package/lib/exercises/math/python/index.d.ts.map +1 -1
  34. package/lib/exercises/math/python/index.js +1 -0
  35. package/lib/exercises/math/python/list/index.d.ts +11 -0
  36. package/lib/exercises/math/python/list/index.d.ts.map +1 -0
  37. package/lib/exercises/math/python/list/index.js +10 -0
  38. package/lib/exercises/math/python/list/pyListAppend.d.ts +29 -0
  39. package/lib/exercises/math/python/list/pyListAppend.d.ts.map +1 -0
  40. package/lib/exercises/math/python/list/pyListAppend.js +280 -0
  41. package/lib/exercises/math/python/list/pyListCreateListByComprehension.d.ts +11 -0
  42. package/lib/exercises/math/python/list/pyListCreateListByComprehension.d.ts.map +1 -0
  43. package/lib/exercises/math/python/list/pyListCreateListByComprehension.js +231 -0
  44. package/lib/exercises/math/python/list/pyListCreateListInstructionCompletion.d.ts +9 -0
  45. package/lib/exercises/math/python/list/pyListCreateListInstructionCompletion.d.ts.map +1 -0
  46. package/lib/exercises/math/python/list/pyListCreateListInstructionCompletion.js +232 -0
  47. package/lib/exercises/math/python/list/pyListElemAtIndex.d.ts +9 -0
  48. package/lib/exercises/math/python/list/pyListElemAtIndex.d.ts.map +1 -0
  49. package/lib/exercises/math/python/list/pyListElemAtIndex.js +292 -0
  50. package/lib/exercises/math/python/list/pyListMutationMix.d.ts +29 -0
  51. package/lib/exercises/math/python/list/pyListMutationMix.d.ts.map +1 -0
  52. package/lib/exercises/math/python/list/pyListMutationMix.js +455 -0
  53. package/lib/exercises/math/python/list/pyListRemove.d.ts +29 -0
  54. package/lib/exercises/math/python/list/pyListRemove.d.ts.map +1 -0
  55. package/lib/exercises/math/python/list/pyListRemove.js +375 -0
  56. package/lib/exercises/math/python/list/pyListSetElemAtIndex.d.ts +29 -0
  57. package/lib/exercises/math/python/list/pyListSetElemAtIndex.d.ts.map +1 -0
  58. package/lib/exercises/math/python/list/pyListSetElemAtIndex.js +331 -0
  59. package/lib/exercises/math/python/list/pyListSetElemAtIndexInstructionCompletion.d.ts +9 -0
  60. package/lib/exercises/math/python/list/pyListSetElemAtIndexInstructionCompletion.d.ts.map +1 -0
  61. package/lib/exercises/math/python/list/pyListSetElemAtIndexInstructionCompletion.js +346 -0
  62. package/lib/exercises/math/python/list/pyListSetElemAtIndexWaterfall.d.ts +29 -0
  63. package/lib/exercises/math/python/list/pyListSetElemAtIndexWaterfall.d.ts.map +1 -0
  64. package/lib/exercises/math/python/list/pyListSetElemAtIndexWaterfall.js +394 -0
  65. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRankFromSituation.d.ts.map +1 -1
  66. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindRankFromSituation.js +3 -3
  67. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindThresholdFromSituation.d.ts.map +1 -1
  68. package/lib/exercises/math/sequences/arithmetic/situations/arithmeticFindThresholdFromSituation.js +2 -2
  69. package/lib/exercises/math/sequences/arithmetic/situations/index.d.ts +2 -0
  70. package/lib/exercises/math/sequences/arithmetic/situations/index.d.ts.map +1 -1
  71. package/lib/exercises/math/sequences/arithmetic/situations/index.js +2 -2
  72. package/lib/geogebra/geogebraConstructor.d.ts +1 -0
  73. package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
  74. package/lib/geogebra/geogebraConstructor.js +3 -0
  75. package/lib/index.d.ts +293 -0
  76. package/lib/index.d.ts.map +1 -1
  77. package/lib/math/geometry/line.js +1 -1
  78. package/lib/math/utils/sequences/situations/seqArithmeticSituations.d.ts +2 -0
  79. package/lib/math/utils/sequences/situations/seqArithmeticSituations.d.ts.map +1 -1
  80. package/lib/math/utils/sequences/situations/seqArithmeticSituations.js +150 -128
  81. package/lib/math/utils/sequences/situations/seqArithmeticUtils.d.ts +1 -1
  82. package/lib/math/utils/sequences/situations/seqArithmeticUtils.d.ts.map +1 -1
  83. package/lib/math/utils/sequences/situations/seqArithmeticUtils.js +4 -1
  84. package/lib/tests/questionTest.d.ts.map +1 -1
  85. package/lib/tests/questionTest.js +1 -0
  86. package/lib/tree/nodes/functions/sqrtNode.d.ts +1 -1
  87. package/lib/tree/nodes/functions/sqrtNode.d.ts.map +1 -1
  88. package/lib/tree/nodes/functions/sqrtNode.js +5 -3
  89. package/package.json +1 -1
@@ -36,10 +36,10 @@ $$
36
36
  const str = `${strRaw}
37
37
 
38
38
  $$
39
- u_{${rank2.frPretty(2)}} = u_{${rank1.frPretty(2)}} + (${reason.frPretty(2)})
39
+ u_{${rank2.frPretty(0)}} = u_{${rank1.frPretty(0)}} + (${reason.frPretty(0)})
40
40
  $$
41
41
 
42
- La relation de récurrence est, pour $n \\geq ${firstRank.frPretty(2)}$ :
42
+ La relation de récurrence est, pour $n \\geq ${firstRank.frPretty(0)}$ :
43
43
 
44
44
  $$
45
45
  ${seqArithmeticUtils
@@ -79,23 +79,26 @@ ${alignTex([
79
79
  }),
80
80
  variationFindRank: Object.assign({}, variationFindRank, {
81
81
  getCorrectionStuff: (initial, reason, firstRank, ...otherArgs) => {
82
- const [valueAsked, _rankDecoder] = otherArgs;
82
+ const [valueAsked, _rankDecoder, digitsValue, digitsTarget] = otherArgs;
83
83
  const { str: strRaw } = variationFindRank.getCorrectionStuff(initial, reason, firstRank, ...otherArgs);
84
84
  const { answerNode, rankNode } = variationFindRank.getAnswerStuff(initial, reason, firstRank, ...otherArgs);
85
85
  const texRankSimplified = rankNode.evaluate().frPretty(0);
86
86
  const texAnswer = [
87
- ...new Set([answerNode.toTex(), answerNode.evaluate().frPretty(2)]),
87
+ ...new Set([
88
+ answerNode.toTex(),
89
+ answerNode.evaluate().frPretty(digitsTarget),
90
+ ]),
88
91
  ].join(" = ");
89
92
  const str = `${strRaw}
90
93
 
91
94
  On note $p$ le rang recherché. On a :
92
95
 
93
96
  ${alignTex([
94
- [`u_p`, "=", valueAsked.frPretty(2)],
97
+ [`u_p`, "=", valueAsked.frPretty(digitsValue)],
95
98
  [
96
99
  `${add(initial, multiply(reason, "p".toTree())).toTex()}`,
97
100
  "=",
98
- valueAsked.frPretty(2),
101
+ valueAsked.frPretty(digitsValue),
99
102
  ],
100
103
  ])}
101
104
 
@@ -114,23 +117,26 @@ Le nombre recherché est donc $${texAnswer}$.`;
114
117
  }),
115
118
  variationFindThreshold: Object.assign({}, variationFindThreshold, {
116
119
  getCorrectionStuff: (initial, reason, firstRank, ...otherArgs) => {
117
- const [valueThreshold, inequationSymbol] = otherArgs;
120
+ const [valueThreshold, inequationSymbol, digitsValue, digitsTarget] = otherArgs;
118
121
  const { str: strRaw } = variationFindThreshold.getCorrectionStuff(initial, reason, firstRank, ...otherArgs);
119
122
  const { answerNode, rankNode } = variationFindThreshold.getAnswerStuff(initial, reason, firstRank, ...otherArgs);
120
123
  const texRankSimplified = rankNode.evaluate().frPretty(0);
121
124
  const texAnswer = [
122
- ...new Set([answerNode.toTex(), answerNode.evaluate().frPretty(2)]),
125
+ ...new Set([
126
+ answerNode.toTex(),
127
+ answerNode.evaluate().frPretty(digitsTarget),
128
+ ]),
123
129
  ].join(" = ");
124
130
  const str = `${strRaw}
125
131
 
126
132
  On note $p$ le rang recherché. On a :
127
133
 
128
134
  ${alignTex([
129
- [`u_p`, inequationSymbol.symbol, valueThreshold.frPretty(2)],
135
+ [`u_p`, inequationSymbol.symbol, valueThreshold.frPretty(digitsValue)],
130
136
  [
131
137
  `${add(initial, multiply(reason, substract("p".toTree(), firstRank).simplify())).toTex()}`,
132
138
  inequationSymbol.symbol,
133
- valueThreshold.frPretty(2),
139
+ valueThreshold.frPretty(digitsValue),
134
140
  ],
135
141
  ])}
136
142
 
@@ -191,6 +197,8 @@ const templatesSituationsArithmetic = [
191
197
  targetFromRank: (rank, _firstRank) => rank.toTree(),
192
198
  rankFromTarget: (nodeTarget, _firstRank) => nodeTarget.evaluate(),
193
199
  },
200
+ digitsValue: 2,
201
+ digitsTarget: 0,
194
202
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
195
203
  if (superfluousData === undefined) {
196
204
  return `On suppose qu'une plante, d'une hauteur initiale (jour $${firstRank.frenchify()}$) de $${initial.frPretty(2)}\\ \\textrm{cm}$,
@@ -203,7 +211,7 @@ On note $u_n$ la hauteur de la plante relevée le jour $n$, en $\\textrm{cm}$.`;
203
211
  {
204
212
  const [wateringPeriodInDays] = superfluousData.values;
205
213
  return `On suppose qu'une plante, d'une hauteur initiale (jour $${firstRank.frenchify()}$) de $${initial.frPretty(2)}\\ \\textrm{cm}$ et
206
- arrosée en moyenne tous les $${wateringPeriodInDays.frPretty(2)}$ jours,
214
+ arrosée en moyenne tous les $${wateringPeriodInDays.frPretty(0)}$ jours,
207
215
  croît chaque jour de $${reason.frPretty(2)}\\ \\textrm{cm}$.
208
216
  On note $u_n$ la hauteur de la plante relevée le jour $n$, en $\\textrm{cm}$.`;
209
217
  }
@@ -245,7 +253,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
245
253
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
246
254
  return {
247
255
  str: `Chaque jour, la plante gagne $${reason.frPretty(2)}\\ \\textrm{cm}$.
248
- Par exemple, la hauteur de la plante le jour $${target2.frPretty(2)}$ est égale à celle du jour $${target1.frPretty(2)}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{cm}$.`,
256
+ Par exemple, la hauteur de la plante le jour $${target2.frPretty(0)}$ est égale à celle du jour $${target1.frPretty(0)}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{cm}$.`,
249
257
  rank1,
250
258
  rank2,
251
259
  };
@@ -261,7 +269,7 @@ Par exemple, la hauteur de la plante le jour $${target2.frPretty(2)}$ est égale
261
269
  const target = rankAsked - firstRank;
262
270
  return `Quelle est la nature de la suite $u_n$ ?
263
271
 
264
- Utilise le terme général de $u_n$ pour déterminer la hauteur de la plante au bout de $${target.frPretty(2)}$ jours.`;
272
+ Utilise le terme général de $u_n$ pour déterminer la hauteur de la plante au bout de $${target.frPretty(0)}$ jours.`;
265
273
  },
266
274
  getCorrectionStuff: (initial, reason, _firstRank) => {
267
275
  return {
@@ -369,6 +377,8 @@ La hauteur de la plante relevée chaque jour, en $\\textrm{cm}$, est donc une su
369
377
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
370
378
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
371
379
  },
380
+ digitsValue: 2,
381
+ digitsTarget: 0,
372
382
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
373
383
  if (superfluousData === undefined) {
374
384
  return `Une compagnie de taxis propose un tarif qui inclut un montant fixe de $${initial.frPretty(2)}\\ \\textrm{€}$
@@ -382,7 +392,7 @@ On note $u_n$ le prix payé (en $\\textrm{€}$) pour $${getStrFactor(firstRank)
382
392
  const [fuelConsumptionPer100Km] = superfluousData.values;
383
393
  return `Une compagnie de taxis propose un tarif qui inclut un montant fixe de $${initial.frPretty(2)}\\ \\textrm{€}$
384
394
  et un montant variable de $${reason.frPretty(2)}\\ \\textrm{€}$ par kilomètre parcouru.
385
- Le taxi consomme $${fuelConsumptionPer100Km.frPretty(2)} \\ \\textrm{L}$ d'essence tous les 100 kilomètres.
395
+ Le taxi consomme $${fuelConsumptionPer100Km.frPretty(0)} \\ \\textrm{L}$ d'essence tous les 100 kilomètres.
386
396
  On note $u_n$ le prix payé (en $\\textrm{€}$) pour $${getStrFactor(firstRank)} \\ \\textrm{km}$ parcourus.`;
387
397
  }
388
398
  break;
@@ -391,7 +401,7 @@ On note $u_n$ le prix payé (en $\\textrm{€}$) pour $${getStrFactor(firstRank)
391
401
  const [distanceToNextCityInKm] = superfluousData.values;
392
402
  return `Une compagnie de taxis propose un tarif qui inclut un montant fixe de $${initial.frPretty(2)}\\ \\textrm{€}$
393
403
  et un montant variable de $${reason.frPretty(2)}\\ \\textrm{€}$ par kilomètre parcouru.
394
- La distance à la ville la plus proche est de $${distanceToNextCityInKm.frPretty(2)} \\ \\textrm{km}$.
404
+ La distance à la ville la plus proche est de $${distanceToNextCityInKm.frPretty(0)} \\ \\textrm{km}$.
395
405
  On note $u_n$ le prix payé (en $\\textrm{€}$) pour $${getStrFactor(firstRank)} \\ \\textrm{km}$ parcourus.`;
396
406
  }
397
407
  break;
@@ -402,9 +412,9 @@ On note $u_n$ le prix payé (en $\\textrm{€}$) pour $${getStrFactor(firstRank)
402
412
  },
403
413
  variationFindExplicitFormula: {
404
414
  getAnswerNode: seqArithmeticUtils.getAnswerNodeExplicitFormula,
405
- getHint: (firstRank) => `Quel calcul permet de trouver le prix payé pour $10 \\ \\textrm{km}$ ?
415
+ getHint: (firstRank) => `Quel calcul permet de trouver le prix à payer pour $10 \\ \\textrm{km}$ ?
406
416
 
407
- Inspire toi de ce calcul pour déterminer la hauteur de la plante au bout de $${getStrFactor(firstRank)} \\ \\textrm{km}$.`,
417
+ Inspire toi de ce calcul pour déterminer le prix à payer pour $${getStrFactor(firstRank)} \\ \\textrm{km}$.`,
408
418
  getCorrectionStuff: (initial, reason, _firstRank) => {
409
419
  return {
410
420
  str: `Pour chaque kilomètre supplémentaire, la facture augmente de $${reason.frPretty(2)}\\ \\textrm{€}$.
@@ -423,7 +433,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
423
433
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
424
434
  return {
425
435
  str: `Pour chaque kilomètre supplémentaire, la facture augmente de $${reason.frPretty(2)}\\ \\textrm{€}$.
426
- Par exemple, la facture pour $${target2.frPretty(2)} \\ \\textrm{km}$ est égale à celle de $${target1.frPretty(2)} \\ \\textrm{km}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
436
+ Par exemple, la facture pour $${target2.frPretty(0)} \\ \\textrm{km}$ est égale à celle de $${target1.frPretty(0)} \\ \\textrm{km}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
427
437
  rank1,
428
438
  rank2,
429
439
  };
@@ -439,7 +449,7 @@ Par exemple, la facture pour $${target2.frPretty(2)} \\ \\textrm{km}$ est égale
439
449
  const target = rankAsked - firstRank;
440
450
  return `Quelle est la nature de la suite $u_n$ ?
441
451
 
442
- Utilise le terme général de $u_n$ pour déterminer la facture pour $${target.frPretty(2)} \\ \\textrm{km}$.`;
452
+ Utilise le terme général de $u_n$ pour déterminer la facture pour $${target.frPretty(0)} \\ \\textrm{km}$.`;
443
453
  },
444
454
  getCorrectionStuff: (initial, reason, _firstRank) => {
445
455
  return {
@@ -451,15 +461,11 @@ La facture est donc une suite arithmétique de premier terme $${initial.frPretty
451
461
  variationFindRank: {
452
462
  getStrQuestion: (_initial, _reason, _firstRank, ...otherArgs) => {
453
463
  const [valueAsked] = otherArgs;
454
- // return `Quel est le rang $p$ pour lequel $u_{p} = ${round(
455
- // valueAsked,
456
- // 2,
457
- // ).frPretty(2)} \\ \\textrm{€}$ ?`;
458
- return `Pour combien de kilomètres la facture sera-t-elle de $${round(valueAsked, 2).frPretty(2)} ?`;
464
+ return `Pour combien de kilomètres la facture sera-t-elle de $${round(valueAsked, 2).frPretty(2)}$ ?`;
459
465
  },
460
466
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
461
- const [valueThreshold, inequationSymbol, rankDecoder] = otherArgs;
462
- const rankNode = seqArithmeticUtils.getAnswerNodeThresholdRank(initial, reason, firstRank, valueThreshold, inequationSymbol);
467
+ const [valueAsked, rankDecoder] = otherArgs;
468
+ const rankNode = seqArithmeticUtils.getAnswerNodeRandomRank(initial, reason, firstRank, valueAsked);
463
469
  const answerNode = rankDecoder.targetFromRank(rankNode.evaluate(), firstRank);
464
470
  return { answerNode, rankNode };
465
471
  },
@@ -531,7 +537,7 @@ La facture est donc une suite arithmétique de premier terme $${initial.frPretty
531
537
  switch (rand) {
532
538
  case 0:
533
539
  {
534
- const fridgeConsumptionPerMonth = randfloat(0.85, 0.95) * 30;
540
+ const fridgeConsumptionPerMonth = Math.floor(randfloat(0.85, 0.95) * 30);
535
541
  values.push(fridgeConsumptionPerMonth);
536
542
  }
537
543
  break;
@@ -562,7 +568,7 @@ On note $u_n$ la facture (en $\\textrm{€}$) pour $${getStrFactor(firstRank)} \
562
568
  return `Pour l’électricité de sa maison, Jimmy paye
563
569
  un abonnement fixe de $${initial.frPretty(2)}\\ \\textrm{€}$
564
570
  puis il paye $${reason.frPretty(2)}\\ \\textrm{€}$ par kWh consommé.
565
- Son refrigétateur consomme $${fridgeConsumptionPerMonth.frPretty(2)} \\ \\textrm{kWh}$ tous les mois.
571
+ Son refrigétateur consomme $${fridgeConsumptionPerMonth.frPretty(0)} \\ \\textrm{kWh}$ tous les mois.
566
572
  On note $u_n$ la facture (en $\\textrm{€}$) pour $${getStrFactor(firstRank)} \\ \\textrm{kWh}$ consommés.`;
567
573
  }
568
574
  break;
@@ -585,6 +591,8 @@ On note $u_n$ la facture (en $\\textrm{€}$) pour $${getStrFactor(firstRank)} \
585
591
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
586
592
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
587
593
  },
594
+ digitsValue: 2,
595
+ digitsTarget: 0,
588
596
  variationFindExplicitFormula: {
589
597
  getAnswerNode: seqArithmeticUtils.getAnswerNodeExplicitFormula,
590
598
  getHint: (firstRank) => `Quel calcul permet de trouver le prix payé pour $10 \\ \\textrm{kWh}$ ?
@@ -608,7 +616,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
608
616
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
609
617
  return {
610
618
  str: `Pour chaque $\\textrm{kWh}$ supplémentaire, la facture augmente de $${reason.frPretty(2)}\\ \\textrm{€}$.
611
- Par exemple, la facture pour $${target2.frPretty(2)} \\ \\textrm{kWh}$ est égale à celle de $${target1.frPretty(2)} \\ \\textrm{kWh}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
619
+ Par exemple, la facture pour $${target2.frPretty(0)} \\ \\textrm{kWh}$ est égale à celle de $${target1.frPretty(0)} \\ \\textrm{kWh}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
612
620
  rank1,
613
621
  rank2,
614
622
  };
@@ -736,6 +744,8 @@ La facture est donc une suite arithmétique de premier terme $${initial.frPretty
736
744
  targetFromRank: (rank, firstRank) => (100 * (rank - firstRank)).toTree(),
737
745
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() / 100 + firstRank,
738
746
  },
747
+ digitsValue: 2,
748
+ digitsTarget: 0,
739
749
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
740
750
  if (superfluousData === undefined) {
741
751
  return `Dany décide de partir au Sud de la France.
@@ -750,7 +760,7 @@ On note $u_n$ la température ambiante (en $\\textrm{°C}$) pour $${getStrFactor
750
760
  const [fuelConsumptionPer100Km] = superfluousData.values;
751
761
  return `Dany décide de partir au Sud de la France. Il part de Valenciennes où il fait $${initial.frPretty(2)} \\ \\textrm{°C}$.
752
762
  La température ambiante augmente de $${reason.frPretty(2)}\\ \\textrm{°C}$ à chaque centaine de $\\textrm{km}$ vers le Sud.
753
- Sa voiture consomme $${fuelConsumptionPer100Km.frPretty(2)} \\ \\textrm{L}$ d'essence tous les $100$ kilomètres.
763
+ Sa voiture consomme $${fuelConsumptionPer100Km.frPretty(0)} \\ \\textrm{L}$ d'essence tous les $100$ kilomètres.
754
764
  On note $u_n$ la température ambiante (en $\\textrm{°C}$) pour $${getStrFactor(firstRank)}$ centaines de $\\textrm{km}$ parcourus vers le Sud.`;
755
765
  }
756
766
  break;
@@ -759,7 +769,7 @@ On note $u_n$ la température ambiante (en $\\textrm{°C}$) pour $${getStrFactor
759
769
  const [distanceToNextBreakInKm] = superfluousData.values;
760
770
  return `Dany décide de partir au Sud de la France. Il part de Valenciennes où il fait $${initial.frPretty(2)} \\ \\textrm{°C}$.
761
771
  La température ambiante augmente de $${reason.frPretty(2)}\\ \\textrm{°C}$ à chaque centaine de $\\textrm{km}$ vers le Sud.
762
- Il fait une pause en moyenne tous les $${distanceToNextBreakInKm.frPretty(2)}$ kilomètres.
772
+ Il fait une pause en moyenne tous les $${distanceToNextBreakInKm.frPretty(0)}$ kilomètres.
763
773
  On note $u_n$ la température ambiante (en $\\textrm{°C}$) pour $${getStrFactor(firstRank)}$ centaines de $\\textrm{km}$ parcourus vers le Sud.`;
764
774
  }
765
775
  break;
@@ -786,7 +796,7 @@ La température, en $\\textrm{°C}$, est donc une suite arithmétique de premier
786
796
  },
787
797
  variationFindRecurrenceFormula: {
788
798
  getAnswerNode: seqArithmeticUtils.getAnswerNodeRecurrenceFormula,
789
- getHint: (_firstRank) => `Si tu connais la température ambiante pour $300 \\ \\textrm{km}$ parcourus, comment fais-tu pour calculer la température ambiante pour $400 \\ \\textrm{km}$ parcourus ?
799
+ getHint: (_firstRank) => `Si tu connais la température ambiante pour $300 \\ \\textrm{km}$ (autrement dit $3$ centaines de $\\textrm{km}$) parcourus , comment fais-tu pour calculer la température ambiante pour $400 \\ \\textrm{km}$ parcourus ?
790
800
 
791
801
  Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
792
802
  getCorrectionStuff: (_initial, reason, firstRank) => {
@@ -795,7 +805,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
795
805
  const [rank1, rank2] = [target1, target2].map((target) => target / 100 + firstRank);
796
806
  return {
797
807
  str: `Pour chaque centaine de $\\textrm{km}$ supplémentaire, la température augmente de $${reason.frPretty(2)}\\ \\textrm{°C}$.
798
- Par exemple, la température après $${target2.frPretty(2)} \\ \\textrm{km}$ parcourus est égale à celle après $${target1.frPretty(2)} \\ \\textrm{km}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{°C}$.`,
808
+ Par exemple, la température après $${target2.frPretty(0)} \\ \\textrm{km}$ parcourus est égale à celle après $${target1.frPretty(0)} \\ \\textrm{km}$ augmentée de $${reason.frPretty(2)}\\ \\textrm{°C}$.`,
799
809
  rank1,
800
810
  rank2,
801
811
  };
@@ -811,7 +821,7 @@ Par exemple, la température après $${target2.frPretty(2)} \\ \\textrm{km}$ par
811
821
  const target = (rankAsked - firstRank) * 100;
812
822
  return `Quelle est la nature de la suite $u_n$ ?
813
823
 
814
- Utilise le terme général de $u_n$ pour déterminer la température pour $${target.frPretty(2)} \\ \\textrm{km}$ parcourus.`;
824
+ Utilise le terme général de $u_n$ pour déterminer la température pour $${target.frPretty(0)} \\ \\textrm{km}$ parcourus.`;
815
825
  },
816
826
  getCorrectionStuff: (initial, reason, _firstRank) => {
817
827
  return {
@@ -823,7 +833,7 @@ La température ambiante est donc une suite arithmétique de premier terme $${in
823
833
  variationFindRank: {
824
834
  getStrQuestion: (_initial, _reason, _firstRank, ...otherArgs) => {
825
835
  const [valueAsked] = otherArgs;
826
- return `Pour combien kilomètres parcourus $p$ la température sera-t-elle de $${round(valueAsked, 2).frPretty(2)} \\ \\textrm{°C}$ ?`;
836
+ return `Pour combien de kilomètres parcourus $p$ la température sera-t-elle de $${round(valueAsked, 2).frPretty(2)} \\ \\textrm{°C}$ ?`;
827
837
  },
828
838
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
829
839
  const [valueAsked, rankDecoder] = otherArgs;
@@ -919,6 +929,8 @@ La température ambiante est donc une suite arithmétique de premier terme $${in
919
929
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
920
930
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
921
931
  },
932
+ digitsValue: 2,
933
+ digitsTarget: 0,
922
934
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
923
935
  if (superfluousData === undefined) {
924
936
  return `Emma est salariée. Son salaire net était
@@ -933,7 +945,7 @@ On note $u_n$ son salaire net (en $\\textrm{€}$) quand elle aura $${getStrFact
933
945
  const [ageWhenHired] = superfluousData.values;
934
946
  return `Emma est salariée.
935
947
  Son salaire net était de $${initial.frPretty(2)}\\ \\textrm{€}$ à son entrée dans l'entreprise.
936
- Elle avait alors $${ageWhenHired.frPretty(2)}$ ans.
948
+ Elle avait alors $${ageWhenHired.frPretty(0)}$ ans.
937
949
  Son salaire augmente de $${reason.frPretty(2)}\\ \\textrm{€}$ tous les ans.
938
950
 
939
951
  On note $u_n$ son salaire net (en $\\textrm{€}$) quand elle aura $${getStrFactor(firstRank)}$ années d'ancienneté.`;
@@ -983,7 +995,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
983
995
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
984
996
  return {
985
997
  str: `Pour chaque année supplémentaire, le salaire d'Emma augmente de $${reason.frPretty(2)}\\ \\textrm{€}$.
986
- Par exemple, son salaire pour $${target2.frPretty(2)}$ ans d'ancienneté est égal à celui pour $${target1.frPretty(2)}$ ans augmenté de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
998
+ Par exemple, son salaire pour $${target2.frPretty(0)}$ ans d'ancienneté est égal à celui pour $${target1.frPretty(0)}$ ans augmenté de $${reason.frPretty(2)}\\ \\textrm{€}$.`,
987
999
  rank1,
988
1000
  rank2,
989
1001
  };
@@ -999,7 +1011,7 @@ Par exemple, son salaire pour $${target2.frPretty(2)}$ ans d'ancienneté est ég
999
1011
  const target = (rankAsked - firstRank) * 100;
1000
1012
  return `Quelle est la nature de la suite $u_n$ ?
1001
1013
 
1002
- Utilise le terme général de $u_n$ pour déterminer le salaire d'Emma pour $${target.frPretty(2)}$ ans d'ancienneté.`;
1014
+ Utilise le terme général de $u_n$ pour déterminer le salaire d'Emma pour $${target.frPretty(0)}$ ans d'ancienneté.`;
1003
1015
  },
1004
1016
  getCorrectionStuff: (initial, reason, _firstRank) => {
1005
1017
  return {
@@ -1114,6 +1126,8 @@ Le salaire d'Emma, en $\\textrm{€}$, est donc une suite arithmétique de premi
1114
1126
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
1115
1127
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
1116
1128
  },
1129
+ digitsValue: 0,
1130
+ digitsTarget: 0,
1117
1131
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
1118
1132
  if (superfluousData === undefined) {
1119
1133
  return `Manon a gagné un peu d'argent cet été. Début septembre, elle a $${initial.frPretty(2)}\\ \\textrm{€}$ d'économies.
@@ -1173,7 +1187,7 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
1173
1187
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
1174
1188
  return {
1175
1189
  str: `Après chaque semaine de dépenses supplémentaire, les économies de Manon diminuent de $${(-reason).frPretty(2)}\\ \\textrm{€}$.
1176
- Par exemple, le montant de ses économies après $${target2.frPretty(2)}$ semaines est égal à celui pour $${target1.frPretty(2)}$ semaines diminué de $${(-reason).frPretty(2)}\\ \\textrm{€}$.`,
1190
+ Par exemple, le montant de ses économies après $${target2.frPretty(0)}$ semaines est égal à celui pour $${target1.frPretty(0)}$ semaines diminué de $${(-reason).frPretty(2)}\\ \\textrm{€}$.`,
1177
1191
  rank1,
1178
1192
  rank2,
1179
1193
  };
@@ -1196,7 +1210,7 @@ Utilise le terme général de $u_n$ pour déterminer le montant des économies d
1196
1210
  const target2 = 11;
1197
1211
  return {
1198
1212
  str: `Après chaque semaine de dépenses supplémentaire, les économies de Manon diminuent de $${(-reason).frPretty(2)}\\ \\textrm{€}$.
1199
- Par exemple, le montant de ses économies après $${target2.frPretty(2)}$ semaines est égal à celui pour $${target1.frPretty(2)}$ semaines diminué de $${(-reason).frPretty(2)}\\ \\textrm{€}$.
1213
+ Par exemple, le montant de ses économies après $${target2.frPretty(0)}$ semaines est égal à celui pour $${target1.frPretty(0)}$ semaines diminué de $${(-reason).frPretty(2)}\\ \\textrm{€}$.
1200
1214
 
1201
1215
  Le montant des économies de Manon, en $\\textrm{€}$, est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1202
1216
  };
@@ -1301,10 +1315,12 @@ Le montant des économies de Manon, en $\\textrm{€}$, est donc une suite arith
1301
1315
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
1302
1316
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
1303
1317
  },
1318
+ digitsValue: 0,
1319
+ digitsTarget: 0,
1304
1320
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
1305
1321
  if (superfluousData === undefined) {
1306
- return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(2)}$ points.
1307
- Puis il décroît de $${(-reason).frPretty(2)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1322
+ return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(0)}$ points.
1323
+ Puis il décroît de $${(-reason).frPretty(0)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1308
1324
  On note $u_n$ le score si l'on répond correctement $${getStrFactor(firstRank)}$ secondes après le début de la question.`;
1309
1325
  }
1310
1326
  else {
@@ -1312,8 +1328,8 @@ On note $u_n$ le score si l'on répond correctement $${getStrFactor(firstRank)}$
1312
1328
  case 0:
1313
1329
  {
1314
1330
  const [roundedMeanDuration] = superfluousData.values;
1315
- return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(2)}$ points.
1316
- Puis il décroît de $${(-reason).frPretty(2)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1331
+ return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(0)}$ points.
1332
+ Puis il décroît de $${(-reason).frPretty(0)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1317
1333
  Pablo met, la plupart du temps, $${roundedMeanDuration} \\ \\textrm{s}$ pour répondre.
1318
1334
  On note $u_n$ le score si l'on répond correctement $${getStrFactor(firstRank)}$ secondes après le début de la question.`;
1319
1335
  }
@@ -1321,8 +1337,8 @@ On note $u_n$ le score si l'on répond correctement $${getStrFactor(firstRank)}$
1321
1337
  case 1:
1322
1338
  {
1323
1339
  const [indexOfQuestion] = superfluousData.values;
1324
- return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(2)}$ points.
1325
- Puis il décroît de $${(-reason).frPretty(2)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1340
+ return `Pablo joue à un jeu de quiz. Pour chaque question, le score commence à $${initial.frPretty(0)}$ points.
1341
+ Puis il décroît de $${(-reason).frPretty(0)}$ points pour chaque seconde qui s'écoule avant que le joueur réponde correctement.
1326
1342
  Pablo est actuellement à la question numéro $${indexOfQuestion}$.
1327
1343
  On note $u_n$ le score si l'on répond correctement $${getStrFactor(firstRank)}$ secondes après le début de la question.`;
1328
1344
  }
@@ -1340,12 +1356,12 @@ Inspire toi de ce calcul pour déterminer le score pour une durée de réponse d
1340
1356
  `,
1341
1357
  getCorrectionStuff: (initial, reason, firstRank) => {
1342
1358
  return {
1343
- str: `Chaque seconde, le score diminue de $${-reason.frPretty(2)}$ points.
1344
- Au bout de $${getStrFactor(firstRank)}$ secondes, le score aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$ points.
1359
+ str: `Chaque seconde, le score diminue de $${(-reason).frPretty(0)}$ points.
1360
+ Au bout de $${getStrFactor(firstRank)}$ secondes, le score aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$ points.
1345
1361
 
1346
- Au départ, le score est de $${initial.frPretty(2)}$ points.
1362
+ Au départ, le score est de $${initial.frPretty(0)}$ points.
1347
1363
 
1348
- Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1364
+ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1349
1365
  };
1350
1366
  },
1351
1367
  },
@@ -1359,8 +1375,8 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
1359
1375
  const target2 = 11;
1360
1376
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
1361
1377
  return {
1362
- str: `Chaque seconde, le score diminue de $${-reason.frPretty(2)}$ points.
1363
- Par exemple, le score après $${target2.frPretty(2)} \\ \\textrm{s}$ est égal à celui après $${target1.frPretty(2)} \\ \\textrm{s}$ diminué de $${(-reason).frPretty(2)}$ points.`,
1378
+ str: `Chaque seconde, le score diminue de $${(-reason).frPretty(0)}$ points.
1379
+ Par exemple, le score après $${target2.frPretty(0)} \\ \\textrm{s}$ est égal à celui après $${target1.frPretty(0)} \\ \\textrm{s}$ diminué de $${(-reason).frPretty(0)}$ points.`,
1364
1380
  rank1,
1365
1381
  rank2,
1366
1382
  };
@@ -1376,23 +1392,23 @@ Par exemple, le score après $${target2.frPretty(2)} \\ \\textrm{s}$ est égal
1376
1392
  const target = rankAsked - firstRank;
1377
1393
  return `Quelle est la nature de la suite $u_n$ ?
1378
1394
 
1379
- Utilise le terme général de $u_n$ pour déterminer le score $${target.frPretty(2)}$ secondes après le début de la question.`;
1395
+ Utilise le terme général de $u_n$ pour déterminer le score $${target.frPretty(0)}$ secondes après le début de la question.`;
1380
1396
  },
1381
1397
  getCorrectionStuff: (initial, reason, firstRank, ..._otherArgs) => {
1382
1398
  return {
1383
- str: `Chaque seconde, le score diminue de $${-reason.frPretty(2)}$ points.
1384
- Au bout de $${getStrFactor(firstRank)}$ secondes, le score aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$ points.
1399
+ str: `Chaque seconde, le score diminue de $${(-reason).frPretty(0)}$ points.
1400
+ Au bout de $${getStrFactor(firstRank)}$ secondes, le score aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$ points.
1385
1401
 
1386
- Au départ, le score est de $${initial.frPretty(2)}$ points.
1402
+ Au départ, le score est de $${initial.frPretty(0)}$ points.
1387
1403
 
1388
- Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1404
+ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1389
1405
  };
1390
1406
  },
1391
1407
  },
1392
1408
  variationFindRank: {
1393
1409
  getStrQuestion: (_initial, _reason, _firstRank, ...otherArgs) => {
1394
1410
  const [valueAsked] = otherArgs;
1395
- return `Après combien de secondes le score sera-t-il de $${round(valueAsked, 2).frPretty(2)}$ points ?`;
1411
+ return `Après combien de secondes le score sera-t-il de $${round(valueAsked, 0).frPretty(0)}$ points ?`;
1396
1412
  },
1397
1413
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
1398
1414
  const [valueAsked, rankDecoder] = otherArgs;
@@ -1404,12 +1420,12 @@ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2
1404
1420
  const [valueAsked] = otherArgs;
1405
1421
  return `Quelle est la nature de la suite $(u_n)$ ?
1406
1422
 
1407
- Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(2)}$.`;
1423
+ Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(0)}$.`;
1408
1424
  },
1409
1425
  getCorrectionStuff: (initial, reason, _firstRank) => {
1410
1426
  return {
1411
- str: `Chaque seconde, le score diminue de $${-reason.frPretty(2)}$ points.
1412
- Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1427
+ str: `Chaque seconde, le score diminue de $${(-reason).frPretty(0)}$ points.
1428
+ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1413
1429
  };
1414
1430
  },
1415
1431
  },
@@ -1420,10 +1436,10 @@ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2
1420
1436
  switch (inequationSymbol.symbol) {
1421
1437
  case "<":
1422
1438
  case "\\le":
1423
- return `Pour quelle durée de réponse maximum le score sera t-il ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(2)}$ points ?`;
1439
+ return `Pour quelle durée de réponse maximum le score sera t-il ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(0)}$ points ?`;
1424
1440
  case ">":
1425
1441
  case "\\ge":
1426
- return `Quelle est la durée de réponse pour laquelle le score ${isStrict ? "sera en dessous de" : "égalera ou sera en dessous de"} $${valueThreshold.frPretty(2)}$ points ?`;
1442
+ return `Quelle est la durée de réponse pour laquelle le score ${isStrict ? "sera en dessous de" : "égalera ou sera en dessous de"} $${valueThreshold.frPretty(0)}$ points ?`;
1427
1443
  }
1428
1444
  },
1429
1445
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
@@ -1447,12 +1463,12 @@ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2
1447
1463
  })();
1448
1464
  return `Quelle est la nature de la suite $u_n$ ?
1449
1465
 
1450
- Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(2)}$.`;
1466
+ Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(0)}$.`;
1451
1467
  },
1452
1468
  getCorrectionStuff: (initial, reason, _firstRank) => {
1453
1469
  return {
1454
- str: `Chaque seconde, le score diminue de $${-reason.frPretty(2)}$ points.
1455
- Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1470
+ str: `Chaque seconde, le score diminue de $${(-reason).frPretty(0)}$ points.
1471
+ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1456
1472
  };
1457
1473
  },
1458
1474
  },
@@ -1488,6 +1504,8 @@ Le score est donc une suite arithmétique de premier terme $${initial.frPretty(2
1488
1504
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
1489
1505
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
1490
1506
  },
1507
+ digitsValue: 2,
1508
+ digitsTarget: 0,
1491
1509
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
1492
1510
  if (superfluousData === undefined) {
1493
1511
  return `Daryl utilise un phare à batterie sur son chantier, qu'il laisse allumé.
@@ -1530,8 +1548,8 @@ Inspire toi de ce calcul pour déterminer le niveau de charge pour une durée d'
1530
1548
  `,
1531
1549
  getCorrectionStuff: (initial, reason, firstRank) => {
1532
1550
  return {
1533
- str: `Chaque heure, le niveau de charge diminue de $${-reason.frPretty(2)} \\%$.
1534
- Au bout de $${getStrFactor(firstRank)} \\ \\textrm{h}$, le niveau aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)} \\%$.
1551
+ str: `Chaque heure, le niveau de charge diminue de $${(-reason).frPretty(2)} \\%$.
1552
+ Au bout de $${getStrFactor(firstRank)} \\ \\textrm{h}$, le niveau aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(2)} \\%$.
1535
1553
 
1536
1554
  Au départ, le niveau est de $${initial.frPretty(2)} \\%$.
1537
1555
 
@@ -1549,8 +1567,8 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
1549
1567
  const target2 = 5;
1550
1568
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
1551
1569
  return {
1552
- str: `Chaque heure, le niveau de charge diminue de $${-reason.frPretty(2)} \\%$.
1553
- Par exemple, le niveau après $${target2.frPretty(2)} \\ \\textrm{h}$ d'utilisation est égal à celui après $${target1.frPretty(2)} \\ \\textrm{h}$ d'utilisation diminué de $${(-reason).frPretty(2)} \\%$.`,
1570
+ str: `Chaque heure, le niveau de charge diminue de $${(-reason).frPretty(2)} \\%$.
1571
+ Par exemple, le niveau après $${target2.frPretty(0)} \\ \\textrm{h}$ d'utilisation est égal à celui après $${target1.frPretty(0)} \\ \\textrm{h}$ d'utilisation diminué de $${(-reason).frPretty(2)} \\%$.`,
1554
1572
  rank1,
1555
1573
  rank2,
1556
1574
  };
@@ -1566,12 +1584,12 @@ Par exemple, le niveau après $${target2.frPretty(2)} \\ \\textrm{h}$ d'utilisat
1566
1584
  const target = rankAsked - firstRank;
1567
1585
  return `Quelle est la nature de la suite $u_n$ ?
1568
1586
 
1569
- Utilise le terme général de $u_n$ pour déterminer le niveau de charge après $${target.frPretty(2)} \\ \\textrm{h}$ d'utilisation.`;
1587
+ Utilise le terme général de $u_n$ pour déterminer le niveau de charge après $${target.frPretty(0)} \\ \\textrm{h}$ d'utilisation.`;
1570
1588
  },
1571
1589
  getCorrectionStuff: (initial, reason, firstRank, ..._otherArgs) => {
1572
1590
  return {
1573
- str: `Chaque heure, le niveau de charge diminue de $${-reason.frPretty(2)} \\%$.
1574
- Au bout de $${getStrFactor(firstRank)} \\ \\textrm{h}$, le niveau aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)} \\%$.
1591
+ str: `Chaque heure, le niveau de charge diminue de $${(-reason).frPretty(2)} \\%$.
1592
+ Au bout de $${getStrFactor(firstRank)} \\ \\textrm{h}$, le niveau aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(2)} \\%$.
1575
1593
 
1576
1594
  Au départ, le niveau est de $${initial.frPretty(2)} \\%$.
1577
1595
 
@@ -1598,7 +1616,7 @@ Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked
1598
1616
  },
1599
1617
  getCorrectionStuff: (initial, reason, _firstRank) => {
1600
1618
  return {
1601
- str: `Chaque heure, le niveau de charge diminue de $${-reason.frPretty(2)} \\%$.
1619
+ str: `Chaque heure, le niveau de charge diminue de $${(-reason).frPretty(2)} \\%$.
1602
1620
  Le niveau de charge est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1603
1621
  };
1604
1622
  },
@@ -1641,7 +1659,7 @@ Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p
1641
1659
  },
1642
1660
  getCorrectionStuff: (initial, reason, _firstRank) => {
1643
1661
  return {
1644
- str: `Chaque heure, le niveau de charge diminue de $${-reason.frPretty(2)} \\%$.
1662
+ str: `Chaque heure, le niveau de charge diminue de $${(-reason).frPretty(2)} \\%$.
1645
1663
  Le niveau de charge est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1646
1664
  };
1647
1665
  },
@@ -1678,6 +1696,8 @@ Le niveau de charge est donc une suite arithmétique de premier terme $${initial
1678
1696
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
1679
1697
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
1680
1698
  },
1699
+ digitsValue: 0,
1700
+ digitsTarget: 0,
1681
1701
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
1682
1702
  if (superfluousData === undefined) {
1683
1703
  return `Un gigantesque buffet est organisé. Au départ, sur les tables de service, il y a $${initial.frenchify()}$ amuse-bouches.
@@ -1690,17 +1710,17 @@ On note $u_n$ le nombre d'amuse-bouches restant après $${getStrFactor(firstRank
1690
1710
  {
1691
1711
  const [numberOfPeople] = superfluousData.values;
1692
1712
  return `Un gigantesque buffet est organisé. Au départ, sur les tables de service, il y a $${initial.frPretty(2)}$ amuse-bouches.
1693
- $${(-reason).frPretty(2)}$ amuse-bouches sont mangés toutes les minutes.
1694
- Il y a en tout $${numberOfPeople.frPretty(2)}$ convives.
1713
+ $${(-reason).frPretty(0)}$ amuse-bouches sont mangés toutes les minutes.
1714
+ Il y a en tout $${numberOfPeople.frPretty(0)}$ convives.
1695
1715
  On note $u_n$ le nombre d'amuse-bouches restant après $${getStrFactor(firstRank)} \\ \\textrm{min}$.`;
1696
1716
  }
1697
1717
  break;
1698
1718
  case 1:
1699
1719
  {
1700
1720
  const [nbOfGlassesPerMinute] = superfluousData.values;
1701
- return `Un gigantesque buffet est organisé. Au départ, sur les tables de service, il y a $${initial.frPretty(2)}$ amuse-bouches.
1702
- $${nbOfGlassesPerMinute.frPretty(2)}$ verres sont servis toutes les minutes.
1703
- $${(-reason).frPretty(2)}$ amuse-bouches sont mangés toutes les minutes.
1721
+ return `Un gigantesque buffet est organisé. Au départ, sur les tables de service, il y a $${initial.frPretty(0)}$ amuse-bouches.
1722
+ $${nbOfGlassesPerMinute.frPretty(0)}$ verres sont servis toutes les minutes.
1723
+ $${(-reason).frPretty(0)}$ amuse-bouches sont mangés toutes les minutes.
1704
1724
  On note $u_n$ le nombre d'amuse-bouches restant après $${getStrFactor(firstRank)} \\ \\textrm{min}$.`;
1705
1725
  }
1706
1726
  break;
@@ -1717,12 +1737,12 @@ Inspire toi de ce calcul pour déterminer le nombre d'amuse-bouches restant apr
1717
1737
  `,
1718
1738
  getCorrectionStuff: (initial, reason, firstRank) => {
1719
1739
  return {
1720
- str: `Chaque minute, le nombre d'amuse-bouches diminue de $${-reason.frPretty(2)}$.
1721
- Au bout de $${getStrFactor(firstRank)} \\ \\textrm{min}$, le nombre d'amuse-bouches aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$.
1740
+ str: `Chaque minute, le nombre d'amuse-bouches diminue de $${(-reason).frPretty(0)}$.
1741
+ Au bout de $${getStrFactor(firstRank)} \\ \\textrm{min}$, le nombre d'amuse-bouches aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$.
1722
1742
 
1723
- Au départ, il y en a $${initial.frPretty(2)}$.
1743
+ Au départ, il y en a $${initial.frPretty(0)}$.
1724
1744
 
1725
- Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1745
+ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1726
1746
  };
1727
1747
  },
1728
1748
  },
@@ -1736,8 +1756,8 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
1736
1756
  const target2 = 5;
1737
1757
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
1738
1758
  return {
1739
- str: `Chaque minute, le nombre d'amuse-bouches diminue de $${-reason.frPretty(2)}$.
1740
- Par exemple, le nombre d'amuse-bouches restant après $${target2.frPretty(2)} \\ \\textrm{min}$ est égal à celui après $${target1.frPretty(2)} \\ \\textrm{min}$ d'utilisation diminué de $${(-reason).frPretty(2)}$.`,
1759
+ str: `Chaque minute, le nombre d'amuse-bouches diminue de $${(-reason).frPretty(0)}$.
1760
+ Par exemple, le nombre d'amuse-bouches restant après $${target2.frPretty(0)} \\ \\textrm{min}$ est égal à celui après $${target1.frPretty(0)} \\ \\textrm{min}$ d'utilisation diminué de $${(-reason).frPretty(0)}$.`,
1741
1761
  rank1,
1742
1762
  rank2,
1743
1763
  };
@@ -1753,23 +1773,23 @@ Par exemple, le nombre d'amuse-bouches restant après $${target2.frPretty(2)} \\
1753
1773
  const target = rankAsked - firstRank;
1754
1774
  return `Quelle est la nature de la suite $u_n$ ?
1755
1775
 
1756
- Utilise le terme général de $u_n$ pour déterminer le nombre d'amuse-bouches restant après $${target.frPretty(2)} \\ \\textrm{min}$ de buffet.`;
1776
+ Utilise le terme général de $u_n$ pour déterminer le nombre d'amuse-bouches restant après $${target.frPretty(0)} \\ \\textrm{min}$ de buffet.`;
1757
1777
  },
1758
1778
  getCorrectionStuff: (initial, reason, firstRank, ..._otherArgs) => {
1759
1779
  return {
1760
- str: `Chaque minute, le nombre d'amuse-bouches diminue de $${-reason.frPretty(2)}$.
1761
- Au bout de $${getStrFactor(firstRank)} \\ \\textrm{min}$, le nombre d'amuse-bouches aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$.
1780
+ str: `Chaque minute, le nombre d'amuse-bouches diminue de $${(-reason).frPretty(0)}$.
1781
+ Au bout de $${getStrFactor(firstRank)} \\ \\textrm{min}$, le nombre d'amuse-bouches aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$.
1762
1782
 
1763
- Au départ, il y en a $${initial.frPretty(2)}$.
1783
+ Au départ, il y en a $${initial.frPretty(0)}$.
1764
1784
 
1765
- Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1785
+ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1766
1786
  };
1767
1787
  },
1768
1788
  },
1769
1789
  variationFindRank: {
1770
1790
  getStrQuestion: (_initial, _reason, _firstRank, ...otherArgs) => {
1771
1791
  const [valueAsked] = otherArgs;
1772
- return `Après combien de minutes le nombre d'amuse-bouches sera-t-il de $${round(valueAsked, 2).frPretty(2)}$ ?`;
1792
+ return `Après combien de minutes le nombre d'amuse-bouches sera-t-il de $${round(valueAsked, 0).frPretty(0)}$ ?`;
1773
1793
  },
1774
1794
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
1775
1795
  const [valueAsked, rankDecoder] = otherArgs;
@@ -1781,12 +1801,12 @@ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${i
1781
1801
  const [valueAsked] = otherArgs;
1782
1802
  return `Quelle est la nature de la suite $(u_n)$ ?
1783
1803
 
1784
- Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(2)}$.`;
1804
+ Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(0)}$.`;
1785
1805
  },
1786
1806
  getCorrectionStuff: (initial, reason, _firstRank) => {
1787
1807
  return {
1788
- str: `Chaque minute, le nombre d'amuse-bouches diminue de $${-reason.frPretty(2)}$.
1789
- Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1808
+ str: `Chaque minute, le nombre d'amuse-bouches diminue de $${(-reason).frPretty(0)}$.
1809
+ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1790
1810
  };
1791
1811
  },
1792
1812
  },
@@ -1797,12 +1817,12 @@ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${i
1797
1817
  switch (inequationSymbol.symbol) {
1798
1818
  case "<":
1799
1819
  case "\\le":
1800
- return `Quelle sera la dernière minute où le nombre d'amuse-bouches sera ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(2)}$ ?`;
1820
+ return `Quelle sera la dernière minute où le nombre d'amuse-bouches sera ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(0)}$ ?`;
1801
1821
  case ">":
1802
1822
  case "\\ge":
1803
1823
  return `Quelle sera la minute où le nombre d'amuse-bouches ${isStrict
1804
1824
  ? "passera strictement en dessous de"
1805
- : "égalera ou passera en dessous de"} $${valueThreshold.frPretty(2)} \\ \\textrm{€}$ ?`;
1825
+ : "égalera ou passera en dessous de"} $${valueThreshold.frPretty(0)}$ ?`;
1806
1826
  }
1807
1827
  },
1808
1828
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
@@ -1826,12 +1846,12 @@ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${i
1826
1846
  })();
1827
1847
  return `Quelle est la nature de la suite $u_n$ ?
1828
1848
 
1829
- Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(2)}$.`;
1849
+ Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(0)}$.`;
1830
1850
  },
1831
1851
  getCorrectionStuff: (initial, reason, _firstRank) => {
1832
1852
  return {
1833
- str: `Chaque minute, le nombre d'amuse-bouches diminue de $${-reason.frPretty(2)}$.
1834
- Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1853
+ str: `Chaque minute, le nombre d'amuse-bouches diminue de $${(-reason).frPretty(0)}$.
1854
+ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1835
1855
  };
1836
1856
  },
1837
1857
  },
@@ -1867,10 +1887,12 @@ Le nombre d'amuse-bouches est donc une suite arithmétique de premier terme $${i
1867
1887
  targetFromRank: (rank, firstRank) => (rank - firstRank).toTree(),
1868
1888
  rankFromTarget: (nodeTarget, firstRank) => nodeTarget.evaluate() + firstRank,
1869
1889
  },
1890
+ digitsValue: 0,
1891
+ digitsTarget: 0,
1870
1892
  getStrSituation: (initial, reason, firstRank, superfluousData) => {
1871
1893
  if (superfluousData === undefined) {
1872
- return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(2)}$ joueurs réguliers.
1873
- Tous les ans, $${(-reason).frPretty(2)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1894
+ return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(0)}$ joueurs réguliers.
1895
+ Tous les ans, $${(-reason).frPretty(0)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1874
1896
  On note $u_n$ le nombre de joueurs réguliers de Locket Rig $${getStrFactor(firstRank)}$ années après sa sortie.`;
1875
1897
  }
1876
1898
  else {
@@ -1878,18 +1900,18 @@ On note $u_n$ le nombre de joueurs réguliers de Locket Rig $${getStrFactor(firs
1878
1900
  case 0:
1879
1901
  {
1880
1902
  const [numberOfPlayersOfNordFight] = superfluousData.values;
1881
- return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(2)}$ joueurs réguliers.
1882
- Tous les ans, $${(-reason).frPretty(2)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1883
- Actuellement, $${numberOfPlayersOfNordFight.frPretty(2)}$ jouent régulièrement au jeu vidéo Nord Fight.
1903
+ return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(0)}$ joueurs réguliers.
1904
+ Tous les ans, $${(-reason).frPretty(0)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1905
+ Actuellement, $${numberOfPlayersOfNordFight.frPretty(0)}$ jouent régulièrement au jeu vidéo Nord Fight.
1884
1906
  On note $u_n$ le nombre de joueurs réguliers de Locket Rig $${getStrFactor(firstRank)}$ années après sa sortie.`;
1885
1907
  }
1886
1908
  break;
1887
1909
  case 1:
1888
1910
  {
1889
1911
  const [nbOfSpectatorsAtPhysicalEvent] = superfluousData.values;
1890
- return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(2)}$ joueurs réguliers.
1891
- Il y avait $${nbOfSpectatorsAtPhysicalEvent.frPretty(2)}$ spectateurs au premier tournoi organisé dans une grande salle de concert.
1892
- Tous les ans, $${(-reason).frPretty(2)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1912
+ return `L'année de la sortie du jeu vidéo Locket Rig, ce même jeu avait $${initial.frPretty(0)}$ joueurs réguliers.
1913
+ Il y avait $${nbOfSpectatorsAtPhysicalEvent.frPretty(0)}$ spectateurs au premier tournoi organisé dans une grande salle de concert.
1914
+ Tous les ans, $${(-reason).frPretty(0)}$ joueurs arrêtent de jouer régulièrement à Locket Rig.
1893
1915
  On note $u_n$ le nombre de joueurs réguliers de Locket Rig $${getStrFactor(firstRank)}$ années après sa sortie.`;
1894
1916
  }
1895
1917
  break;
@@ -1906,12 +1928,12 @@ Inspire toi de ce calcul pour déterminer le nombre de joueurs $${getStrFactor(f
1906
1928
  `,
1907
1929
  getCorrectionStuff: (initial, reason, firstRank) => {
1908
1930
  return {
1909
- str: `Chaque année, le nombre de joueurs diminue de $${-reason.frPretty(2)}$.
1910
- Au bout de $${getStrFactor(firstRank)}$ années, le nombre de joueurs aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$.
1931
+ str: `Chaque année, le nombre de joueurs diminue de $${(-reason).frPretty(0)}$.
1932
+ Au bout de $${getStrFactor(firstRank)}$ années, le nombre de joueurs aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$.
1911
1933
 
1912
- Au départ, il y en avait $${initial.frPretty(2)}$.
1934
+ Au départ, il y en avait $${initial.frPretty(0)}$.
1913
1935
 
1914
- Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1936
+ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1915
1937
  };
1916
1938
  },
1917
1939
  },
@@ -1925,8 +1947,8 @@ Déduis-en comment calculer $u_{n+1}$ à partir de $u_n$.`,
1925
1947
  const target2 = 5;
1926
1948
  const [rank1, rank2] = [target1, target2].map((target) => target + firstRank);
1927
1949
  return {
1928
- str: `Chaque année, le nombre de joueurs diminue de $${-reason.frPretty(2)}$.
1929
- Par exemple, le nombre de joueurs restant après $${target2.frPretty(2)}$ années est égal à celui après $${target1.frPretty(2)}$ années diminué de $${(-reason).frPretty(2)}$.`,
1950
+ str: `Chaque année, le nombre de joueurs diminue de $${(-reason).frPretty(0)}$.
1951
+ Par exemple, le nombre de joueurs restant après $${target2.frPretty(0)}$ années est égal à celui après $${target1.frPretty(0)}$ années diminué de $${(-reason).frPretty(0)}$.`,
1930
1952
  rank1,
1931
1953
  rank2,
1932
1954
  };
@@ -1942,23 +1964,23 @@ Par exemple, le nombre de joueurs restant après $${target2.frPretty(2)}$ année
1942
1964
  const target = rankAsked - firstRank;
1943
1965
  return `Quelle est la nature de la suite $u_n$ ?
1944
1966
 
1945
- Utilise le terme général de $u_n$ pour déterminer le nombre de joueurs restant après $${target.frPretty(2)}$ années.`;
1967
+ Utilise le terme général de $u_n$ pour déterminer le nombre de joueurs restant après $${target.frPretty(0)}$ années.`;
1946
1968
  },
1947
1969
  getCorrectionStuff: (initial, reason, firstRank, ..._otherArgs) => {
1948
1970
  return {
1949
- str: `Chaque année, le nombre de joueurs diminue de $${-reason.frPretty(2)}$.
1950
- Au bout de $${getStrFactor(firstRank)}$ années, le nombre de joueurs aura diminué de $${getStrFactor(firstRank)} \\times ${-reason.frPretty(2)}$.
1971
+ str: `Chaque année, le nombre de joueurs diminue de $${(-reason).frPretty(0)}$.
1972
+ Au bout de $${getStrFactor(firstRank)}$ années, le nombre de joueurs aura diminué de $${getStrFactor(firstRank)} \\times ${(-reason).frPretty(0)}$.
1951
1973
 
1952
- Au départ, il y en avait $${initial.frPretty(2)}$.
1974
+ Au départ, il y en avait $${initial.frPretty(0)}$.
1953
1975
 
1954
- Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1976
+ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1955
1977
  };
1956
1978
  },
1957
1979
  },
1958
1980
  variationFindRank: {
1959
1981
  getStrQuestion: (_initial, _reason, _firstRank, ...otherArgs) => {
1960
1982
  const [valueAsked] = otherArgs;
1961
- return `Après combien d'années le nombre de joueurs sera-t-il de $${round(valueAsked, 2).frPretty(2)}$ ?`;
1983
+ return `Après combien d'années le nombre de joueurs sera-t-il de $${round(valueAsked, 0).frPretty(0)}$ ?`;
1962
1984
  },
1963
1985
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
1964
1986
  const [valueAsked, rankDecoder] = otherArgs;
@@ -1970,12 +1992,12 @@ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique d
1970
1992
  const [valueAsked] = otherArgs;
1971
1993
  return `Quelle est la nature de la suite $(u_n)$ ?
1972
1994
 
1973
- Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(2)}$.`;
1995
+ Utilise le terme général de $(u_n)$ pour déterminer quand $u_p = ${valueAsked.frPretty(0)}$.`;
1974
1996
  },
1975
1997
  getCorrectionStuff: (initial, reason, _firstRank) => {
1976
1998
  return {
1977
- str: `Chaque année, le nombre de joueurs diminue de $${-reason.frPretty(2)}$.
1978
- Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
1999
+ str: `Chaque année, le nombre de joueurs diminue de $${(-reason).frPretty(0)}$.
2000
+ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
1979
2001
  };
1980
2002
  },
1981
2003
  },
@@ -1986,12 +2008,12 @@ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique d
1986
2008
  switch (inequationSymbol.symbol) {
1987
2009
  case "<":
1988
2010
  case "\\le":
1989
- return `Quelle sera la dernière année où le nombre de joueurs sera ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(2)}$ ?`;
2011
+ return `Quelle sera la dernière année où le nombre de joueurs sera ${isStrict ? "supérieur" : "supérieur ou égal"} à $${valueThreshold.frPretty(0)}$ ?`;
1990
2012
  case ">":
1991
2013
  case "\\ge":
1992
2014
  return `Quelle sera l'année où le nombre de joueurs ${isStrict
1993
2015
  ? "passera strictement en dessous de"
1994
- : "égalera ou passera en dessous de"} $${valueThreshold.frPretty(2)}$ ?`;
2016
+ : "égalera ou passera en dessous de"} $${valueThreshold.frPretty(0)}$ ?`;
1995
2017
  }
1996
2018
  },
1997
2019
  getAnswerStuff: (initial, reason, firstRank, ...otherArgs) => {
@@ -2015,12 +2037,12 @@ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique d
2015
2037
  })();
2016
2038
  return `Quelle est la nature de la suite $u_n$ ?
2017
2039
 
2018
- Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(2)}$.`;
2040
+ Utilise le terme général de $(u_n)$ pour déterminer ${texP} $p$ tel que $u_p ${inequationSymbol.symbol} ${valueThreshold.frPretty(0)}$.`;
2019
2041
  },
2020
2042
  getCorrectionStuff: (initial, reason, _firstRank) => {
2021
2043
  return {
2022
- str: `Chaque année, le nombre de joueurs diminue de $${-reason.frPretty(2)}$.
2023
- Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(2)}$ et de raison $${reason.frPretty(2)}$.`,
2044
+ str: `Chaque année, le nombre de joueurs diminue de $${(-reason).frPretty(0)}$.
2045
+ Le nombre de joueurs réguliers de Locket Rig est donc une suite arithmétique de premier terme $${initial.frPretty(0)}$ et de raison $${reason.frPretty(0)}$.`,
2024
2046
  };
2025
2047
  },
2026
2048
  },