math-exercises 3.0.100 → 3.0.102
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/whichMultipleAmI.js +1 -1
- package/lib/exercises/math/curve/sqrtCurvePoint.js +3 -3
- package/lib/exercises/math/dataRepresentations/barChartReading.d.ts +1 -1
- package/lib/exercises/math/dataRepresentations/barChartReading.js +1 -1
- package/lib/exercises/math/functions/basics/imageFunction.d.ts.map +1 -1
- package/lib/exercises/math/functions/basics/imageFunction.js +8 -8
- package/lib/exercises/math/functions/sqrt/compareSqrtValues.js +1 -1
- package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.d.ts.map +1 -1
- package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +41 -18
- package/lib/exercises/math/geometry/index.d.ts +1 -0
- package/lib/exercises/math/geometry/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/index.js +1 -0
- package/lib/exercises/math/geometry/optimisation/geometryExtremaReadingOnGraph.d.ts +8 -0
- package/lib/exercises/math/geometry/optimisation/geometryExtremaReadingOnGraph.d.ts.map +1 -0
- package/lib/exercises/math/geometry/optimisation/geometryExtremaReadingOnGraph.js +145 -0
- package/lib/exercises/math/geometry/optimisation/index.d.ts +4 -0
- package/lib/exercises/math/geometry/optimisation/index.d.ts.map +1 -0
- package/lib/exercises/math/geometry/optimisation/index.js +3 -0
- package/lib/exercises/math/geometry/optimisation/lengthIntervalOnPicture.d.ts +8 -0
- package/lib/exercises/math/geometry/optimisation/lengthIntervalOnPicture.d.ts.map +1 -0
- package/lib/exercises/math/geometry/optimisation/lengthIntervalOnPicture.js +93 -0
- package/lib/exercises/math/geometry/optimisation/lengthWithXOnPicture.d.ts +8 -0
- package/lib/exercises/math/geometry/optimisation/lengthWithXOnPicture.d.ts.map +1 -0
- package/lib/exercises/math/geometry/optimisation/lengthWithXOnPicture.js +99 -0
- package/lib/exercises/math/geometry/pythagore/index.d.ts +1 -0
- package/lib/exercises/math/geometry/pythagore/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/pythagore/index.js +1 -1
- package/lib/exercises/math/geometry/pythagore/triangleHeight.d.ts.map +1 -1
- package/lib/exercises/math/geometry/pythagore/triangleHeight.js +78 -32
- package/lib/exercises/math/geometry/vectors/constructions/traceOppositeVector.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/constructions/traceOppositeVector.js +31 -6
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorDifference.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorDifference.js +50 -10
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorMultiple.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorMultiple.js +39 -6
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorSum.d.ts.map +1 -1
- package/lib/exercises/math/geometry/vectors/constructions/traceVectorSum.js +44 -7
- package/lib/exercises/math/probaStat/events/describeEvent.js +1 -1
- package/lib/exercises/math/probaStat/events/eventNotation.js +1 -1
- package/lib/exercises/math/probaStat/randomVariable/randomVariableStandardDeviation.js +4 -4
- package/lib/exercises/math/probaStat/stats1var/cumulativeSum.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/getQuartileProportionQuestion.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.js +3 -3
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.js +22 -7
- package/lib/exercises/math/probaStat/stats1var/median.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/medianList.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.js +4 -4
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.js +4 -4
- package/lib/exercises/math/probaStat/unionIntersectionProba.js +1 -1
- package/lib/exercises/math/python/inOutCalcul.js +1 -1
- package/lib/exercises/math/python/index.d.ts +6 -0
- package/lib/exercises/math/python/index.d.ts.map +1 -1
- package/lib/exercises/math/python/index.js +6 -0
- package/lib/exercises/math/python/pythonForLoopInstructionCompletion.d.ts +9 -0
- package/lib/exercises/math/python/pythonForLoopInstructionCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonForLoopInstructionCompletion.js +129 -0
- package/lib/exercises/math/python/pythonIfStatementCompletion.d.ts +8 -0
- package/lib/exercises/math/python/pythonIfStatementCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonIfStatementCompletion.js +114 -0
- package/lib/exercises/math/python/pythonRangeCompletion.d.ts +9 -0
- package/lib/exercises/math/python/pythonRangeCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonRangeCompletion.js +105 -0
- package/lib/exercises/math/python/pythonSimpleFunctionInstructionCompletion.d.ts +8 -0
- package/lib/exercises/math/python/pythonSimpleFunctionInstructionCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonSimpleFunctionInstructionCompletion.js +89 -0
- package/lib/exercises/math/python/pythonWhileStatementCompletion.d.ts +7 -0
- package/lib/exercises/math/python/pythonWhileStatementCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonWhileStatementCompletion.js +87 -0
- package/lib/exercises/math/python/pythonWhileStatementOperationCompletion.d.ts +8 -0
- package/lib/exercises/math/python/pythonWhileStatementOperationCompletion.d.ts.map +1 -0
- package/lib/exercises/math/python/pythonWhileStatementOperationCompletion.js +120 -0
- package/lib/exercises/math/sampling/samplingFrequency.js +1 -1
- package/lib/index.d.ts +32 -0
- package/lib/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -114,7 +114,7 @@ const getQuestionFromIdentifiers = (identifiers) => ({
|
|
|
114
114
|
});
|
|
115
115
|
export const whichMultipleAmI = {
|
|
116
116
|
id: "whichMultipleAmI",
|
|
117
|
-
label: "Trouver le multiple d
|
|
117
|
+
label: "Trouver le multiple d'un nombre vérifiant des conditions",
|
|
118
118
|
isSingleStep: true,
|
|
119
119
|
generator: (nb, opts) => getDistinctQuestions(() => getWhichMultipleAmIQuestion(opts), nb),
|
|
120
120
|
qcmTimer: 60,
|
|
@@ -38,7 +38,7 @@ const getAnswer = (identifiers) => {
|
|
|
38
38
|
};
|
|
39
39
|
const getInstruction = (identifiers) => {
|
|
40
40
|
const { point } = identifiers;
|
|
41
|
-
return `Le point $${PointConstructor.fromIdentifiers(point).toTexWithCoords()}$ appartient-il à la courbe de la fonction racine
|
|
41
|
+
return `Le point $${PointConstructor.fromIdentifiers(point).toTexWithCoords()}$ appartient-il à la courbe de la fonction racine carrée ?`;
|
|
42
42
|
};
|
|
43
43
|
const getHint = (identifiers) => {
|
|
44
44
|
return "Un point $A(x; y)$ appartient à la courbe de la fonction $f$ si et seulement si $f(x) = y$.";
|
|
@@ -52,7 +52,7 @@ const getCorrection = (identifiers) => {
|
|
|
52
52
|
const conclusion = isValidPoint
|
|
53
53
|
? "Le point est donc sur la courbe."
|
|
54
54
|
: "Le point n'est donc pas sur la courbe.";
|
|
55
|
-
return `$${point.toTexWithCoords()}$ appartient à la courbe de la fonction racine
|
|
55
|
+
return `$${point.toTexWithCoords()}$ appartient à la courbe de la fonction racine carrée si et seulement si :
|
|
56
56
|
|
|
57
57
|
${alignTex(sqrt(x).simplify().toTex() != sqrt(x).toTex()
|
|
58
58
|
? [
|
|
@@ -115,7 +115,7 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
115
115
|
};
|
|
116
116
|
export const sqrtCurvePoint = {
|
|
117
117
|
id: "sqrtCurvePoint",
|
|
118
|
-
label: "Déterminer si un point appartient à la courbe de la fonction racine
|
|
118
|
+
label: "Déterminer si un point appartient à la courbe de la fonction racine carrée",
|
|
119
119
|
answerType: "QCU",
|
|
120
120
|
isSingleStep: true,
|
|
121
121
|
generator: (nb, opts) => getDistinctQuestions(() => getSqrtCurvePointQuestion(opts), nb),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageFunction.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/imageFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAkBT,MAAM,6BAA6B,CAAC;AAWrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAW7C,KAAK,WAAW,GAAG;IAOjB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"imageFunction.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/imageFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAkBT,MAAM,6BAA6B,CAAC;AAWrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAW7C,KAAK,WAAW,GAAG;IAOjB,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AA8LF,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AA4BF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAoBxD,CAAC"}
|
|
@@ -70,16 +70,16 @@ const getCorrection = (identifiers, opts) => {
|
|
|
70
70
|
const coeffsNode = polynomeCoeffs.map((coeff) => reifyAlgebraic(coeff));
|
|
71
71
|
const polynome = new GeneralPolynomial(coeffsNode).toTree();
|
|
72
72
|
const answer = getAnswer(identifiers);
|
|
73
|
+
const detailed = polynome.toDetailedEvaluation({ x: xValueNode });
|
|
74
|
+
const detailedStep = detailed.simplify({ forbidAdditions: true });
|
|
75
|
+
const steps = [[`f\\left(${xValueTex}\\right)`, "=", detailed.toTex()]];
|
|
76
|
+
if (detailed.toTex() !== detailedStep.toTex()) {
|
|
77
|
+
steps.push(["", "=", detailedStep.toTex()]);
|
|
78
|
+
}
|
|
79
|
+
steps.push(["", "=", answer]);
|
|
73
80
|
return `On remplace $x$ par $${xValueTex}$ dans l'expression de $f$ :
|
|
74
81
|
|
|
75
|
-
${alignTex(
|
|
76
|
-
[
|
|
77
|
-
`f\\left(${xValueTex}\\right)`,
|
|
78
|
-
"=",
|
|
79
|
-
polynome.toDetailedEvaluation({ x: xValueNode }).toTex(),
|
|
80
|
-
],
|
|
81
|
-
["", "=", answer],
|
|
82
|
-
])}`;
|
|
82
|
+
${alignTex(steps)}`;
|
|
83
83
|
};
|
|
84
84
|
const getStartStatement = (identifiers) => {
|
|
85
85
|
const { xValue, polynomeCoeffs, imageSyntaxText } = identifiers;
|
|
@@ -26,7 +26,7 @@ ${sqrt(a).toTex()} \\ \\ldots \\ ${sqrt(b).toTex()}
|
|
|
26
26
|
$$`;
|
|
27
27
|
};
|
|
28
28
|
const getHint = (identifiers) => {
|
|
29
|
-
return `La racine
|
|
29
|
+
return `La racine carrée conserve l'ordre : pour tous $a$ et $b$ positifs,
|
|
30
30
|
|
|
31
31
|
- $a > b \\iff ${sqrt("a").toTex()} > ${sqrt("b").toTex()}$
|
|
32
32
|
- $a < b \\iff ${sqrt("a").toTex()} < ${sqrt("b").toTex()}$
|
package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointImageFromTranslation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"pointImageFromTranslation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAMtC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAqKF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAiBpE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GeneratorOptionType, GeneratorOptionTarget, } from "../../../../exercises/exercise.js";
|
|
2
2
|
import { toolBarConstructor } from "../../../../exercises/utils/geogebra/toolBarConstructor.js";
|
|
3
3
|
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
4
|
+
import { red } from "../../../../geogebra/colors.js";
|
|
4
5
|
import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
|
|
5
6
|
import { approxEqual } from "../../../../geogebra/parsers/approxEqual.js";
|
|
6
7
|
import { ggbPointToCoords } from "../../../../geogebra/parsers/ggbPointToCoords.js";
|
|
@@ -23,18 +24,40 @@ const getEndPoint = (identifiers) => {
|
|
|
23
24
|
const end = vector.getEndPoint(startPoint, identifiers.startPoint + "'");
|
|
24
25
|
return end;
|
|
25
26
|
};
|
|
26
|
-
const getHint = (identifiers) => {
|
|
27
|
-
|
|
27
|
+
const getHint = (identifiers, opts) => {
|
|
28
|
+
const { points, startPoint, translationPoints } = identifiers;
|
|
29
|
+
const useVector = opts?.useVector;
|
|
30
|
+
if (useVector) {
|
|
31
|
+
const vector = translationPoints[0] + translationPoints[1];
|
|
32
|
+
return `Trace le vecteur $\\overrightarrow{${vector}}$ à partir du point $${startPoint}$.`;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const vector = translationPoints[0] + translationPoints[1];
|
|
36
|
+
return `À partir du point $${startPoint}$, déplace toi de la même façon que le déplacement de $${translationPoints[0]}$ vers $${translationPoints[1]}$.`;
|
|
37
|
+
}
|
|
28
38
|
};
|
|
29
|
-
const getCorrection = (identifiers) => {
|
|
30
|
-
|
|
39
|
+
const getCorrection = (identifiers, opts) => {
|
|
40
|
+
const { points, startPoint, translationPoints } = identifiers;
|
|
41
|
+
const useVector = opts?.useVector;
|
|
42
|
+
if (useVector) {
|
|
43
|
+
const vector = translationPoints[0] + translationPoints[1];
|
|
44
|
+
return `On se place à partir du point $${startPoint}$. On trace le vecteur $\\overrightarrow{${vector}}$. Le point d'arrivée est le point recherché.`;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return `On se place à partir du point $${startPoint}$. On se déplace de la même façon que le déplacement de $${translationPoints[0]}$ vers $${translationPoints[1]}$. Le point d'arrivée est le point recherché.`;
|
|
48
|
+
}
|
|
31
49
|
};
|
|
32
50
|
const getGGBAnswer = (identifiers) => {
|
|
33
|
-
|
|
51
|
+
const { points, startPoint, translationPoints } = identifiers;
|
|
52
|
+
const endPoint = getEndPoint(identifiers);
|
|
53
|
+
return [
|
|
54
|
+
...endPoint.toGGBCommand(),
|
|
55
|
+
`a = Vector(${startPoint}, ${endPoint.name})`,
|
|
56
|
+
`SetColor(a, "${red}")`,
|
|
57
|
+
];
|
|
34
58
|
};
|
|
35
59
|
const getStudentGGBOptions = (identifiers) => {
|
|
36
60
|
const points = identifiers.points.map((p) => PointConstructor.fromIdentifiers(p));
|
|
37
|
-
const end = getEndPoint(identifiers);
|
|
38
61
|
const ggb = new GeogebraConstructor({
|
|
39
62
|
hideAxes: true,
|
|
40
63
|
isGridSimple: true,
|
|
@@ -43,15 +66,11 @@ const getStudentGGBOptions = (identifiers) => {
|
|
|
43
66
|
size: 3,
|
|
44
67
|
style: 1,
|
|
45
68
|
})),
|
|
69
|
+
fontSize: 16,
|
|
46
70
|
});
|
|
47
|
-
const
|
|
71
|
+
const endPoint = getEndPoint(identifiers);
|
|
48
72
|
return ggb.getOptions({
|
|
49
|
-
coords: [
|
|
50
|
-
Math.min(endX - 2, -7),
|
|
51
|
-
Math.max(endX + 2, 7),
|
|
52
|
-
Math.min(endY - 2, -7),
|
|
53
|
-
Math.max(endY + 2, 7),
|
|
54
|
-
],
|
|
73
|
+
coords: ggb.getCoordsForPoints([...points, endPoint]),
|
|
55
74
|
});
|
|
56
75
|
};
|
|
57
76
|
const isGGBAnswerValid = (ans, { ggbAnswer }) => {
|
|
@@ -70,7 +89,7 @@ const getPointImageFromTranslationQuestion = (opts) => {
|
|
|
70
89
|
const points = [];
|
|
71
90
|
for (let i = 0; i < 4; i++) {
|
|
72
91
|
const name = String.fromCharCode(65 + i);
|
|
73
|
-
const newPoint = doWhile(() => PointConstructor.random(name, -
|
|
92
|
+
const newPoint = doWhile(() => PointConstructor.random(name, -3, 4), (p) => points.some((p2) => p.distanceTo(p2) < 2));
|
|
74
93
|
points.push(newPoint);
|
|
75
94
|
}
|
|
76
95
|
const startPoint = random(points).name;
|
|
@@ -78,8 +97,11 @@ const getPointImageFromTranslationQuestion = (opts) => {
|
|
|
78
97
|
random(points.filter((p) => p.name !== startPoint)).name,
|
|
79
98
|
];
|
|
80
99
|
translationPoints.push(random(points.filter((p) => p.name !== translationPoints[0])).name);
|
|
100
|
+
const pointsUsed = [startPoint, ...translationPoints];
|
|
81
101
|
const identifiers = {
|
|
82
|
-
points: points
|
|
102
|
+
points: points
|
|
103
|
+
.filter((p) => pointsUsed.includes(p.name))
|
|
104
|
+
.map((p) => p.toIdentifiers()),
|
|
83
105
|
startPoint,
|
|
84
106
|
translationPoints,
|
|
85
107
|
};
|
|
@@ -91,8 +113,8 @@ const getQuestionFromIdentifiers = (identifiers, opts) => {
|
|
|
91
113
|
instruction: getInstruction(identifiers, opts),
|
|
92
114
|
studentGgbOptions: getStudentGGBOptions(identifiers, opts),
|
|
93
115
|
identifiers,
|
|
94
|
-
|
|
95
|
-
|
|
116
|
+
hint: getHint(identifiers, opts),
|
|
117
|
+
correction: getCorrection(identifiers, opts),
|
|
96
118
|
};
|
|
97
119
|
return question;
|
|
98
120
|
};
|
|
@@ -102,6 +124,7 @@ const options = [
|
|
|
102
124
|
label: 'Utiliser le terme "translation de vecteur"',
|
|
103
125
|
type: GeneratorOptionType.checkbox,
|
|
104
126
|
target: GeneratorOptionTarget.instruction,
|
|
127
|
+
defaultValue: false,
|
|
105
128
|
},
|
|
106
129
|
];
|
|
107
130
|
export const pointImageFromTranslation = {
|
|
@@ -119,5 +142,5 @@ export const pointImageFromTranslation = {
|
|
|
119
142
|
answerType: "GGB",
|
|
120
143
|
options,
|
|
121
144
|
getQuestionFromIdentifiers,
|
|
122
|
-
|
|
145
|
+
hasHintAndCorrection: true,
|
|
123
146
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/geometry/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/geometry/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
perimeter: number;
|
|
4
|
+
askingX: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const geometryExtremaReadingOnGraph: Exercise<Identifiers>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=geometryExtremaReadingOnGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometryExtremaReadingOnGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/optimisation/geometryExtremaReadingOnGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAoJF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAuB/D,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { blueDark } from "../../../../geogebra/colors.js";
|
|
4
|
+
import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
|
|
5
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
6
|
+
import { round } from "../../../../math/utils/round.js";
|
|
7
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
8
|
+
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
9
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
10
|
+
const getPropositions = (n, { answer, askingX, perimeter }) => {
|
|
11
|
+
const propositions = [];
|
|
12
|
+
addValidProp(propositions, answer);
|
|
13
|
+
tryToAddWrongProp(propositions, getAnswer({ askingX: !askingX, perimeter }));
|
|
14
|
+
const answerNb = answer.unfrenchify();
|
|
15
|
+
while (propositions.length < n) {
|
|
16
|
+
tryToAddWrongProp(propositions, (answerNb + randint(-20, 20, [0])).frenchify());
|
|
17
|
+
}
|
|
18
|
+
return shuffleProps(propositions, n);
|
|
19
|
+
};
|
|
20
|
+
const getAnswer = (identifiers) => {
|
|
21
|
+
const { perimeter, askingX } = identifiers;
|
|
22
|
+
return askingX
|
|
23
|
+
? round(perimeter / 4, 4).frenchify()
|
|
24
|
+
: round(perimeter ** 2 / 16, 4).frenchify();
|
|
25
|
+
};
|
|
26
|
+
const getInstruction = (identifiers) => {
|
|
27
|
+
const { perimeter, askingX } = identifiers;
|
|
28
|
+
return `On cherche à construire un rectangle de périmètre $${perimeter}$ et de surface la plus grande possible.
|
|
29
|
+
|
|
30
|
+
On appelle $x$ la largeur du rectangle. Son aire s'obtient alors par la formule :
|
|
31
|
+
|
|
32
|
+
$$
|
|
33
|
+
A(x) = x(${round(perimeter / 2, 2)}-x)
|
|
34
|
+
$$
|
|
35
|
+
|
|
36
|
+
On a tracé ci-dessous la courbe de la fonction A.
|
|
37
|
+
|
|
38
|
+
${askingX
|
|
39
|
+
? `Quelle doit être la largeur du rectangle pour avoir la surface maximale ?`
|
|
40
|
+
: `Quelle est la surface maximale de ce rectangle ?`}
|
|
41
|
+
|
|
42
|
+
*On pourra zoomer et se déplacer sur le graphique.*`;
|
|
43
|
+
};
|
|
44
|
+
const getHint = (identifiers) => {
|
|
45
|
+
const { perimeter, askingX } = identifiers;
|
|
46
|
+
return `La courbe représentative de $A$ donne l'aire du rectangle en fonction de sa largeur $x$.
|
|
47
|
+
|
|
48
|
+
${askingX
|
|
49
|
+
? `Repère donc pour quelle valeur de $x$ on obtient la plus grande valeur de $A(x)$. `
|
|
50
|
+
: `Repère donc la plus grande valeur de $A(x)$.`}
|
|
51
|
+
`;
|
|
52
|
+
};
|
|
53
|
+
const getCorrection = (identifiers) => {
|
|
54
|
+
const { perimeter, askingX } = identifiers;
|
|
55
|
+
const x = round(perimeter / 4, 4).frenchify();
|
|
56
|
+
const y = round(perimeter ** 2 / 16, 4).frenchify();
|
|
57
|
+
return `La courbe représentative de $A$ donne l'aire du rectangle en fonction de sa largeur $x$.
|
|
58
|
+
|
|
59
|
+
${askingX
|
|
60
|
+
? `On cherche donc pour quelle valeur de $x$ on obtient la plus grande valeur de $A(x)$. `
|
|
61
|
+
: `On cherche donc la plus grande valeur de $A(x)$.`}
|
|
62
|
+
|
|
63
|
+
On voit que le maximum de $A$ est $${y}$, atteint pour $x=${x}$.
|
|
64
|
+
|
|
65
|
+
${askingX
|
|
66
|
+
? `Le rectangle atteint donc sa surface maximale pour une largeur de $${x}$.`
|
|
67
|
+
: `La surface maximale du rectangle est donc $${y}$.`}`;
|
|
68
|
+
};
|
|
69
|
+
const getGGBOptions = (identifiers) => {
|
|
70
|
+
const { perimeter } = identifiers;
|
|
71
|
+
const ggb = new GeogebraConstructor({
|
|
72
|
+
commands: [
|
|
73
|
+
`A = Function(x(${round(perimeter / 2, 2)}-x), 0, ${perimeter / 2})`,
|
|
74
|
+
`SetFixed(A, true)`,
|
|
75
|
+
`SetColor(A, "${blueDark}")`,
|
|
76
|
+
`SetCaption(A, "A(x)")`,
|
|
77
|
+
`ShowLabel(A, true)`,
|
|
78
|
+
],
|
|
79
|
+
lockedAxesRatio: false,
|
|
80
|
+
// gridDistance: false,
|
|
81
|
+
});
|
|
82
|
+
const xMax = perimeter / 2;
|
|
83
|
+
const yMax = perimeter ** 2 / 16;
|
|
84
|
+
return ggb.getOptions({
|
|
85
|
+
coords: ggb.getAdaptedCoords({
|
|
86
|
+
xMin: 0,
|
|
87
|
+
xMax,
|
|
88
|
+
yMin: 0,
|
|
89
|
+
yMax,
|
|
90
|
+
forceShowAxes: true,
|
|
91
|
+
}),
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
const getKeys = (identifiers) => {
|
|
95
|
+
return [];
|
|
96
|
+
};
|
|
97
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
98
|
+
try {
|
|
99
|
+
const parsed = parseAlgebraic(ans);
|
|
100
|
+
const value = parsed.evaluate();
|
|
101
|
+
const answerValue = parseAlgebraic(answer).evaluate();
|
|
102
|
+
return Math.abs(value - answerValue) < 0.1 * answerValue;
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
return handleVEAError(err);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const getGeometryExtremaReadingOnGraphQuestion = (opts) => {
|
|
109
|
+
const identifiers = {
|
|
110
|
+
askingX: coinFlip(),
|
|
111
|
+
perimeter: 4 * randint(1, 20),
|
|
112
|
+
};
|
|
113
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
114
|
+
};
|
|
115
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
116
|
+
return {
|
|
117
|
+
answer: getAnswer(identifiers),
|
|
118
|
+
instruction: getInstruction(identifiers),
|
|
119
|
+
keys: getKeys(identifiers),
|
|
120
|
+
answerFormat: "tex",
|
|
121
|
+
identifiers,
|
|
122
|
+
hint: getHint(identifiers),
|
|
123
|
+
correction: getCorrection(identifiers),
|
|
124
|
+
ggbOptions: getGGBOptions(identifiers),
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
export const geometryExtremaReadingOnGraph = {
|
|
128
|
+
id: "geometryExtremaReadingOnGraph",
|
|
129
|
+
label: "Répondre à un problème d'optimisation géométrique à partir d'une courbe représentative",
|
|
130
|
+
isSingleStep: true,
|
|
131
|
+
generator: (nb, opts) => getDistinctQuestions(() => getGeometryExtremaReadingOnGraphQuestion(opts), nb),
|
|
132
|
+
qcmTimer: 60,
|
|
133
|
+
freeTimer: 60,
|
|
134
|
+
getPropositions,
|
|
135
|
+
isAnswerValid,
|
|
136
|
+
subject: "Mathématiques",
|
|
137
|
+
getHint,
|
|
138
|
+
getCorrection,
|
|
139
|
+
getInstruction,
|
|
140
|
+
getAnswer,
|
|
141
|
+
getGGBOptions,
|
|
142
|
+
hasGeogebra: true,
|
|
143
|
+
getQuestionFromIdentifiers,
|
|
144
|
+
hasHintAndCorrection: true,
|
|
145
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/optimisation/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lengthIntervalOnPicture.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/optimisation/lengthIntervalOnPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA2FF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAuBzD,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 { ClosureType } from "../../../../tree/nodes/sets/closure.js";
|
|
5
|
+
import { IntervalNode } from "../../../../tree/nodes/sets/intervalNode.js";
|
|
6
|
+
import { intervalParser } from "../../../../tree/parsers/intervalParser.js";
|
|
7
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
8
|
+
const getPropositions = (n, { answer }) => {
|
|
9
|
+
const propositions = [];
|
|
10
|
+
addValidProp(propositions, answer);
|
|
11
|
+
tryToAddWrongProp(propositions, "[AB]");
|
|
12
|
+
tryToAddWrongProp(propositions, "[A;B]");
|
|
13
|
+
while (propositions.length < n) {
|
|
14
|
+
tryToAddWrongProp(propositions, new IntervalNode((0).toTree(), randint(1, 20).toTree(), ClosureType.FF).toTex());
|
|
15
|
+
}
|
|
16
|
+
return shuffleProps(propositions, n);
|
|
17
|
+
};
|
|
18
|
+
const getAnswer = (identifiers) => {
|
|
19
|
+
return new IntervalNode((0).toTree(), identifiers.side.toTree(), ClosureType.FF).toTex();
|
|
20
|
+
};
|
|
21
|
+
const getInstruction = (identifiers) => {
|
|
22
|
+
const { shape, side } = identifiers;
|
|
23
|
+
return `On considère un carré $ABCD$ de côté $${side}$. On place un point $M$ sur le segment $[AB]$, et on note $x$ la longueur $AM$.
|
|
24
|
+
|
|
25
|
+
Dans quel intervalle $x$ peut-il varier ?
|
|
26
|
+
|
|
27
|
+
`;
|
|
28
|
+
};
|
|
29
|
+
const getHint = (identifiers) => {
|
|
30
|
+
return `Le point $M$ peut être situé n'importe où sur le segment $[AB]$. Quelle peut être la plus petit valeur de $AM$ ? et sa plus grande valeur ?`;
|
|
31
|
+
};
|
|
32
|
+
const getCorrection = (identifiers) => {
|
|
33
|
+
const { shape, side } = identifiers;
|
|
34
|
+
return `Si le point $M$ est confondu avec le point $A$, alors $AM = 0$, donc $x = 0$.
|
|
35
|
+
|
|
36
|
+
Si le point $M$ est confondu avec le point $B$, alors $AM = ${side}$, donc $x = ${side}$.
|
|
37
|
+
|
|
38
|
+
Ainsi, $x$ appartient à l'intervalle $${getAnswer(identifiers)}$`;
|
|
39
|
+
};
|
|
40
|
+
const getKeys = (identifiers) => {
|
|
41
|
+
return ["lbracket", "semicolon", "rbracket"];
|
|
42
|
+
};
|
|
43
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = intervalParser(ans, {
|
|
46
|
+
allowCommaInsteadOfSemicolon: true,
|
|
47
|
+
allowNoBrackets: true,
|
|
48
|
+
expectedClosure: ClosureType.FF,
|
|
49
|
+
});
|
|
50
|
+
if (!parsed)
|
|
51
|
+
return false;
|
|
52
|
+
return parsed.simplify().toTex() === answer;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return handleVEAError(err);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const getLengthIntervalOnPictureQuestion = (ops) => {
|
|
59
|
+
const identifiers = {
|
|
60
|
+
shape: 1,
|
|
61
|
+
side: randint(1, 20),
|
|
62
|
+
};
|
|
63
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
64
|
+
};
|
|
65
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
66
|
+
return {
|
|
67
|
+
answer: getAnswer(identifiers),
|
|
68
|
+
instruction: getInstruction(identifiers),
|
|
69
|
+
keys: getKeys(identifiers),
|
|
70
|
+
answerFormat: "tex",
|
|
71
|
+
identifiers,
|
|
72
|
+
hint: getHint(identifiers),
|
|
73
|
+
correction: getCorrection(identifiers),
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
export const lengthIntervalOnPicture = {
|
|
77
|
+
id: "lengthIntervalOnPicture",
|
|
78
|
+
label: "Déterminer l'intervalle dans lequel varie une longueur avec point mobile",
|
|
79
|
+
isSingleStep: true,
|
|
80
|
+
generator: (nb, opts) => getDistinctQuestions(() => getLengthIntervalOnPictureQuestion(opts), nb, 15),
|
|
81
|
+
qcmTimer: 60,
|
|
82
|
+
freeTimer: 60,
|
|
83
|
+
getPropositions,
|
|
84
|
+
isAnswerValid,
|
|
85
|
+
subject: "Mathématiques",
|
|
86
|
+
getInstruction,
|
|
87
|
+
getHint,
|
|
88
|
+
getCorrection,
|
|
89
|
+
getAnswer,
|
|
90
|
+
getQuestionFromIdentifiers,
|
|
91
|
+
hasHintAndCorrection: true,
|
|
92
|
+
maxAllowedQuestions: 15,
|
|
93
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lengthWithXOnPicture.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/optimisation/lengthWithXOnPicture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAyFF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAuBtD,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
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 { round } from "../../../../math/utils/round.js";
|
|
5
|
+
import { add } from "../../../../tree/nodes/operators/addNode.js";
|
|
6
|
+
import { substract } from "../../../../tree/nodes/operators/substractNode.js";
|
|
7
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
8
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
9
|
+
import { alignTex } from "../../../../utils/latex/alignTex.js";
|
|
10
|
+
const getPropositions = (n, { answer, shape, side }) => {
|
|
11
|
+
const propositions = [];
|
|
12
|
+
addValidProp(propositions, answer);
|
|
13
|
+
tryToAddWrongProp(propositions, side.frenchify());
|
|
14
|
+
tryToAddWrongProp(propositions, round(side / 4, 2).frenchify());
|
|
15
|
+
tryToAddWrongProp(propositions, add("x", side).toTex());
|
|
16
|
+
tryToAddWrongProp(propositions, substract("x", side).toTex());
|
|
17
|
+
return shuffleProps(propositions, n);
|
|
18
|
+
};
|
|
19
|
+
const getAnswer = (identifiers) => {
|
|
20
|
+
return substract(identifiers.side.toTree(), "x").toTex();
|
|
21
|
+
};
|
|
22
|
+
const getInstruction = (identifiers) => {
|
|
23
|
+
const { shape, side } = identifiers;
|
|
24
|
+
return `On considère un carré $ABCD$ de côté $${side}$. On place un point $M$ sur le segment $[AB]$, et on note $x$ la longueur $AM$.
|
|
25
|
+
|
|
26
|
+
Exprimer la longueur $BM$ en fonction de $x$.
|
|
27
|
+
|
|
28
|
+
`;
|
|
29
|
+
};
|
|
30
|
+
const getHint = (identifiers) => {
|
|
31
|
+
return `La longueur $BM$ est égale à $AB$ moins $AM$.`;
|
|
32
|
+
};
|
|
33
|
+
const getCorrection = (identifiers) => {
|
|
34
|
+
const { shape, side } = identifiers;
|
|
35
|
+
return `La longueur $BM$ est égale à $AB$ moins $AM$.
|
|
36
|
+
|
|
37
|
+
Or, $AB = ${side}$ et $AM = x$.
|
|
38
|
+
|
|
39
|
+
Donc :
|
|
40
|
+
|
|
41
|
+
${alignTex([
|
|
42
|
+
["BM", "=", "AB-BM"],
|
|
43
|
+
["", "=", substract(side, "x").toTex()],
|
|
44
|
+
])}`;
|
|
45
|
+
};
|
|
46
|
+
const getKeys = (identifiers) => {
|
|
47
|
+
return ["x"];
|
|
48
|
+
};
|
|
49
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
50
|
+
try {
|
|
51
|
+
const parsed = parseAlgebraic(ans);
|
|
52
|
+
const answerParsed = parseAlgebraic(answer);
|
|
53
|
+
return (parsed
|
|
54
|
+
.simplify({ towardsDistribute: true, forbidFactorize: true })
|
|
55
|
+
.toTex() ===
|
|
56
|
+
answerParsed
|
|
57
|
+
.simplify({ towardsDistribute: true, forbidFactorize: true })
|
|
58
|
+
.toTex());
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return handleVEAError(err);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const getLengthIntervalOnPictureQuestion = (ops) => {
|
|
65
|
+
const identifiers = {
|
|
66
|
+
shape: 1,
|
|
67
|
+
side: randint(1, 20),
|
|
68
|
+
};
|
|
69
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
70
|
+
};
|
|
71
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
72
|
+
return {
|
|
73
|
+
answer: getAnswer(identifiers),
|
|
74
|
+
instruction: getInstruction(identifiers),
|
|
75
|
+
keys: getKeys(identifiers),
|
|
76
|
+
answerFormat: "tex",
|
|
77
|
+
identifiers,
|
|
78
|
+
hint: getHint(identifiers),
|
|
79
|
+
correction: getCorrection(identifiers),
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export const lengthWithXOnPicture = {
|
|
83
|
+
id: "lengthWithXOnPicture",
|
|
84
|
+
label: "Déterminer l'expression d'une longueur en fonction de $x$ à partir d'une figure",
|
|
85
|
+
isSingleStep: true,
|
|
86
|
+
generator: (nb, opts) => getDistinctQuestions(() => getLengthIntervalOnPictureQuestion(opts), nb, 15),
|
|
87
|
+
qcmTimer: 60,
|
|
88
|
+
freeTimer: 60,
|
|
89
|
+
getPropositions,
|
|
90
|
+
isAnswerValid,
|
|
91
|
+
subject: "Mathématiques",
|
|
92
|
+
getInstruction,
|
|
93
|
+
getHint,
|
|
94
|
+
getCorrection,
|
|
95
|
+
getAnswer,
|
|
96
|
+
getQuestionFromIdentifiers,
|
|
97
|
+
hasHintAndCorrection: true,
|
|
98
|
+
maxAllowedQuestions: 15,
|
|
99
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/pythagore/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/pythagore/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC"}
|