math-exercises 3.0.75 → 3.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/exercises/math/calcul/arithmetics/calculateDistanceBetweenNumbers.d.ts +8 -0
- package/lib/exercises/math/calcul/arithmetics/calculateDistanceBetweenNumbers.d.ts.map +1 -0
- package/lib/exercises/math/calcul/arithmetics/calculateDistanceBetweenNumbers.js +102 -0
- package/lib/exercises/math/calcul/arithmetics/compareInverseValues.d.ts +10 -0
- package/lib/exercises/math/calcul/arithmetics/compareInverseValues.d.ts.map +1 -0
- package/lib/exercises/math/calcul/arithmetics/compareInverseValues.js +136 -0
- package/lib/exercises/math/calcul/arithmetics/compareSquaredValues.d.ts +9 -0
- package/lib/exercises/math/calcul/arithmetics/compareSquaredValues.d.ts.map +1 -0
- package/lib/exercises/math/calcul/arithmetics/compareSquaredValues.js +143 -0
- package/lib/exercises/math/calcul/arithmetics/index.d.ts +3 -0
- package/lib/exercises/math/calcul/arithmetics/index.d.ts.map +1 -1
- package/lib/exercises/math/calcul/arithmetics/index.js +3 -0
- package/lib/exercises/math/calcul/sign/index.d.ts +1 -0
- package/lib/exercises/math/calcul/sign/index.d.ts.map +1 -1
- package/lib/exercises/math/calcul/sign/index.js +1 -0
- package/lib/exercises/math/calcul/sign/inverseOrOpposite.d.ts +8 -0
- package/lib/exercises/math/calcul/sign/inverseOrOpposite.d.ts.map +1 -0
- package/lib/exercises/math/calcul/sign/inverseOrOpposite.js +89 -0
- package/lib/exercises/math/functions/cube/compareCubeValues.d.ts +8 -0
- package/lib/exercises/math/functions/cube/compareCubeValues.d.ts.map +1 -0
- package/lib/exercises/math/functions/cube/compareCubeValues.js +113 -0
- package/lib/exercises/math/functions/cube/index.d.ts +1 -0
- package/lib/exercises/math/functions/cube/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/cube/index.js +1 -0
- package/lib/exercises/math/functions/index.d.ts +1 -0
- package/lib/exercises/math/functions/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/index.js +1 -0
- package/lib/exercises/math/functions/parity/parityFromGraph.d.ts.map +1 -1
- package/lib/exercises/math/functions/parity/parityFromGraph.js +16 -0
- package/lib/exercises/math/functions/sqrt/compareSqrtValues.d.ts +8 -0
- package/lib/exercises/math/functions/sqrt/compareSqrtValues.d.ts.map +1 -0
- package/lib/exercises/math/functions/sqrt/compareSqrtValues.js +83 -0
- package/lib/exercises/math/functions/sqrt/index.d.ts +2 -0
- package/lib/exercises/math/functions/sqrt/index.d.ts.map +1 -0
- package/lib/exercises/math/functions/sqrt/index.js +1 -0
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnLine.d.ts.map +1 -1
- package/lib/exercises/math/geometry/cartesian/placeAbscissOnLine.js +26 -1
- package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.d.ts.map +1 -1
- package/lib/exercises/math/geometry/euclidian/pythagoreOrThales.js +47 -13
- package/lib/exercises/math/geometry/lines/linesRelativePositions.d.ts.map +1 -1
- package/lib/exercises/math/geometry/lines/linesRelativePositions.js +29 -5
- package/lib/exercises/math/probaStat/calculateMeanFromFrequencies.d.ts +8 -0
- package/lib/exercises/math/probaStat/calculateMeanFromFrequencies.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/calculateMeanFromFrequencies.js +108 -0
- package/lib/exercises/math/probaStat/getComplementaryProbability.d.ts +7 -0
- package/lib/exercises/math/probaStat/getComplementaryProbability.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/getComplementaryProbability.js +90 -0
- package/lib/exercises/math/probaStat/getMissingProbabilityValue.d.ts +9 -0
- package/lib/exercises/math/probaStat/getMissingProbabilityValue.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/getMissingProbabilityValue.js +109 -0
- package/lib/exercises/math/probaStat/index.d.ts +4 -0
- package/lib/exercises/math/probaStat/index.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/index.js +4 -0
- package/lib/exercises/math/probaStat/probaFromTableNoContext.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/probaFromTableNoContext.js +1 -1
- package/lib/exercises/math/probaStat/probaFromTableWithContext.js +87 -127
- package/lib/exercises/math/probaStat/unionIntersectionProba.d.ts +11 -0
- package/lib/exercises/math/probaStat/unionIntersectionProba.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/unionIntersectionProba.js +164 -0
- package/lib/exercises/math/python/conditionIf.d.ts.map +1 -1
- package/lib/exercises/math/python/conditionIf.js +32 -1
- package/lib/exercises/math/python/conditionIfElifElse.d.ts +9 -0
- package/lib/exercises/math/python/conditionIfElifElse.d.ts.map +1 -0
- package/lib/exercises/math/python/conditionIfElifElse.js +121 -0
- package/lib/exercises/math/python/conditionIfElse.d.ts +10 -0
- package/lib/exercises/math/python/conditionIfElse.d.ts.map +1 -0
- package/lib/exercises/math/python/conditionIfElse.js +119 -0
- package/lib/exercises/math/python/forLoop.d.ts.map +1 -1
- package/lib/exercises/math/python/forLoop.js +28 -0
- package/lib/exercises/math/python/inOutCalcul.d.ts.map +1 -1
- package/lib/exercises/math/python/inOutCalcul.js +31 -4
- package/lib/exercises/math/python/index.d.ts +3 -0
- package/lib/exercises/math/python/index.d.ts.map +1 -1
- package/lib/exercises/math/python/index.js +3 -0
- package/lib/exercises/math/python/pyForLoop1Exercise.d.ts.map +1 -1
- package/lib/exercises/math/python/pyForLoop1Exercise.js +29 -0
- package/lib/exercises/math/python/pyNestedForLoopExercise.d.ts.map +1 -1
- package/lib/exercises/math/python/pyNestedForLoopExercise.js +26 -10
- package/lib/exercises/math/python/pyWhileLoop1Exercise.d.ts +0 -1
- package/lib/exercises/math/python/pyWhileLoop1Exercise.d.ts.map +1 -1
- package/lib/exercises/math/python/pyWhileLoop1Exercise.js +54 -30
- package/lib/exercises/math/python/pythonFunctionTrinom.d.ts.map +1 -1
- package/lib/exercises/math/python/pythonFunctionTrinom.js +24 -2
- package/lib/exercises/math/python/variableAffectation.d.ts +10 -0
- package/lib/exercises/math/python/variableAffectation.d.ts.map +1 -0
- package/lib/exercises/math/python/variableAffectation.js +144 -0
- package/lib/exercises/math/python/whileLoop.d.ts +0 -1
- package/lib/exercises/math/python/whileLoop.d.ts.map +1 -1
- package/lib/exercises/math/python/whileLoop.js +37 -6
- package/lib/exercises/math/python/whileLoopCount.js +3 -3
- package/lib/exercises/math/sequences/explicitFormulaUsage.js +3 -3
- package/lib/exercises/math/sequences/genericSequenceVariations.js +2 -2
- package/lib/exercises/math/sets/index.d.ts +1 -0
- package/lib/exercises/math/sets/index.d.ts.map +1 -1
- package/lib/exercises/math/sets/index.js +1 -0
- package/lib/exercises/math/sets/nameOfNumberSets.d.ts +8 -0
- package/lib/exercises/math/sets/nameOfNumberSets.d.ts.map +1 -0
- package/lib/exercises/math/sets/nameOfNumberSets.js +125 -0
- package/lib/index.d.ts +55 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/latexTester.d.ts.map +1 -1
- package/lib/latexTester.js +24 -7
- package/lib/math/polynomials/affine.d.ts +2 -1
- package/lib/math/polynomials/affine.d.ts.map +1 -1
- package/lib/math/polynomials/affine.js +5 -2
- package/lib/tree/nodes/functions/oppositeNode.d.ts +2 -2
- package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/oppositeNode.js +4 -2
- package/lib/tree/nodes/node.d.ts +2 -0
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/fractionNode.js +8 -7
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
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 { power } from "../../../../tree/nodes/operators/powerNode.js";
|
|
6
|
+
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
7
|
+
const getPropositions = (n, { answer, a, b }) => {
|
|
8
|
+
const propositions = [];
|
|
9
|
+
addValidProp(propositions, answer);
|
|
10
|
+
tryToAddWrongProp(propositions, `>`);
|
|
11
|
+
tryToAddWrongProp(propositions, `<`);
|
|
12
|
+
tryToAddWrongProp(propositions, `=`);
|
|
13
|
+
return shuffleProps(propositions, n);
|
|
14
|
+
};
|
|
15
|
+
const getAnswer = (identifiers) => {
|
|
16
|
+
const { a, b } = identifiers;
|
|
17
|
+
if (a > b) {
|
|
18
|
+
return `>`;
|
|
19
|
+
}
|
|
20
|
+
else if (a < b) {
|
|
21
|
+
return `<`;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return `=`;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const getInstruction = (identifiers) => {
|
|
28
|
+
const { a, b } = identifiers;
|
|
29
|
+
return `Compléter par le bon symbole :
|
|
30
|
+
|
|
31
|
+
$$
|
|
32
|
+
${power(a, 3).toTex()}\\ \\ldots \\ ${power(b, 3).toTex()}
|
|
33
|
+
$$`;
|
|
34
|
+
};
|
|
35
|
+
const getHint = (identifiers) => {
|
|
36
|
+
return `La fonction cube conserve l'ordre : pour tous $a$ et $b$ réels,
|
|
37
|
+
|
|
38
|
+
- $a^3 > b^3$ si et seulement si $a > b$ ;
|
|
39
|
+
|
|
40
|
+
- $a^3 < b^3$ si et seulement si $a < b$ ;
|
|
41
|
+
|
|
42
|
+
- $a^3 = b^3$ si et seulement si $a = b$.`;
|
|
43
|
+
};
|
|
44
|
+
const getCorrection = (identifiers) => {
|
|
45
|
+
const { a, b } = identifiers;
|
|
46
|
+
const signe = a < b ? "<" : a > b ? ">" : "=";
|
|
47
|
+
return `La fonction cube conserve l'ordre.
|
|
48
|
+
|
|
49
|
+
Puisque $${a.frenchify()} ${signe} ${b.frenchify()}$, alors $${power(a, 3).toTex()} ${getAnswer(identifiers)} ${power(b, 3).toTex()}$.`;
|
|
50
|
+
};
|
|
51
|
+
const getCompareCubeValuesQuestion = (ops) => {
|
|
52
|
+
const randomNumberOrDecimal = (min, max, excl) => {
|
|
53
|
+
const isDecimal = coinFlip();
|
|
54
|
+
return isDecimal ? randfloat(min, max, 2, excl) : randint(min, max, excl);
|
|
55
|
+
};
|
|
56
|
+
let a = null;
|
|
57
|
+
let b = null;
|
|
58
|
+
const bound = 10;
|
|
59
|
+
switch (randint(0, 3)) {
|
|
60
|
+
case 0:
|
|
61
|
+
a = randomNumberOrDecimal(0, bound);
|
|
62
|
+
b = randomNumberOrDecimal(0, bound, [a]);
|
|
63
|
+
break;
|
|
64
|
+
case 1:
|
|
65
|
+
a = randomNumberOrDecimal(-bound, 0);
|
|
66
|
+
b = randomNumberOrDecimal(-bound, 0, [a]);
|
|
67
|
+
break;
|
|
68
|
+
case 2:
|
|
69
|
+
default:
|
|
70
|
+
if (coinFlip()) {
|
|
71
|
+
a = randomNumberOrDecimal(-bound, 0);
|
|
72
|
+
b = randomNumberOrDecimal(0, bound);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
a = randomNumberOrDecimal(0, bound);
|
|
76
|
+
b = randomNumberOrDecimal(-bound, 0);
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
const identifiers = {
|
|
81
|
+
a,
|
|
82
|
+
b,
|
|
83
|
+
};
|
|
84
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
85
|
+
};
|
|
86
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
87
|
+
return {
|
|
88
|
+
answer: getAnswer(identifiers),
|
|
89
|
+
instruction: getInstruction(identifiers),
|
|
90
|
+
keys: [],
|
|
91
|
+
answerFormat: "tex",
|
|
92
|
+
identifiers,
|
|
93
|
+
hint: getHint(identifiers),
|
|
94
|
+
correction: getCorrection(identifiers),
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
export const compareCubeValues = {
|
|
98
|
+
id: "compareCubeValues",
|
|
99
|
+
label: "Comparer des nombres élevés au cube",
|
|
100
|
+
answerType: "QCU",
|
|
101
|
+
isSingleStep: true,
|
|
102
|
+
generator: (nb, opts) => getDistinctQuestions(() => getCompareCubeValuesQuestion(opts), nb),
|
|
103
|
+
qcmTimer: 60,
|
|
104
|
+
freeTimer: 60,
|
|
105
|
+
getPropositions,
|
|
106
|
+
subject: "Mathématiques",
|
|
107
|
+
getInstruction,
|
|
108
|
+
getHint,
|
|
109
|
+
getCorrection,
|
|
110
|
+
getAnswer,
|
|
111
|
+
getQuestionFromIdentifiers,
|
|
112
|
+
hasHintAndCorrection: true,
|
|
113
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/cube/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/cube/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/functions/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/functions/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parityFromGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/parity/parityFromGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"parityFromGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/parity/parityFromGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAcrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAmJF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAcjD,CAAC"}
|
|
@@ -79,6 +79,19 @@ const getParityFromGraphQuestion = () => {
|
|
|
79
79
|
const identifiers = { type, fctCmd: fct };
|
|
80
80
|
return getQuestionFromIdentifiers(identifiers);
|
|
81
81
|
};
|
|
82
|
+
const getHint = (identifiers) => {
|
|
83
|
+
return `Une fonction $f$ est paire si sa courbe représentative est symétrique par rapport à l'axe des ordonnées.
|
|
84
|
+
|
|
85
|
+
Une fonction $f$ est impaire si sa courbe représentative est symétrique par rapport à l'origine du repère.`;
|
|
86
|
+
};
|
|
87
|
+
const getCorrection = (identifiers) => {
|
|
88
|
+
const type = identifiers.type;
|
|
89
|
+
if (type === "even")
|
|
90
|
+
return `La courbe représentative de $f$ est symétrique par rapport à l'axe des ordonnées : la fonction $f$ est donc paire.`;
|
|
91
|
+
if (type === "uneven")
|
|
92
|
+
return `La courbe représentative de $f$ est symétrique par rapport à l'origine du repère : la fonction $f$ est donc impaire.`;
|
|
93
|
+
return `La courbe représentative de $f$ n'est ni symétrique par rapport à l'axe des ordonnées, ni symétrique par rapport à l'origine du repère : la fonction $f$ n'est donc ni paire, ni impaire.`;
|
|
94
|
+
};
|
|
82
95
|
const getInstruction = (identifiers) => {
|
|
83
96
|
return `La fonction $f$ représentée ci-dessous est-elle paire, impaire, ou ni paire ni impaire ?`;
|
|
84
97
|
};
|
|
@@ -113,6 +126,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
113
126
|
ggbOptions: getGGBOptions(identifiers),
|
|
114
127
|
answerFormat: "tex",
|
|
115
128
|
identifiers,
|
|
129
|
+
hint: getHint(identifiers),
|
|
130
|
+
correction: getCorrection(identifiers),
|
|
116
131
|
};
|
|
117
132
|
return question;
|
|
118
133
|
};
|
|
@@ -136,5 +151,6 @@ export const parityFromGraph = {
|
|
|
136
151
|
answerType: "QCU",
|
|
137
152
|
hasGeogebra: true,
|
|
138
153
|
subject: "Mathématiques",
|
|
154
|
+
hasHintAndCorrection: true,
|
|
139
155
|
getQuestionFromIdentifiers,
|
|
140
156
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compareSqrtValues.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/sqrt/compareSqrtValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAOrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA2EF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAiBnD,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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 { sqrt } from "../../../../tree/nodes/functions/sqrtNode.js";
|
|
6
|
+
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
7
|
+
const getPropositions = (n, { answer, a, b }) => {
|
|
8
|
+
const propositions = [];
|
|
9
|
+
addValidProp(propositions, answer);
|
|
10
|
+
tryToAddWrongProp(propositions, `>`);
|
|
11
|
+
tryToAddWrongProp(propositions, `<`);
|
|
12
|
+
tryToAddWrongProp(propositions, `=`);
|
|
13
|
+
return shuffleProps(propositions, n);
|
|
14
|
+
};
|
|
15
|
+
const getAnswer = (identifiers) => {
|
|
16
|
+
const { a, b } = identifiers;
|
|
17
|
+
const signe = a > b ? ">" : a < b ? "<" : "=";
|
|
18
|
+
return `${signe}`;
|
|
19
|
+
};
|
|
20
|
+
const getInstruction = (identifiers) => {
|
|
21
|
+
const { a, b } = identifiers;
|
|
22
|
+
return `Compléter par le bon symbole :
|
|
23
|
+
|
|
24
|
+
$$
|
|
25
|
+
${sqrt(a).toTex()} \\ \\ldots \\ ${sqrt(b).toTex()}
|
|
26
|
+
$$`;
|
|
27
|
+
};
|
|
28
|
+
const getHint = (identifiers) => {
|
|
29
|
+
return `La racine carré conserve l'ordre : pour tous $a$ et $b$ positifs,
|
|
30
|
+
|
|
31
|
+
- $a > b \\iff ${sqrt("a").toTex()} > ${sqrt("b").toTex()}$
|
|
32
|
+
- $a < b \\iff ${sqrt("a").toTex()} < ${sqrt("b").toTex()}$
|
|
33
|
+
- $a = b \\iff ${sqrt("a").toTex()} = ${sqrt("b").toTex()}$`;
|
|
34
|
+
};
|
|
35
|
+
const getCorrection = (identifiers) => {
|
|
36
|
+
const { a, b } = identifiers;
|
|
37
|
+
const signe = a > b ? ">" : a < b ? "<" : "=";
|
|
38
|
+
return `La racine carrée conserve l'ordre.
|
|
39
|
+
|
|
40
|
+
Puisque $${a.frenchify()} ${signe} ${b.frenchify()}$, alors $${sqrt(a).toTex()} ${signe} ${sqrt(b).toTex()}$.`;
|
|
41
|
+
};
|
|
42
|
+
const getCompareSqrtValuesQuestion = (ops) => {
|
|
43
|
+
const randomNumberOrDecimal = (min, max, excl) => {
|
|
44
|
+
const isDecimal = coinFlip();
|
|
45
|
+
return isDecimal ? randfloat(min, max, 2, excl) : randint(min, max, excl);
|
|
46
|
+
};
|
|
47
|
+
const bound = 10;
|
|
48
|
+
const a = randomNumberOrDecimal(0, bound);
|
|
49
|
+
const b = randomNumberOrDecimal(0, bound, [a]);
|
|
50
|
+
const identifiers = {
|
|
51
|
+
a,
|
|
52
|
+
b,
|
|
53
|
+
};
|
|
54
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
55
|
+
};
|
|
56
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
57
|
+
return {
|
|
58
|
+
answer: getAnswer(identifiers),
|
|
59
|
+
instruction: getInstruction(identifiers),
|
|
60
|
+
keys: [],
|
|
61
|
+
answerFormat: "tex",
|
|
62
|
+
identifiers,
|
|
63
|
+
hint: getHint(identifiers),
|
|
64
|
+
correction: getCorrection(identifiers),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
export const compareSqrtValues = {
|
|
68
|
+
id: "compareSqrtValues",
|
|
69
|
+
label: "Comparer des racines carrés",
|
|
70
|
+
answerType: "QCU",
|
|
71
|
+
isSingleStep: true,
|
|
72
|
+
generator: (nb, opts) => getDistinctQuestions(() => getCompareSqrtValuesQuestion(opts), nb),
|
|
73
|
+
qcmTimer: 60,
|
|
74
|
+
freeTimer: 60,
|
|
75
|
+
getPropositions,
|
|
76
|
+
subject: "Mathématiques",
|
|
77
|
+
getInstruction,
|
|
78
|
+
getHint,
|
|
79
|
+
getCorrection,
|
|
80
|
+
getAnswer,
|
|
81
|
+
getQuestionFromIdentifiers,
|
|
82
|
+
hasHintAndCorrection: true,
|
|
83
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/sqrt/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./compareSqrtValues.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeAbscissOnLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/placeAbscissOnLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"placeAbscissOnLine.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/cartesian/placeAbscissOnLine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAa1D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsKF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAgBpD,CAAC"}
|
|
@@ -9,8 +9,10 @@ import { randfloat } from "../../../../math/utils/random/randfloat.js";
|
|
|
9
9
|
import { randint } from "../../../../math/utils/random/randint.js";
|
|
10
10
|
import { round } from "../../../../math/utils/round.js";
|
|
11
11
|
import { FractionNode } from "../../../../tree/nodes/operators/fractionNode.js";
|
|
12
|
-
import { MultiplyNode } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
12
|
+
import { multiply, MultiplyNode, } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
13
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
13
14
|
import { random } from "../../../../utils/alea/random.js";
|
|
15
|
+
import { pluralize } from "../../../../utils/strings/pluralize.js";
|
|
14
16
|
const getInstruction = ({ abscissTex }) => {
|
|
15
17
|
return `Placer le point d'abscisse $${abscissTex}$ sur la droite graduée ci-dessous :`;
|
|
16
18
|
};
|
|
@@ -108,6 +110,28 @@ const getPlaceAbscissOnLineQuestion = () => {
|
|
|
108
110
|
};
|
|
109
111
|
return getQuestionFromIdentifiers(identifiers);
|
|
110
112
|
};
|
|
113
|
+
const getHint = (identifiers) => {
|
|
114
|
+
const { absciss, axisUnit, oneUnitTex, abscissType, abscissTex, coeff } = identifiers;
|
|
115
|
+
return `Il faut compter le nombre de graduations entre les points $O$ et $A$. Puis on utilise le fait qu'une graduation vaut $${oneUnitTex}$.
|
|
116
|
+
|
|
117
|
+
D'autre part, si $A$ est placé à gauche de $O$, alors son abscisse est négative.`;
|
|
118
|
+
};
|
|
119
|
+
const getCorrection = (identifiers) => {
|
|
120
|
+
const { absciss, axisUnit, oneUnitTex, abscissType, abscissTex, coeff } = identifiers;
|
|
121
|
+
const absCoeff = Math.abs(coeff);
|
|
122
|
+
const oneUnitNode = parseAlgebraic(oneUnitTex);
|
|
123
|
+
return `Il y a $${absCoeff}$ ${pluralize("graduation", absCoeff)} entre $O$ et $A$. Puisqu'une graduation vaut $${oneUnitTex}$, cela représente un écart de :
|
|
124
|
+
|
|
125
|
+
$$
|
|
126
|
+
${multiply(absCoeff, oneUnitNode).toTex({
|
|
127
|
+
forceNoSimplification: true,
|
|
128
|
+
})} = ${multiply(absCoeff, oneUnitNode).simplify().toTex()}
|
|
129
|
+
$$
|
|
130
|
+
|
|
131
|
+
${coeff < 0
|
|
132
|
+
? `Puisque $A$ est placé à gauche du point $O$, son abscisse est négative. L'abscisse du point $A$ est donc $${abscissTex}$.`
|
|
133
|
+
: `L'abscisse du point $A$ est donc $${abscissTex}$.`}`;
|
|
134
|
+
};
|
|
111
135
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
112
136
|
const question = {
|
|
113
137
|
ggbAnswer: getGGBAnswer(identifiers),
|
|
@@ -133,4 +157,5 @@ export const placeAbscissOnLine = {
|
|
|
133
157
|
getStudentGGBOptions,
|
|
134
158
|
answerType: "GGB",
|
|
135
159
|
getQuestionFromIdentifiers,
|
|
160
|
+
// hasHintAndCorrection: true,
|
|
136
161
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pythagoreOrThales.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/euclidian/pythagoreOrThales.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAkBtC,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IAEzB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CAQnB,CAAC;
|
|
1
|
+
{"version":3,"file":"pythagoreOrThales.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/euclidian/pythagoreOrThales.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAkBtC,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IAEzB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CAQnB,CAAC;AA4RF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAuBnD,CAAC"}
|
|
@@ -30,9 +30,26 @@ const getAnswer = (identifiers) => {
|
|
|
30
30
|
: "La réciproque du théorème de Thalès";
|
|
31
31
|
};
|
|
32
32
|
const getInstruction = (identifiers) => {
|
|
33
|
-
const { isAskingLength, pointsIdentifiers, isSegmentHeight } = identifiers;
|
|
33
|
+
const { isAskingLength, pointsIdentifiers, lengths, isSegmentHeight } = identifiers;
|
|
34
34
|
const points = pointsIdentifiers.map((p) => PointConstructor.fromIdentifiers(p));
|
|
35
35
|
let instruction = ``;
|
|
36
|
+
let segments;
|
|
37
|
+
if (isSegmentHeight) {
|
|
38
|
+
const withoutA = points.slice(1);
|
|
39
|
+
segments = withoutA.map((p, i) => new Segment(p, withoutA[(i + 1) % 3], {
|
|
40
|
+
lengthNode: new NumberNode(lengths[i]),
|
|
41
|
+
}));
|
|
42
|
+
segments.push(new Segment(points[3], points[0], {
|
|
43
|
+
lengthNode: new NumberNode(lengths[3]),
|
|
44
|
+
}));
|
|
45
|
+
segments.push(new Segment(points[0], points[1]));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
segments = points.map((p, i) => new Segment(p, points[(i + 1) % points.length], {
|
|
49
|
+
lengthNode: new NumberNode(lengths[i]),
|
|
50
|
+
}));
|
|
51
|
+
segments.push(new Segment(points[1], points[3]));
|
|
52
|
+
}
|
|
36
53
|
if (isSegmentHeight) {
|
|
37
54
|
if (isAskingLength) {
|
|
38
55
|
instruction = `calculer la longueur $${points[0].name}${points[1].name}$`;
|
|
@@ -53,6 +70,11 @@ const getInstruction = (identifiers) => {
|
|
|
53
70
|
? `, où les droites $\\left(${points[1].name}${points[3].name}\\right)$ et $\\left(${points[0].name}${points[4].name}\\right)$ sont parallèles.`
|
|
54
71
|
: "."}
|
|
55
72
|
|
|
73
|
+
On connaît les longueurs suivantes : $${segments
|
|
74
|
+
.slice(0, segments.length - 1)
|
|
75
|
+
.map((e) => e.toLengthTex())
|
|
76
|
+
.join("\\ ; \\ ")}$.
|
|
77
|
+
|
|
56
78
|
Pour ${instruction}, il faut utiliser... `;
|
|
57
79
|
};
|
|
58
80
|
const getHint = (identifiers) => {
|
|
@@ -69,22 +91,32 @@ $$
|
|
|
69
91
|
};
|
|
70
92
|
const getCorrection = (identifiers) => {
|
|
71
93
|
const { isAskingLength, pointsIdentifiers, isSegmentHeight } = identifiers;
|
|
72
|
-
const points = pointsIdentifiers.map((p) => PointConstructor.fromIdentifiers(p));
|
|
73
94
|
if (isSegmentHeight) {
|
|
74
95
|
if (isAskingLength) {
|
|
75
|
-
|
|
76
|
-
|
|
96
|
+
return `Il faut utiliser le théorème de Pythagore : das un triangle rectangle, le carré de l'hypoténuse est égal à la somme des carrés des deux autres côtés.
|
|
97
|
+
|
|
98
|
+
On applique ce théorème dans le triangle $ABD$ rectangle en $D$. En effet, d'après le théorème de Pythagore, on a $AB^2 = AD^2 + DB^2$. Puisqu'on connaît les longueurs $AD$ et $DB$, on peut en déduire la longueur $AB$.`;
|
|
77
99
|
}
|
|
78
100
|
else {
|
|
79
|
-
|
|
101
|
+
return `Il faut utiliser la réciproque du théorème de Pythagore : si dans un triangle, le carré de l'hypoténuse est égal à la somme des carrés des deux autres côtés, alors le triangle est rectangle.
|
|
102
|
+
|
|
103
|
+
On applique cette réciproque dans le triangle $BCD$. En effet, on connaît les longueurs des trois côtés. Il suffit donc de montrer que $BC^2 = BD^2 + CD^2$.`;
|
|
80
104
|
}
|
|
81
105
|
}
|
|
82
106
|
else {
|
|
83
107
|
if (isAskingLength) {
|
|
84
|
-
|
|
108
|
+
return `Il faut utiliser le théorème de Thalès : dans le triangle $ABC$, si les droites $(DE)$ et $(BC)$ sont parallèles, alors :
|
|
109
|
+
|
|
110
|
+
$$
|
|
111
|
+
\\frac{AD}{AB}=\\frac{AE}{AC}=\\frac{DE}{BC}
|
|
112
|
+
$$
|
|
113
|
+
|
|
114
|
+
On peut donc calculer $DE$ en remplaçant les longueurs par les valeurs données dans l'énoncé.`;
|
|
85
115
|
}
|
|
86
116
|
else {
|
|
87
|
-
|
|
117
|
+
return `Il faut utiliser la réciproque du théorème de Thalès : dans le triangle $ABC$, si $\\frac{DB}{AB}=\\frac{EB}{CB}$, alors les droites $(DE)$ et $(AC)$ sont parallèles.
|
|
118
|
+
|
|
119
|
+
Il suffit donc de prouver que $\\frac{DB}{AB} = \\frac{EB}{CB}$, en remplaçant les longueurs par les valeurs données dans l'énoncé.`;
|
|
88
120
|
}
|
|
89
121
|
}
|
|
90
122
|
return ``;
|
|
@@ -112,9 +144,11 @@ const getGGBOptions = (identifiers) => {
|
|
|
112
144
|
const commands = [
|
|
113
145
|
...points.flatMap((p) => p.toGGBCommand()),
|
|
114
146
|
...segments.flatMap((s, i) => s.toGGBCommands(false, { color: "grey", thickness: 3 })),
|
|
115
|
-
...segments
|
|
116
|
-
|
|
117
|
-
|
|
147
|
+
// ...segments
|
|
148
|
+
// .slice(0, segments.length - 1)
|
|
149
|
+
// .flatMap((s, i) =>
|
|
150
|
+
// s.getFitCaptionCommands({ size: "scriptsize", color: "red" }),
|
|
151
|
+
// ),
|
|
118
152
|
...(isAskingLength && isSegmentHeight
|
|
119
153
|
? new Angle([points[1], points[3], points[0]]).toCommands()
|
|
120
154
|
: []),
|
|
@@ -203,8 +237,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
203
237
|
keys: getKeys(identifiers),
|
|
204
238
|
answerFormat: "raw",
|
|
205
239
|
identifiers,
|
|
206
|
-
|
|
207
|
-
|
|
240
|
+
hint: getHint(identifiers),
|
|
241
|
+
correction: getCorrection(identifiers),
|
|
208
242
|
ggbOptions: getGGBOptions(identifiers),
|
|
209
243
|
};
|
|
210
244
|
return question;
|
|
@@ -230,7 +264,7 @@ export const pythagoreOrThales = {
|
|
|
230
264
|
shouldSpreadPropositions: true,
|
|
231
265
|
},
|
|
232
266
|
getQuestionFromIdentifiers,
|
|
233
|
-
|
|
267
|
+
hasHintAndCorrection: true,
|
|
234
268
|
};
|
|
235
269
|
const getSubTriangle = ({ triangle, insidePointsNames, ratio, isPapillon, }) => {
|
|
236
270
|
const [A, B, C] = triangle.points;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linesRelativePositions.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/linesRelativePositions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAE/D,WAAW,EAAE,MAAM,CAAC;CAKrB,CAAC;
|
|
1
|
+
{"version":3,"file":"linesRelativePositions.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/lines/linesRelativePositions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAE/D,WAAW,EAAE,MAAM,CAAC;CAKrB,CAAC;AAyKF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAqBxD,CAAC"}
|
|
@@ -25,6 +25,31 @@ const getAnswer = (identifiers) => {
|
|
|
25
25
|
return "sécantes mais non perpendiculaires";
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
|
+
const getHint = (identifiers) => {
|
|
29
|
+
return `Deux droites sont :
|
|
30
|
+
|
|
31
|
+
- perpendiculaires si leur intersection forme un angle droit ;
|
|
32
|
+
- sécantes mais non perpendiculaires si elles s'intersectent mais sans angle droit ;
|
|
33
|
+
- parallèles si elles n'ont pas de point d'intersection.`;
|
|
34
|
+
};
|
|
35
|
+
const getCorrection = (identifiers) => {
|
|
36
|
+
const { coupleAsked, lines } = identifiers;
|
|
37
|
+
const askedLines = coupleAsked === 0
|
|
38
|
+
? [lines[0], lines[4]]
|
|
39
|
+
: coupleAsked === 3
|
|
40
|
+
? [lines[2], lines[4]]
|
|
41
|
+
: [lines[coupleAsked], lines[coupleAsked + 1]];
|
|
42
|
+
const answer = getAnswer(identifiers);
|
|
43
|
+
if (answer === "parallèles")
|
|
44
|
+
return `Les droites $${askedLines[0].label}$ et $${askedLines[1].label}$ ne semblent pas avoir de point d'intersection : elles semblent donc parallèles.`;
|
|
45
|
+
if (answer === "perpendiculaires") {
|
|
46
|
+
`Les droites $${askedLines[0].label}$ et $${askedLines[1].label}$ ont un point d'intersection : elles sont donc sécantes. De plus, leur intersection semble former un angle droit : elles semblent donc perpendiculaires.`;
|
|
47
|
+
}
|
|
48
|
+
if (askedLines[1].label === "d_4") {
|
|
49
|
+
`Les droites $${askedLines[0].label}$ et $${askedLines[1].label}$ ont un point d'intersection : elles sont donc sécantes. De plus, elles ne semble pas perpendiculaires, car leur intersection ne semble pas former un angle droit.`;
|
|
50
|
+
}
|
|
51
|
+
return `Les droites $${askedLines[0].label}$ et $${askedLines[1].label}$ sont sécantes. En effet, même si on ne voit pas leur point d'intersection sur le graphique, on voit qu'elles ne sont pas parallèles, et qu'en poursuivant le tracé, elles finiront par s'intersecter.`;
|
|
52
|
+
};
|
|
28
53
|
const getInstruction = (identifiers) => {
|
|
29
54
|
const { coupleAsked, lines } = identifiers;
|
|
30
55
|
const askedLines = coupleAsked === 0
|
|
@@ -34,10 +59,8 @@ const getInstruction = (identifiers) => {
|
|
|
34
59
|
: [lines[coupleAsked], lines[coupleAsked + 1]];
|
|
35
60
|
return `On donne la figure ci-dessous.
|
|
36
61
|
|
|
37
|
-
$${askedLines[0].label}$ et $${askedLines[1].label}$ semblent...`;
|
|
62
|
+
Les droites $${askedLines[0].label}$ et $${askedLines[1].label}$ semblent...`;
|
|
38
63
|
};
|
|
39
|
-
// const getHint: GetHint<Identifiers> = (identifiers) => {};
|
|
40
|
-
// const getCorrection: GetCorrection<Identifiers> = (identifiers) => {};
|
|
41
64
|
const getGGBOptions = (identifiers) => {
|
|
42
65
|
const lines = identifiers.lines.map((d, i) => new Line(new Point(`A_${d.label}`, d.pointA[0], d.pointA[1]), new Point(`B_${d.label}`, d.pointB[0], d.pointB[1]), d.label));
|
|
43
66
|
const ggb = new GeogebraConstructor({
|
|
@@ -114,8 +137,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
114
137
|
keys: getKeys(identifiers),
|
|
115
138
|
answerFormat: "raw",
|
|
116
139
|
identifiers,
|
|
117
|
-
|
|
118
|
-
|
|
140
|
+
hint: getHint(identifiers),
|
|
141
|
+
correction: getCorrection(identifiers),
|
|
119
142
|
ggbOptions: getGGBOptions(identifiers),
|
|
120
143
|
};
|
|
121
144
|
return question;
|
|
@@ -139,4 +162,5 @@ export const linesRelativePositions = {
|
|
|
139
162
|
maxAllowedQuestions: 4,
|
|
140
163
|
answerType: "QCU",
|
|
141
164
|
getQuestionFromIdentifiers,
|
|
165
|
+
hasHintAndCorrection: true,
|
|
142
166
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Exercise } from "../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
xValues: number[];
|
|
4
|
+
yValues: number[];
|
|
5
|
+
};
|
|
6
|
+
export declare const calculateMeanFromFrequencies: Exercise<Identifiers>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=calculateMeanFromFrequencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateMeanFromFrequencies.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/probaStat/calculateMeanFromFrequencies.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAwGF,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,WAAW,CAoB9D,CAAC"}
|