math-exercises 3.0.86 → 3.0.87

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 (149) hide show
  1. package/lib/exercises/exercise.d.ts +7 -0
  2. package/lib/exercises/exercise.d.ts.map +1 -1
  3. package/lib/exercises/math/calcul/arithmetics/decimalBoundingOnLine.js +1 -1
  4. package/lib/exercises/math/calcul/arithmetics/divisorsList.js +1 -1
  5. package/lib/exercises/math/calcul/arithmetics/index.d.ts +0 -10
  6. package/lib/exercises/math/calcul/arithmetics/index.d.ts.map +1 -1
  7. package/lib/exercises/math/calcul/arithmetics/index.js +0 -10
  8. package/lib/exercises/math/calcul/arithmetics/primeNumbers.js +1 -1
  9. package/lib/exercises/math/calcul/fractions/evalFractionExpression.d.ts +9 -0
  10. package/lib/exercises/math/calcul/fractions/evalFractionExpression.d.ts.map +1 -0
  11. package/lib/exercises/math/calcul/fractions/evalFractionExpression.js +113 -0
  12. package/lib/exercises/math/calcul/fractions/fractionSquare.d.ts.map +1 -1
  13. package/lib/exercises/math/calcul/fractions/fractionSquare.js +1 -0
  14. package/lib/exercises/math/calcul/fractions/index.d.ts +2 -0
  15. package/lib/exercises/math/calcul/fractions/index.d.ts.map +1 -1
  16. package/lib/exercises/math/calcul/fractions/index.js +2 -0
  17. package/lib/exercises/math/calcul/fractions/powerNotation.d.ts.map +1 -1
  18. package/lib/exercises/math/calcul/fractions/powerNotation.js +1 -0
  19. package/lib/exercises/math/calcul/fractions/simplifyFraction.d.ts.map +1 -1
  20. package/lib/exercises/math/calcul/fractions/simplifyFraction.js +1 -0
  21. package/lib/exercises/math/calcul/fractions/simplifyFractionWithPrimeFactorization.d.ts.map +1 -1
  22. package/lib/exercises/math/calcul/fractions/simplifyFractionWithPrimeFactorization.js +1 -0
  23. package/lib/exercises/math/calcul/fractions/simplifyToFraction.d.ts +9 -0
  24. package/lib/exercises/math/calcul/fractions/simplifyToFraction.d.ts.map +1 -0
  25. package/lib/exercises/math/calcul/fractions/simplifyToFraction.js +168 -0
  26. package/lib/exercises/math/calcul/ordering/framing.js +3 -3
  27. package/lib/exercises/math/calcul/sign/absoluteNumber.d.ts.map +1 -1
  28. package/lib/exercises/math/calcul/sign/absoluteNumber.js +1 -0
  29. package/lib/exercises/math/calculLitteral/inequations/index.d.ts +2 -0
  30. package/lib/exercises/math/calculLitteral/inequations/index.d.ts.map +1 -1
  31. package/lib/exercises/math/calculLitteral/inequations/index.js +2 -0
  32. package/lib/exercises/math/calculLitteral/inequations/isInequalityTrue.d.ts +15 -0
  33. package/lib/exercises/math/calculLitteral/inequations/isInequalityTrue.d.ts.map +1 -0
  34. package/lib/exercises/math/calculLitteral/inequations/isInequalityTrue.js +143 -0
  35. package/lib/exercises/math/calculLitteral/inequations/minNumberInequality.d.ts +13 -0
  36. package/lib/exercises/math/calculLitteral/inequations/minNumberInequality.d.ts.map +1 -0
  37. package/lib/exercises/math/calculLitteral/inequations/minNumberInequality.js +192 -0
  38. package/lib/exercises/math/calculLitteral/systems/verifySystemSolution.js +1 -1
  39. package/lib/exercises/math/functions/absolute/calculateDistanceBetweenNumbers.d.ts +8 -0
  40. package/lib/exercises/math/functions/absolute/calculateDistanceBetweenNumbers.d.ts.map +1 -0
  41. package/lib/exercises/math/functions/absolute/calculateDistanceBetweenNumbers.js +102 -0
  42. package/lib/exercises/math/functions/absolute/calculateDistanceWithAbsoluteValue.d.ts +10 -0
  43. package/lib/exercises/math/functions/absolute/calculateDistanceWithAbsoluteValue.d.ts.map +1 -0
  44. package/lib/exercises/math/functions/absolute/calculateDistanceWithAbsoluteValue.js +112 -0
  45. package/lib/exercises/math/functions/absolute/calculateWithAbsoluteValue.d.ts +8 -0
  46. package/lib/exercises/math/functions/absolute/calculateWithAbsoluteValue.d.ts.map +1 -0
  47. package/lib/exercises/math/functions/absolute/calculateWithAbsoluteValue.js +124 -0
  48. package/lib/exercises/math/functions/absolute/index.d.ts +3 -0
  49. package/lib/exercises/math/functions/absolute/index.d.ts.map +1 -1
  50. package/lib/exercises/math/functions/absolute/index.js +3 -0
  51. package/lib/exercises/math/functions/basics/index.d.ts +1 -0
  52. package/lib/exercises/math/functions/basics/index.d.ts.map +1 -1
  53. package/lib/exercises/math/functions/basics/index.js +1 -1
  54. package/lib/exercises/math/functions/basics/valueTableCompletion.d.ts +2 -1
  55. package/lib/exercises/math/functions/basics/valueTableCompletion.d.ts.map +1 -1
  56. package/lib/exercises/math/functions/basics/valueTableCompletion.js +103 -31
  57. package/lib/exercises/math/functions/sqrt/index.d.ts +2 -0
  58. package/lib/exercises/math/functions/sqrt/index.d.ts.map +1 -1
  59. package/lib/exercises/math/functions/sqrt/index.js +2 -0
  60. package/lib/exercises/math/functions/sqrt/sqrtInequality.d.ts +10 -0
  61. package/lib/exercises/math/functions/sqrt/sqrtInequality.d.ts.map +1 -0
  62. package/lib/exercises/math/functions/sqrt/sqrtInequality.js +160 -0
  63. package/lib/exercises/math/functions/sqrt/squareRootCalculation.d.ts +8 -0
  64. package/lib/exercises/math/functions/sqrt/squareRootCalculation.d.ts.map +1 -0
  65. package/lib/exercises/math/functions/sqrt/squareRootCalculation.js +108 -0
  66. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -1
  67. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +0 -1
  68. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.d.ts.map +1 -1
  69. package/lib/exercises/math/geometry/cartesian/cartesianEquationOfLine.js +1 -1
  70. package/lib/exercises/math/geometry/cartesian/cartesianFromTwoPoints.js +1 -1
  71. package/lib/exercises/math/geometry/cartesian/cartesianFromVectorAndPoint.js +1 -1
  72. package/lib/exercises/math/geometry/index.d.ts +0 -1
  73. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  74. package/lib/exercises/math/geometry/index.js +0 -1
  75. package/lib/exercises/math/geometry/lines/cartesianEquationToReduced.js +1 -1
  76. package/lib/exercises/math/geometry/lines/cartesianEquationsIntersection.js +1 -1
  77. package/lib/exercises/math/geometry/lines/findParallelLineFromCartesianEquation.d.ts.map +1 -1
  78. package/lib/exercises/math/geometry/lines/findParallelLineFromCartesianEquation.js +1 -1
  79. package/lib/exercises/math/geometry/lines/findParallelLineFromReductEquation.d.ts.map +1 -1
  80. package/lib/exercises/math/geometry/lines/findParallelLineFromReductEquation.js +1 -1
  81. package/lib/exercises/math/geometry/vectors/lineFromDirectorVector.js +1 -1
  82. package/lib/exercises/math/powers/calculateNegativePower.d.ts.map +1 -1
  83. package/lib/exercises/math/powers/calculateNegativePower.js +1 -0
  84. package/lib/exercises/math/powers/powersDivision.d.ts.map +1 -1
  85. package/lib/exercises/math/powers/powersDivision.js +2 -0
  86. package/lib/exercises/math/powers/powersMixOperations.d.ts.map +1 -1
  87. package/lib/exercises/math/powers/powersMixOperations.js +1 -0
  88. package/lib/exercises/math/powers/powersPower.d.ts.map +1 -1
  89. package/lib/exercises/math/powers/powersPower.js +2 -0
  90. package/lib/exercises/math/powers/powersProduct.d.ts.map +1 -1
  91. package/lib/exercises/math/powers/powersProduct.js +2 -0
  92. package/lib/exercises/math/probaStat/basicStats/index.d.ts +0 -1
  93. package/lib/exercises/math/probaStat/basicStats/index.d.ts.map +1 -1
  94. package/lib/exercises/math/probaStat/basicStats/index.js +0 -1
  95. package/lib/exercises/math/probaStat/index.d.ts +0 -2
  96. package/lib/exercises/math/probaStat/index.d.ts.map +1 -1
  97. package/lib/exercises/math/probaStat/index.js +0 -2
  98. package/lib/exercises/math/probaStat/stats1var/choseReasoningForIndicator.js +2 -2
  99. package/lib/exercises/math/probaStat/stats1var/getQuartileProportionQuestion.d.ts +12 -0
  100. package/lib/exercises/math/probaStat/stats1var/getQuartileProportionQuestion.d.ts.map +1 -0
  101. package/lib/exercises/math/probaStat/stats1var/getQuartileProportionQuestion.js +178 -0
  102. package/lib/exercises/math/probaStat/stats1var/index.d.ts +1 -0
  103. package/lib/exercises/math/probaStat/stats1var/index.d.ts.map +1 -1
  104. package/lib/exercises/math/probaStat/stats1var/index.js +1 -0
  105. package/lib/exercises/math/sampling/getSampleCountAndSize.d.ts +12 -0
  106. package/lib/exercises/math/sampling/getSampleCountAndSize.d.ts.map +1 -0
  107. package/lib/exercises/math/sampling/getSampleCountAndSize.js +95 -0
  108. package/lib/exercises/math/sampling/index.d.ts +2 -0
  109. package/lib/exercises/math/sampling/index.d.ts.map +1 -1
  110. package/lib/exercises/math/sampling/index.js +2 -0
  111. package/lib/exercises/math/sampling/samplingFrequency.d.ts +7 -0
  112. package/lib/exercises/math/sampling/samplingFrequency.d.ts.map +1 -0
  113. package/lib/exercises/math/sampling/samplingFrequency.js +106 -0
  114. package/lib/exercises/math/sets/intervals/index.d.ts +2 -0
  115. package/lib/exercises/math/sets/intervals/index.d.ts.map +1 -1
  116. package/lib/exercises/math/sets/intervals/index.js +2 -0
  117. package/lib/exercises/math/sets/intervals/intervalOnGraph.d.ts +8 -0
  118. package/lib/exercises/math/sets/intervals/intervalOnGraph.d.ts.map +1 -0
  119. package/lib/exercises/math/sets/intervals/intervalOnGraph.js +156 -0
  120. package/lib/exercises/math/sets/intervals/isNumberInInterval.d.ts +9 -0
  121. package/lib/exercises/math/sets/intervals/isNumberInInterval.d.ts.map +1 -0
  122. package/lib/exercises/math/sets/intervals/isNumberInInterval.js +174 -0
  123. package/lib/exercises/math/squareRoots/simpifySquareRoot.d.ts.map +1 -1
  124. package/lib/exercises/math/squareRoots/simpifySquareRoot.js +1 -0
  125. package/lib/exercises/math/squareRoots/squareRootIdentities.d.ts.map +1 -1
  126. package/lib/exercises/math/squareRoots/squareRootIdentities.js +1 -0
  127. package/lib/exercises/math/squareRoots/squareRootsDistributivity.d.ts.map +1 -1
  128. package/lib/exercises/math/squareRoots/squareRootsDistributivity.js +1 -0
  129. package/lib/exercises/math/squareRoots/squareRootsFractions.d.ts.map +1 -1
  130. package/lib/exercises/math/squareRoots/squareRootsFractions.js +1 -0
  131. package/lib/exercises/math/squareRoots/squareRootsProducts.d.ts.map +1 -1
  132. package/lib/exercises/math/squareRoots/squareRootsProducts.js +1 -0
  133. package/lib/exercises/math/squareRoots/squareRootsSum.d.ts.map +1 -1
  134. package/lib/exercises/math/squareRoots/squareRootsSum.js +1 -0
  135. package/lib/index.d.ts +60 -55
  136. package/lib/index.d.ts.map +1 -1
  137. package/lib/math/geometry/line.d.ts.map +1 -1
  138. package/lib/math/geometry/line.js +0 -11
  139. package/lib/server.js +21 -0
  140. package/lib/tests/exoTest.d.ts.map +1 -1
  141. package/lib/tests/exoTest.js +9 -2
  142. package/lib/tests/questionTest.d.ts.map +1 -1
  143. package/lib/tests/questionTest.js +21 -2
  144. package/lib/tree/nodes/equations/equalNode.d.ts.map +1 -1
  145. package/lib/tree/nodes/equations/equalNode.js +0 -1
  146. package/lib/utils/markdown/mdTable.d.ts +1 -1
  147. package/lib/utils/markdown/mdTable.d.ts.map +1 -1
  148. package/lib/utils/markdown/mdTable.js +10 -5
  149. package/package.json +1 -1
@@ -0,0 +1,95 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { randint } from "../../../math/utils/random/randint.js";
4
+ import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
5
+ import { coinFlip } from "../../../utils/alea/coinFlip.js";
6
+ import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
7
+ const getPropositions = (n, { answer, expCount, isSize, repCount }) => {
8
+ const propositions = [];
9
+ addValidProp(propositions, answer);
10
+ tryToAddWrongProp(propositions, expCount.frenchify());
11
+ tryToAddWrongProp(propositions, repCount.frenchify());
12
+ while (propositions.length < n) {
13
+ let wrongValue;
14
+ wrongValue = randint(1, 200);
15
+ tryToAddWrongProp(propositions, wrongValue.frenchify());
16
+ }
17
+ return shuffleProps(propositions, n);
18
+ };
19
+ const getAnswer = (identifiers) => {
20
+ const { expCount, repCount, isSize } = identifiers;
21
+ const answer = isSize ? expCount.frenchify() : repCount.frenchify();
22
+ return answer;
23
+ };
24
+ const getInstruction = (identifiers) => {
25
+ const { expCount, repCount, isSize } = identifiers;
26
+ const qst = isSize
27
+ ? "Quelle est la taille de chaque échantillon ?"
28
+ : "Quel est le nombre d'échantillons obtenus?";
29
+ return `On lance $${expCount}$ fois trois pièces simultanément.\n\n
30
+ On répète l'expérience $${repCount}$ fois.\n\n
31
+ ${qst}`;
32
+ };
33
+ const getHint = ({ isSize }) => {
34
+ return isSize
35
+ ? `La taille d'un échantillon correspond au nombre de répétitions à l'intérieur d'une même expérience.`
36
+ : `Le nombre d'échantillons correspond au nombre de fois qu'on répète l'expérience entière.`;
37
+ };
38
+ const getCorrection = ({ expCount, repCount, isSize, }) => {
39
+ if (isSize) {
40
+ return `Chaque fois qu'on répète l'expérience, on lance $${expCount}$ fois trois pièces.
41
+ La taille de chaque échantillon est donc $${expCount}$.`;
42
+ }
43
+ else {
44
+ return `On répète l'expérience complète $${repCount}$ fois.
45
+ On obtient donc $${repCount}$ échantillons.`;
46
+ }
47
+ };
48
+ const getKeys = (identifiers) => {
49
+ return [];
50
+ };
51
+ const isAnswerValid = (ans, { answer }) => {
52
+ try {
53
+ const ansNode = parseAlgebraic(ans);
54
+ const answerNode = parseAlgebraic(answer);
55
+ return answerNode.simplify().equals(ansNode.simplify());
56
+ }
57
+ catch (err) {
58
+ return handleVEAError(err);
59
+ }
60
+ };
61
+ const getGetSampleCountAndSizeQuestion = (opts) => {
62
+ const expCount = randint(1, 301);
63
+ const repCount = randint(1, 51);
64
+ const isSize = opts?.isSize ?? coinFlip();
65
+ const identifiers = { expCount, repCount, isSize };
66
+ return getQuestionFromIdentifiers(identifiers, opts);
67
+ };
68
+ const getQuestionFromIdentifiers = (identifiers, opts) => {
69
+ return {
70
+ answer: getAnswer(identifiers, opts),
71
+ instruction: getInstruction(identifiers, opts),
72
+ keys: getKeys(identifiers, opts),
73
+ answerFormat: "tex",
74
+ identifiers,
75
+ hint: getHint(identifiers, opts),
76
+ correction: getCorrection(identifiers, opts),
77
+ };
78
+ };
79
+ export const getSampleCountAndSize = {
80
+ id: "getSampleCountAndSize",
81
+ label: "Distinguer taille et nombre d'échantillons",
82
+ isSingleStep: true,
83
+ generator: (nb, opts) => getDistinctQuestions(() => getGetSampleCountAndSizeQuestion(opts), nb),
84
+ qcmTimer: 60,
85
+ freeTimer: 60,
86
+ getPropositions,
87
+ isAnswerValid,
88
+ subject: "Mathématiques",
89
+ getInstruction,
90
+ getHint,
91
+ getCorrection,
92
+ getAnswer,
93
+ getQuestionFromIdentifiers,
94
+ hasHintAndCorrection: true,
95
+ };
@@ -1,4 +1,6 @@
1
1
  export * from "./fluctuationInterval.js";
2
2
  export * from "./confidenceInterval.js";
3
3
  export * from "./isSamplingRepresentative.js";
4
+ export * from "./getSampleCountAndSize.js";
5
+ export * from "./samplingFrequency.js";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sampling/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sampling/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export * from "./fluctuationInterval.js";
2
2
  export * from "./confidenceInterval.js";
3
3
  export * from "./isSamplingRepresentative.js";
4
+ export * from "./getSampleCountAndSize.js";
5
+ export * from "./samplingFrequency.js";
@@ -0,0 +1,7 @@
1
+ import { Exercise } from "../../../exercises/exercise.js";
2
+ type Identifiers = {
3
+ samples: number[];
4
+ };
5
+ export declare const samplingFrequency: Exercise<Identifiers>;
6
+ export {};
7
+ //# sourceMappingURL=samplingFrequency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samplingFrequency.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/sampling/samplingFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAwGF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAoBnD,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { GeogebraConstructor } from "../../../geogebra/geogebraConstructor.js";
4
+ import { randint } from "../../../math/utils/random/randint.js";
5
+ import { round } from "../../../math/utils/round.js";
6
+ import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
7
+ import { coinFlip } from "../../../utils/alea/coinFlip.js";
8
+ import { average } from "../../../utils/average.js";
9
+ const getPropositions = (n, { answer, ...identifiers }) => {
10
+ const propositions = [];
11
+ addValidProp(propositions, answer);
12
+ const samples = identifiers.samples;
13
+ const avg = average(samples);
14
+ while (propositions.length < n) {
15
+ tryToAddWrongProp(propositions, round(avg + (coinFlip() ? randint(10, 30) / 100 : randint(-30, -10) / 100), 2).frenchify());
16
+ }
17
+ return shuffleProps(propositions, n);
18
+ };
19
+ const getAnswer = (identifiers) => {
20
+ const avg = average(identifiers.samples);
21
+ return round(avg, 1).frenchify();
22
+ };
23
+ const getInstruction = (identifiers) => {
24
+ const length = identifiers.samples.length;
25
+ return `Ce graphique donne les fréquences $${length}$ échantillons d'une expérience aléatoire. Estimer la probabilité de l'évènement $A$.`;
26
+ };
27
+ const getHint = (identifiers) => {
28
+ return `Chaque échantillon donne une valeur approximative proche de la probabilité réelle.
29
+
30
+ Tu peux estimer cette probabilité en déterminant graphiquement la moyenne des fréquences des échantillons.`;
31
+ };
32
+ const getCorrection = (identifiers) => {
33
+ const { samples } = identifiers;
34
+ const avg = getAnswer(identifiers);
35
+ return `On lit graphiquement que la moyenne des fréquences est environ $${avg}$. Puisque le nombre d'échantillons est suffisant, on peut donc estimer que la probabilité de l'évènement $A$ vaut environ $${avg}$.`;
36
+ };
37
+ const getGGBOptions = (identifiers) => {
38
+ const commands = identifiers.samples.map((y, idx) => `(${idx}, ${y})`);
39
+ const yMax = Math.max(...identifiers.samples);
40
+ const ggb = new GeogebraConstructor({
41
+ commands,
42
+ lockedAxesRatio: 5,
43
+ gridDistance: [1, 0.1],
44
+ xAxis: {
45
+ showPositive: true,
46
+ label: "N° d'échantillon",
47
+ },
48
+ yAxis: {
49
+ label: "Fréquence de l'évènement A",
50
+ },
51
+ fontSize: 16,
52
+ });
53
+ return ggb.getOptions({
54
+ coords: [-1, identifiers.samples.length + 1, -0.1, yMax + 0.3],
55
+ });
56
+ };
57
+ const getKeys = (identifiers) => {
58
+ return [];
59
+ };
60
+ const isAnswerValid = (ans, { answer }) => {
61
+ // On autorise une erreur de +/- 5% sur la frequence moyenne
62
+ const ev = parseAlgebraic(ans).evaluate();
63
+ const ansEv = parseAlgebraic(answer).evaluate();
64
+ return Math.abs(ev - ansEv) < 5 / 100;
65
+ };
66
+ const getSamplingFrequencyQuestion = (opts) => {
67
+ const freq = randint(2, 10) * 10; // multiple de 10 pour simplifier l'estimation pour l'utilisateur
68
+ let samples = [];
69
+ const length = randint(9, 14);
70
+ for (let i = 0; i < length; i++) {
71
+ samples.push(round((freq + randint(-10, 10)) / 100, 2));
72
+ }
73
+ const identifiers = { samples };
74
+ return getQuestionFromIdentifiers(identifiers);
75
+ };
76
+ const getQuestionFromIdentifiers = (identifiers) => {
77
+ return {
78
+ answer: getAnswer(identifiers),
79
+ instruction: getInstruction(identifiers),
80
+ keys: getKeys(identifiers),
81
+ answerFormat: "tex",
82
+ identifiers,
83
+ hint: getHint(identifiers),
84
+ correction: getCorrection(identifiers),
85
+ ggbOptions: getGGBOptions(identifiers),
86
+ };
87
+ };
88
+ export const samplingFrequency = {
89
+ id: "samplingFrequency",
90
+ label: "Estimer une probabilité à partir d'un graphique de fréquences pour un nombre suffisant d'échantillons",
91
+ isSingleStep: true,
92
+ generator: (nb, opts) => getDistinctQuestions(() => getSamplingFrequencyQuestion(opts), nb),
93
+ qcmTimer: 60,
94
+ freeTimer: 60,
95
+ getPropositions,
96
+ isAnswerValid,
97
+ subject: "Mathématiques",
98
+ getHint,
99
+ getCorrection,
100
+ getInstruction,
101
+ getAnswer,
102
+ getGGBOptions,
103
+ hasGeogebra: true,
104
+ hasHintAndCorrection: true,
105
+ getQuestionFromIdentifiers,
106
+ };
@@ -2,4 +2,6 @@ export * from "./inequalityToInterval.js";
2
2
  export * from "./intervalsIntersection.js";
3
3
  export * from "./intervalsUnion.js";
4
4
  export * from "./intervalToInequality.js";
5
+ export * from "./isNumberInInterval.js";
6
+ export * from "./intervalOnGraph.js";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
@@ -2,3 +2,5 @@ export * from "./inequalityToInterval.js";
2
2
  export * from "./intervalsIntersection.js";
3
3
  export * from "./intervalsUnion.js";
4
4
  export * from "./intervalToInequality.js";
5
+ export * from "./isNumberInInterval.js";
6
+ export * from "./intervalOnGraph.js";
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { IntervalNodeIdentifiers } from "../../../../tree/nodes/sets/intervalNode.js";
3
+ type Identifiers = {
4
+ intervalNodeIdentifiers: IntervalNodeIdentifiers;
5
+ };
6
+ export declare const intervalOnGraph: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=intervalOnGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervalOnGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/intervalOnGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAEL,uBAAuB,EACxB,MAAM,uCAAuC,CAAC;AAI/C,KAAK,WAAW,GAAG;IACjB,uBAAuB,EAAE,uBAAuB,CAAC;CAClD,CAAC;AA6KF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAmBjD,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { randomColor } from "../../../../geogebra/colors.js";
4
+ import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
5
+ import { IntervalNodeConstructor, } from "../../../../tree/nodes/sets/intervalNode.js";
6
+ import { intervalParser } from "../../../../tree/parsers/intervalParser.js";
7
+ const getPropositions = (n, { answer, ...identifiers }) => {
8
+ const propositions = [];
9
+ const { intervalNodeIdentifiers } = identifiers;
10
+ const interval = IntervalNodeConstructor.fromIdentifiers(intervalNodeIdentifiers);
11
+ addValidProp(propositions, answer);
12
+ tryToAddWrongProp(propositions, interval.toClosedForm().toTex());
13
+ tryToAddWrongProp(propositions, interval.toComplement().toTex());
14
+ tryToAddWrongProp(propositions, interval.toLeftReversedClosure().toTex());
15
+ tryToAddWrongProp(propositions, interval.toReversedClosure().toTex());
16
+ tryToAddWrongProp(propositions, interval.toRightReversedClosure().toTex());
17
+ // tryToAddWrongProp(propositions, `${a} \\le x \\le ${b}`);
18
+ // tryToAddWrongProp(propositions, `${a} \\le x < ${b}`);
19
+ // tryToAddWrongProp(propositions, `${a} < x \\le ${b}`);
20
+ // tryToAddWrongProp(propositions, `${a} < x < ${b}`);
21
+ // tryToAddWrongProp(propositions, `${b} \\le x \\le ${a}`);
22
+ // tryToAddWrongProp(propositions, `${b} \\le x < ${a}`);
23
+ // tryToAddWrongProp(propositions, `${b} < x \\le ${a}`);
24
+ // tryToAddWrongProp(propositions, `${b} < x < ${a}`);
25
+ return shuffleProps(propositions, n);
26
+ };
27
+ const getAnswer = (identifiers) => {
28
+ const { intervalNodeIdentifiers } = identifiers;
29
+ const interval = IntervalNodeConstructor.fromIdentifiers(intervalNodeIdentifiers);
30
+ return interval.toTex();
31
+ };
32
+ const getInstruction = (identifiers) => {
33
+ return `Donner la notation de l'intervalle représenté sur la droite ci-dessous :`;
34
+ };
35
+ const getHint = (identifiers) => {
36
+ return `Écris, en utilisant des crochets, l'intervalle représenté sur la droite.`;
37
+ };
38
+ const getCorrection = (identifiers) => {
39
+ const { intervalNodeIdentifiers } = identifiers;
40
+ const interval = IntervalNodeConstructor.fromIdentifiers(intervalNodeIdentifiers);
41
+ return `L'intervalle représentée contient les nombres ${interval.toText(true, false)}.
42
+
43
+ Cet intervalle se note donc :
44
+
45
+ $$
46
+ ${getAnswer(identifiers)}
47
+ $$
48
+ `;
49
+ };
50
+ const getGGBOptions = (identifiers) => {
51
+ const { intervalNodeIdentifiers } = identifiers;
52
+ const interval = IntervalNodeConstructor.fromIdentifiers(intervalNodeIdentifiers);
53
+ let a = interval.a.evaluate();
54
+ if (a === Number.NEGATIVE_INFINITY)
55
+ a = -10000;
56
+ let b = interval.b.evaluate();
57
+ if (b === Number.POSITIVE_INFINITY)
58
+ b = 10000;
59
+ // const eqLeft = closedLeft ? "<=" : "<";
60
+ // const eqRight = closedRight ? "<=" : "<";
61
+ // const commands = [`${a} ${eqLeft} x ${eqRight} ${b}`];
62
+ const color = randomColor();
63
+ const commands = [
64
+ `S = Segment((${a}, 0), (${b}, 0))`,
65
+ `SetColor(S, "${color}")`,
66
+ ];
67
+ const y = 0.01;
68
+ const xDelta = 0.3;
69
+ if (a !== -10000) {
70
+ const isLeftClosed = interval.isLeftClosed();
71
+ commands.push(...[
72
+ `S_{a1} = Segment((${a}, -${y}), (${a}, ${y}))`,
73
+ `SetColor(S_{a1}, "${color}")`,
74
+ `S_{a2} = Segment((${a}, ${y}), (${a + (isLeftClosed ? xDelta : -xDelta)}, ${y}))`,
75
+ `SetColor(S_{a2}, "${color}")`,
76
+ `S_{a3} = Segment((${a}, -${y}), (${a + (isLeftClosed ? xDelta : -xDelta)}, -${y}))`,
77
+ `SetColor(S_{a3}, "${color}")`,
78
+ ]);
79
+ }
80
+ if (b !== 10000) {
81
+ const isRightClosed = interval.isRightClosed();
82
+ commands.push(...[
83
+ `S_{b1} = Segment((${b}, -${y}), (${b}, ${y}))`,
84
+ `SetColor(S_{b1}, "${color}")`,
85
+ `S_{b2} = Segment((${b}, ${y}), (${b + (isRightClosed ? -xDelta : xDelta)}, ${y}))`,
86
+ `SetColor(S_{b2}, "${color}")`,
87
+ `S_{b3} = Segment((${b}, -${y}), (${b + (isRightClosed ? -xDelta : xDelta)}, -${y}))`,
88
+ `SetColor(S_{b3}, "${color}")`,
89
+ ]);
90
+ }
91
+ const ggb = new GeogebraConstructor({
92
+ commands,
93
+ forbidShiftDragZoom: false,
94
+ lockedAxesRatio: false,
95
+ // gridDistance: [0.5, 1],
96
+ xAxis: {
97
+ hideNumbers: false,
98
+ steps: 1,
99
+ },
100
+ yAxis: {
101
+ hidden: true,
102
+ },
103
+ maxHeight: 100,
104
+ fontSize: 20,
105
+ });
106
+ return ggb.getOptions({
107
+ coords: [Math.max(-10, a) - 4, Math.min(10, b) + 4, -0.03, 0.03],
108
+ });
109
+ };
110
+ const getKeys = (identifiers) => {
111
+ return ["lbracket", "semicolon", "rbracket", "inf"];
112
+ };
113
+ const isAnswerValid = (ans, { answer }) => {
114
+ const parsed = intervalParser(ans, { allowCommaInsteadOfSemicolon: true });
115
+ if (!parsed)
116
+ return false;
117
+ return parsed.toTex() === answer;
118
+ };
119
+ const getIntervalOnGraphQuestion = (opts) => {
120
+ const interval = IntervalNodeConstructor.random();
121
+ const identifiers = {
122
+ intervalNodeIdentifiers: interval.toIdentifiers(),
123
+ };
124
+ return getQuestionFromIdentifiers(identifiers);
125
+ };
126
+ const getQuestionFromIdentifiers = (identifiers) => {
127
+ return {
128
+ answer: getAnswer(identifiers),
129
+ instruction: getInstruction(identifiers),
130
+ keys: getKeys(identifiers),
131
+ answerFormat: "tex",
132
+ identifiers,
133
+ hint: getHint(identifiers),
134
+ correction: getCorrection(identifiers),
135
+ ggbOptions: getGGBOptions(identifiers),
136
+ };
137
+ };
138
+ export const intervalOnGraph = {
139
+ id: "intervalOnGraph",
140
+ label: "Lire un intervalle sur une droite graduée",
141
+ isSingleStep: true,
142
+ generator: (nb, opts) => getDistinctQuestions(() => getIntervalOnGraphQuestion(opts), nb),
143
+ qcmTimer: 60,
144
+ freeTimer: 60,
145
+ getPropositions,
146
+ isAnswerValid,
147
+ subject: "Mathématiques",
148
+ getHint,
149
+ getCorrection,
150
+ getInstruction,
151
+ getAnswer,
152
+ getGGBOptions,
153
+ hasGeogebra: true,
154
+ hasHintAndCorrection: true,
155
+ getQuestionFromIdentifiers,
156
+ };
@@ -0,0 +1,9 @@
1
+ import { Exercise } from "../../../../exercises/exercise.js";
2
+ import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
3
+ type Identifiers = {
4
+ a: NodeIdentifiers;
5
+ interval: NodeIdentifiers;
6
+ };
7
+ export declare const isNumberInInterval: Exercise<Identifiers>;
8
+ export {};
9
+ //# sourceMappingURL=isNumberInInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNumberInInterval.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/isNumberInInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAO7C,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,eAAe,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAsLF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAkBpD,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
+ import { randfloat } from "../../../../math/utils/random/randfloat.js";
4
+ import { randint } from "../../../../math/utils/random/randint.js";
5
+ import { round } from "../../../../math/utils/round.js";
6
+ import { reifyAlgebraic, } from "../../../../tree/nodes/nodeConstructor.js";
7
+ import { ClosureType } from "../../../../tree/nodes/sets/closure.js";
8
+ import { IntervalNode } from "../../../../tree/nodes/sets/intervalNode.js";
9
+ import { coinFlip } from "../../../../utils/alea/coinFlip.js";
10
+ import { random } from "../../../../utils/alea/random.js";
11
+ import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
12
+ const getPropositions = (n, { answer }) => {
13
+ const propositions = [];
14
+ addValidProp(propositions, answer, "tex");
15
+ if (answer === "\\in") {
16
+ tryToAddWrongProp(propositions, "\\notin", "tex");
17
+ }
18
+ else {
19
+ tryToAddWrongProp(propositions, "\\in", "tex");
20
+ }
21
+ return shuffleProps(propositions, n);
22
+ };
23
+ const getAnswer = (identifiers) => {
24
+ const { a, interval } = identifiers;
25
+ const aNode = reifyAlgebraic(a);
26
+ const intervalNode = reifyAlgebraic(interval);
27
+ if (intervalNode instanceof IntervalNode) {
28
+ const aValue = aNode.evaluate();
29
+ const aMin = intervalNode.a.evaluate();
30
+ const aMax = intervalNode.b.evaluate();
31
+ const leftClosed = intervalNode.isLeftClosed();
32
+ const rightClosed = intervalNode.isRightClosed();
33
+ if ((aValue > aMin || (leftClosed && aValue === aMin)) &&
34
+ (aValue < aMax || (rightClosed && aValue === aMax))) {
35
+ return "\\in";
36
+ }
37
+ }
38
+ return "\\notin";
39
+ };
40
+ const getInstruction = (identifiers) => {
41
+ const { a, interval } = identifiers;
42
+ const aNode = reifyAlgebraic(a);
43
+ const intervalNode = reifyAlgebraic(interval);
44
+ return `Compléter par le bon symbole :
45
+
46
+
47
+ $$
48
+ ${aNode.toTex()} \\ \\ldots \\ ${intervalNode.toTex()}
49
+ $$`;
50
+ };
51
+ const getHint = (identifiers) => {
52
+ const { a, interval } = identifiers;
53
+ const aNode = reifyAlgebraic(a);
54
+ const intervalNode = reifyAlgebraic(interval);
55
+ return `Pour déterminer si $${aNode.toTex()}$ appartient à l'intervalle $${intervalNode.toTex()}$, il faut vérifier si cette valeur est comprise entre les bornes de l'intervalle.`;
56
+ };
57
+ const getCorrection = (identifiers) => {
58
+ const { a, interval } = identifiers;
59
+ const aNode = reifyAlgebraic(a);
60
+ const intervalNode = reifyAlgebraic(interval);
61
+ const aValue = aNode.evaluate();
62
+ const aMin = intervalNode.a.evaluate();
63
+ const aMax = intervalNode.b.evaluate();
64
+ const leftClosed = intervalNode.isLeftClosed();
65
+ const rightClosed = intervalNode.isRightClosed();
66
+ let minCondition, maxCondition;
67
+ if (leftClosed) {
68
+ minCondition = aValue >= aMin ? "vérifiée" : "non vérifiée";
69
+ }
70
+ else {
71
+ minCondition = aValue > aMin ? "vérifiée" : "non vérifiée";
72
+ }
73
+ if (rightClosed) {
74
+ maxCondition = aValue <= aMax ? "vérifiée" : "non vérifiée";
75
+ }
76
+ else {
77
+ maxCondition = aValue < aMax ? "vérifiée" : "non vérifiée";
78
+ }
79
+ const result = (aValue > aMin || (leftClosed && aValue === aMin)) &&
80
+ (aValue < aMax || (rightClosed && aValue === aMax));
81
+ return `Pour que le nombre $${aNode.toTex()}$ appartienne à l'intervalle $${intervalNode.toTex()}$, il faut qu'il soit ${leftClosed ? "supérieur ou égal" : "strictement supérieur"} à $${intervalNode.a.toTex()}$ et ${rightClosed ? "inférieur ou égal" : "strictement inférieur"} à $${intervalNode.b.toTex()}$.
82
+
83
+ Vérifions ces conditions :
84
+ - $${aNode.toTex()}$ ${leftClosed ? "$\\ge$" : "$>$"} $${intervalNode.a.toTex()}$ : condition ${minCondition}
85
+ - $${aNode.toTex()}$ ${rightClosed ? "$\\le$" : "$<$"} $${intervalNode.b.toTex()}$ : condition ${maxCondition}
86
+
87
+ ${result
88
+ ? `Les deux conditions sont vérifiées, donc $${aNode.toTex()} \\in ${intervalNode.toTex()}$.`
89
+ : `Au moins une condition n'est pas vérifiée, donc $${aNode.toTex()} \\notin ${intervalNode.toTex()}$.`}`;
90
+ };
91
+ const getKeys = (identifiers) => {
92
+ return [];
93
+ };
94
+ const isAnswerValid = (ans, { answer }) => {
95
+ try {
96
+ return ans === answer;
97
+ }
98
+ catch (err) {
99
+ return handleVEAError(err);
100
+ }
101
+ };
102
+ const getIsNumberInIntervalQuestion = (ops) => {
103
+ const lowerBound = coinFlip()
104
+ ? randint(-10, 10)
105
+ : round(randfloat(-10, 10, 2), 2);
106
+ const width = randint(1, 20);
107
+ const upperBound = round(lowerBound + width, 2);
108
+ const closures = [
109
+ ClosureType.FF,
110
+ ClosureType.FO,
111
+ ClosureType.OF,
112
+ ClosureType.OO,
113
+ ];
114
+ const closure = random(closures);
115
+ const isInside = coinFlip();
116
+ let a;
117
+ if (isInside) {
118
+ a = coinFlip()
119
+ ? randint(Math.ceil(lowerBound), Math.floor(upperBound) - 1)
120
+ : randfloat(lowerBound, upperBound, 2);
121
+ }
122
+ else {
123
+ if (coinFlip()) {
124
+ const outisde = [];
125
+ a = coinFlip()
126
+ ? randint(-20, Math.floor(lowerBound) - 1)
127
+ : randfloat(-20, lowerBound - 0.01, 2);
128
+ outisde.push(a);
129
+ a = coinFlip()
130
+ ? randint(Math.ceil(upperBound) + 1, 20)
131
+ : randfloat(upperBound + 0.01, 20, 2);
132
+ outisde.push(a);
133
+ a = random(outisde);
134
+ }
135
+ else {
136
+ a = coinFlip() ? lowerBound : upperBound;
137
+ }
138
+ }
139
+ const interval = new IntervalNode(lowerBound.toTree(), upperBound.toTree(), closure);
140
+ const identifiers = {
141
+ a: a.toTree().toIdentifiers(),
142
+ interval: interval.toIdentifiers(),
143
+ };
144
+ return getQuestionFromIdentifiers(identifiers);
145
+ };
146
+ const getQuestionFromIdentifiers = (identifiers) => {
147
+ return {
148
+ answer: getAnswer(identifiers),
149
+ instruction: getInstruction(identifiers),
150
+ keys: getKeys(identifiers),
151
+ answerFormat: "tex",
152
+ identifiers,
153
+ hint: getHint(identifiers),
154
+ correction: getCorrection(identifiers),
155
+ };
156
+ };
157
+ export const isNumberInInterval = {
158
+ id: "isNumberInInterval",
159
+ label: "Appartenance d'un nombre à un intervalle",
160
+ isSingleStep: true,
161
+ generator: (nb, opts) => getDistinctQuestions(() => getIsNumberInIntervalQuestion(opts), nb),
162
+ qcmTimer: 60,
163
+ freeTimer: 60,
164
+ getPropositions,
165
+ isAnswerValid,
166
+ subject: "Mathématiques",
167
+ getInstruction,
168
+ getHint,
169
+ getCorrection,
170
+ getAnswer,
171
+ getQuestionFromIdentifiers,
172
+ hasHintAndCorrection: true,
173
+ answerType: "QCU",
174
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"simpifySquareRoot.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/simpifySquareRoot.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,QAAQ,EAcT,MAAM,mBAAmB,CAAC;AAE3B,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAwGF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAapD,CAAC"}
1
+ {"version":3,"file":"simpifySquareRoot.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/simpifySquareRoot.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,QAAQ,EAcT,MAAM,mBAAmB,CAAC;AAE3B,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAwGF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAcpD,CAAC"}
@@ -110,4 +110,5 @@ export const simplifySquareRoot = {
110
110
  subject: "Mathématiques",
111
111
  getQuestionFromIdentifiers,
112
112
  hasHintAndCorrection: true,
113
+ shouldHaveCalculator: false,
113
114
  };
@@ -1 +1 @@
1
- {"version":3,"file":"squareRootIdentities.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootIdentities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAyBrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsUF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CActD,CAAC"}
1
+ {"version":3,"file":"squareRootIdentities.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootIdentities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAyBrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAsUF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAetD,CAAC"}
@@ -248,4 +248,5 @@ export const squareRootIdentities = {
248
248
  subject: "Mathématiques",
249
249
  getQuestionFromIdentifiers,
250
250
  hasHintAndCorrection: true,
251
+ shouldHaveCalculator: false,
251
252
  };
@@ -1 +1 @@
1
- {"version":3,"file":"squareRootsDistributivity.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootsDistributivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAgBrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkHF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAc3D,CAAC"}
1
+ {"version":3,"file":"squareRootsDistributivity.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootsDistributivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAgBrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkHF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAe3D,CAAC"}
@@ -106,4 +106,5 @@ export const squareRootsDistributivity = {
106
106
  subject: "Mathématiques",
107
107
  getQuestionFromIdentifiers,
108
108
  hasHintAndCorrection: true,
109
+ shouldHaveCalculator: false,
109
110
  };
@@ -1 +1 @@
1
- {"version":3,"file":"squareRootsFractions.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootsFractions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA+GF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAgBtD,CAAC"}
1
+ {"version":3,"file":"squareRootsFractions.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/squareRoots/squareRootsFractions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA+GF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAiBtD,CAAC"}