math-exercises 3.0.115 → 3.0.117
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/exercise.d.ts +12 -4
- package/lib/exercises/exercise.d.ts.map +1 -1
- package/lib/exercises/math/dataRepresentations/compareBoxPlot.d.ts +13 -0
- package/lib/exercises/math/dataRepresentations/compareBoxPlot.d.ts.map +1 -0
- package/lib/exercises/math/dataRepresentations/compareBoxPlot.js +192 -0
- package/lib/exercises/math/dataRepresentations/index.d.ts +1 -0
- package/lib/exercises/math/dataRepresentations/index.d.ts.map +1 -1
- package/lib/exercises/math/dataRepresentations/index.js +1 -0
- package/lib/exercises/math/derivation/tangent/derivativeNumberReading.d.ts.map +1 -1
- package/lib/exercises/math/derivation/tangent/derivativeNumberReading.js +0 -1
- package/lib/exercises/math/functions/affines/index.d.ts +1 -0
- package/lib/exercises/math/functions/affines/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/affines/index.js +1 -0
- package/lib/exercises/math/functions/affines/recognizeAffineGraph.d.ts +18 -0
- package/lib/exercises/math/functions/affines/recognizeAffineGraph.d.ts.map +1 -0
- package/lib/exercises/math/functions/affines/recognizeAffineGraph.js +144 -0
- package/lib/exercises/math/geometry/quadrilaterals/parallelogramRectangle.d.ts.map +1 -1
- package/lib/exercises/math/geometry/quadrilaterals/parallelogramRectangle.js +1 -0
- package/lib/exercises/math/geometry/quadrilaterals/parallelogramRhombus.d.ts.map +1 -1
- package/lib/exercises/math/geometry/quadrilaterals/parallelogramRhombus.js +1 -0
- package/lib/index.d.ts +777 -760
- package/lib/index.d.ts.map +1 -1
- package/lib/latexTester.d.ts.map +1 -1
- package/lib/latexTester.js +3 -1
- package/lib/math/polynomials/trinom.d.ts +1 -0
- package/lib/math/polynomials/trinom.d.ts.map +1 -1
- package/lib/math/polynomials/trinom.js +5 -0
- package/lib/tests/questionTest.d.ts.map +1 -1
- package/lib/tests/questionTest.js +7 -0
- package/lib/utils/strings/capitalize.d.ts +2 -0
- package/lib/utils/strings/capitalize.d.ts.map +1 -0
- package/lib/utils/strings/capitalize.js +3 -0
- package/package.json +1 -1
|
@@ -21,14 +21,22 @@ export declare enum GeneratorOptionType {
|
|
|
21
21
|
select = "select",
|
|
22
22
|
multiselect = "multiselect"
|
|
23
23
|
}
|
|
24
|
-
export type GeneratorOption<TValue = string | number | boolean | string[]> = {
|
|
24
|
+
export type GeneratorOption<TValue = string | number | boolean | string[] | number[] | boolean[]> = {
|
|
25
25
|
id: string;
|
|
26
26
|
label: string;
|
|
27
|
-
type: GeneratorOptionType;
|
|
27
|
+
type: GeneratorOptionType.checkbox | GeneratorOptionType.select;
|
|
28
28
|
target: GeneratorOptionTarget;
|
|
29
29
|
tooltipText?: string;
|
|
30
|
-
defaultValue?: TValue;
|
|
31
30
|
values?: TValue[];
|
|
31
|
+
defaultValue?: TValue;
|
|
32
|
+
} | {
|
|
33
|
+
id: string;
|
|
34
|
+
label: string;
|
|
35
|
+
type: GeneratorOptionType.multiselect;
|
|
36
|
+
target: GeneratorOptionTarget;
|
|
37
|
+
tooltipText?: string;
|
|
38
|
+
values?: TValue;
|
|
39
|
+
defaultValue?: TValue;
|
|
32
40
|
};
|
|
33
41
|
export type Proposition = {
|
|
34
42
|
id: string;
|
|
@@ -131,7 +139,7 @@ export type GetTests<TIdentifiers, TOptions = object> = () => TestData<TIdentifi
|
|
|
131
139
|
type PDFOptions = {
|
|
132
140
|
shouldSpreadPropositions?: boolean;
|
|
133
141
|
};
|
|
134
|
-
export interface Exercise<TIdentifiers, TOptions = object, TOptionValue = string | number | boolean | string[]> {
|
|
142
|
+
export interface Exercise<TIdentifiers, TOptions = object, TOptionValue = string | number | boolean | string[] | number[] | boolean[]> {
|
|
135
143
|
id: string;
|
|
136
144
|
isSingleStep: boolean;
|
|
137
145
|
label: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exercise.d.ts","sourceRoot":"","sources":["../../src/exercises/exercise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAInD,eAAO,MAAM,SAAS,GACpB,cAAc,WAAW,EAAE,EAC3B,GAAG,MAAM,EACT,SAAS,MAAM,IAAI,SAQpB,CAAC;AACF,eAAO,MAAM,YAAY,GACvB,OAAO,WAAW,EAAE,EACpB,WAAW,MAAM,EACjB,SAAQ,KAAK,GAAG,KAAa,SAQ9B,CAAC;AACF,eAAO,MAAM,YAAY,GACvB,OAAO,WAAW,EAAE,EACpB,WAAW,MAAM,EACjB,SAAQ,KAAK,GAAG,KAAa,SAQ9B,CAAC;AACF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,WAAW,EAAE,EACpB,WAAW,MAAM,EACjB,SAAQ,KAAK,GAAG,KAAa,SAU9B,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,WAAW,EAAE,EACpB,GAAG,MAAM,EACT,oBAAoB,MAAM,kBAQ3B,CAAC;AAEF,oBAAY,qBAAqB;IAC/B,UAAU,eAAe;IACzB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AACD,oBAAY,mBAAmB;IAC7B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,WAAW,gBAAgB;CAC5B;AACD,MAAM,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"exercise.d.ts","sourceRoot":"","sources":["../../src/exercises/exercise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Exercise } from "../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
indexTopic: number;
|
|
4
|
+
isLess: boolean;
|
|
5
|
+
arrDistrib: Distrib[];
|
|
6
|
+
};
|
|
7
|
+
type Distrib = {
|
|
8
|
+
name: string;
|
|
9
|
+
indicators: number[];
|
|
10
|
+
};
|
|
11
|
+
export declare const compareBoxPlot: Exercise<Identifiers>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=compareBoxPlot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compareBoxPlot.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/dataRepresentations/compareBoxPlot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAQrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,EAAE,CAAC;CACvB,CAAC;AAKF,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AA+PF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAoBhD,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { blueDark, red } from "../../../geogebra/colors.js";
|
|
4
|
+
import { GeogebraConstructor } from "../../../geogebra/geogebraConstructor.js";
|
|
5
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
6
|
+
import { coinFlip } from "../../../utils/alea/coinFlip.js";
|
|
7
|
+
import { randomMany } from "../../../utils/alea/random.js";
|
|
8
|
+
const distribNames = ["A", "B"];
|
|
9
|
+
const colors = [blueDark, red];
|
|
10
|
+
class Topic {
|
|
11
|
+
type;
|
|
12
|
+
questions1;
|
|
13
|
+
funcIndicator;
|
|
14
|
+
constructor(type, questions1, funcIndicator) {
|
|
15
|
+
this.type = type;
|
|
16
|
+
this.questions1 = questions1;
|
|
17
|
+
this.funcIndicator = funcIndicator;
|
|
18
|
+
}
|
|
19
|
+
getQuestion(isLess) {
|
|
20
|
+
return `Quelle série a ${this.getFrenchStringForTheMoreOrLessIndicator(isLess)} ?`;
|
|
21
|
+
}
|
|
22
|
+
getFrenchStringForTheMoreOrLessIndicator(isLess) {
|
|
23
|
+
return this.questions1[isLess ? 0 : 1];
|
|
24
|
+
}
|
|
25
|
+
compare(d1, d2) {
|
|
26
|
+
return this.funcIndicator(d1) - this.funcIndicator(d2);
|
|
27
|
+
}
|
|
28
|
+
isCompatibleWithArrDistrib(arrDistrib) {
|
|
29
|
+
const arrIndicator = arrDistrib.map((d) => this.funcIndicator(d));
|
|
30
|
+
return arrIndicator[1] !== arrIndicator[0];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const arrTopic = [
|
|
34
|
+
new Topic("l'étendue", ["la plus petite étendue", "la plus grande étendue"], (d) => d.indicators[4] - d.indicators[0]),
|
|
35
|
+
new Topic("l'écart interquartile", ["le plus petit écart interquartile", "le plus grand écart interquartile"], (d) => d.indicators[3] - d.indicators[1]),
|
|
36
|
+
new Topic("le minimum", ["le minimum le plus petit", "le minimum le plus grand"], (d) => d.indicators[0]),
|
|
37
|
+
new Topic("la médiane", ["la plus petite médiane", "la plus grande médiane"], (d) => d.indicators[2]),
|
|
38
|
+
new Topic("le maximum", ["le maximum le plus petit", "le maximum le plus grand"], (d) => d.indicators[4]),
|
|
39
|
+
];
|
|
40
|
+
const createRandomDistrib = (name, min = 5, max = 20) => {
|
|
41
|
+
const indicators = randomMany([...Array(max - min + 1).keys()].map((i) => i + min), 5).toSorted((i1, i2) => i1 - i2);
|
|
42
|
+
const d = {
|
|
43
|
+
name,
|
|
44
|
+
indicators: indicators,
|
|
45
|
+
};
|
|
46
|
+
return d;
|
|
47
|
+
};
|
|
48
|
+
const getPropositions = (n, { answer, arrDistrib }) => {
|
|
49
|
+
const propositions = [];
|
|
50
|
+
addValidProp(propositions, answer);
|
|
51
|
+
arrDistrib.forEach((d) => {
|
|
52
|
+
tryToAddWrongProp(propositions, d.name);
|
|
53
|
+
});
|
|
54
|
+
return shuffleProps(propositions, n);
|
|
55
|
+
};
|
|
56
|
+
const getAnswer = (identifiers) => {
|
|
57
|
+
const { indexTopic, isLess: isLess, arrDistrib } = identifiers;
|
|
58
|
+
const topic = arrTopic[indexTopic];
|
|
59
|
+
const funcCompare = (d1, d2) => isLess ? topic.compare(d1, d2) : topic.compare(d2, d1);
|
|
60
|
+
const arrDistribSorted = arrDistrib.toSorted(funcCompare);
|
|
61
|
+
const distribAnswer = arrDistribSorted[0];
|
|
62
|
+
return distribAnswer.name;
|
|
63
|
+
};
|
|
64
|
+
const getInstruction = (identifiers) => {
|
|
65
|
+
const { indexTopic, isLess: isLess, arrDistrib } = identifiers;
|
|
66
|
+
return `Voici $${arrDistrib.length}$ boîtes à moustaches, chacune représentant une série statistique spécifique.
|
|
67
|
+
|
|
68
|
+
${arrTopic[indexTopic].getQuestion(isLess)}`;
|
|
69
|
+
};
|
|
70
|
+
const getHint = () => {
|
|
71
|
+
return `Une boite à moustaches permet de lire les indicateurs statistiques d'une série :
|
|
72
|
+
|
|
73
|
+

|
|
74
|
+
`;
|
|
75
|
+
};
|
|
76
|
+
const getCorrection = (identifiers) => {
|
|
77
|
+
const { indexTopic, isLess: isLess, arrDistrib } = identifiers;
|
|
78
|
+
const topic = arrTopic[indexTopic];
|
|
79
|
+
return `${arrDistrib.map((d) => `Pour la série $${d.name}$, ${topic.type} vaut $${topic
|
|
80
|
+
.funcIndicator(d)
|
|
81
|
+
.frenchify()}$.`).join(`
|
|
82
|
+
|
|
83
|
+
`)}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
C'est donc la série $${getAnswer(identifiers)}$ qui a ${topic.getFrenchStringForTheMoreOrLessIndicator(isLess)}.`;
|
|
87
|
+
};
|
|
88
|
+
const getGGBOptions = (identifiers) => {
|
|
89
|
+
const { arrDistrib } = identifiers;
|
|
90
|
+
const yPaddingPure = 3;
|
|
91
|
+
const yAltitude0Pure = 5;
|
|
92
|
+
const yScale = 4;
|
|
93
|
+
const yPadding = yPaddingPure + yScale;
|
|
94
|
+
const yAltitude0 = yAltitude0Pure + yScale / 2;
|
|
95
|
+
const xMin = Math.min(...arrDistrib.map((d) => d.indicators[0]));
|
|
96
|
+
const xMax = Math.max(...arrDistrib.map((d) => d.indicators[4]));
|
|
97
|
+
const yMin = -yAltitude0;
|
|
98
|
+
const yMax = yAltitude0 + arrDistrib.length * yPadding;
|
|
99
|
+
const xLabel = xMin - 2;
|
|
100
|
+
function createBoxPlotCommands(d, color, yOffset, yScale, xLabel) {
|
|
101
|
+
const [q0, q1, q2, q3, q4] = d.indicators;
|
|
102
|
+
const commands = [
|
|
103
|
+
`B_${d.name} = BoxPlot(${yOffset}, ${yScale}, ${q0}, ${q1}, ${q2}, ${q3}, ${q4})`,
|
|
104
|
+
`SetColor(B_${d.name}, "${color}")`,
|
|
105
|
+
`ShowLabel(B_${d.name}, false)`,
|
|
106
|
+
`T_${d.name} = Text("\\footnotesize ${d.name}", (${xLabel},${yOffset + 4}), true, true)`,
|
|
107
|
+
`SetColor(T_${d.name}, "${color}")`,
|
|
108
|
+
];
|
|
109
|
+
return commands;
|
|
110
|
+
}
|
|
111
|
+
const commands = arrDistrib.flatMap((d, i) => createBoxPlotCommands(d, colors[i], yAltitude0 + (yPadding + yScale) * i, yScale, xLabel));
|
|
112
|
+
const ggb = new GeogebraConstructor({
|
|
113
|
+
commands,
|
|
114
|
+
forbidShiftDragZoom: false,
|
|
115
|
+
lockedAxesRatio: false,
|
|
116
|
+
hideGrid: true,
|
|
117
|
+
xAxis: {
|
|
118
|
+
hideNumbers: false,
|
|
119
|
+
steps: 1,
|
|
120
|
+
},
|
|
121
|
+
yAxis: {
|
|
122
|
+
hidden: true,
|
|
123
|
+
},
|
|
124
|
+
maxHeight: 100,
|
|
125
|
+
fontSize: 20,
|
|
126
|
+
});
|
|
127
|
+
return ggb.getOptions({
|
|
128
|
+
coords: [xMin - 5, xMax + 5, yMin - 5, yMax + 5],
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
132
|
+
const ansRefined = ans.split(";").toSorted().join(";");
|
|
133
|
+
return ansRefined === answer;
|
|
134
|
+
};
|
|
135
|
+
const getBoxPlotReadingQuestion = () => {
|
|
136
|
+
const nbDistri = 2;
|
|
137
|
+
const nbInAnswer = 1;
|
|
138
|
+
const genParams = {
|
|
139
|
+
min: 0,
|
|
140
|
+
max: 20,
|
|
141
|
+
nbUniqueValues: 7,
|
|
142
|
+
minCount: 1,
|
|
143
|
+
maxCount: 5,
|
|
144
|
+
};
|
|
145
|
+
const arrDistrib = [...Array(nbDistri).keys()].map((i) => {
|
|
146
|
+
const name = distribNames[i];
|
|
147
|
+
const d = createRandomDistrib(name, genParams.min, genParams.max);
|
|
148
|
+
return d;
|
|
149
|
+
});
|
|
150
|
+
const isLess = coinFlip();
|
|
151
|
+
let indexTopic;
|
|
152
|
+
let isQuestionOk = false;
|
|
153
|
+
do {
|
|
154
|
+
indexTopic = randint(0, arrTopic.length);
|
|
155
|
+
const topic = arrTopic[indexTopic];
|
|
156
|
+
isQuestionOk = topic.isCompatibleWithArrDistrib(arrDistrib);
|
|
157
|
+
} while (!isQuestionOk);
|
|
158
|
+
const identifiers = { nbInAnswer, indexTopic, isLess, arrDistrib };
|
|
159
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
160
|
+
};
|
|
161
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
162
|
+
return {
|
|
163
|
+
answer: getAnswer(identifiers),
|
|
164
|
+
instruction: getInstruction(identifiers),
|
|
165
|
+
keys: [],
|
|
166
|
+
answerFormat: "tex",
|
|
167
|
+
identifiers,
|
|
168
|
+
hint: getHint(identifiers),
|
|
169
|
+
correction: getCorrection(identifiers),
|
|
170
|
+
ggbOptions: getGGBOptions(identifiers),
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export const compareBoxPlot = {
|
|
174
|
+
id: "compareBoxPlot",
|
|
175
|
+
label: "Comparer des séries à l'aide de boîtes à moustaches",
|
|
176
|
+
isSingleStep: true,
|
|
177
|
+
generator: (nb) => getDistinctQuestions(() => getBoxPlotReadingQuestion(), nb),
|
|
178
|
+
qcmTimer: 60,
|
|
179
|
+
freeTimer: 60,
|
|
180
|
+
getPropositions,
|
|
181
|
+
isAnswerValid,
|
|
182
|
+
subject: "Mathématiques",
|
|
183
|
+
getHint,
|
|
184
|
+
getCorrection,
|
|
185
|
+
getInstruction,
|
|
186
|
+
getAnswer,
|
|
187
|
+
getGGBOptions,
|
|
188
|
+
hasGeogebra: true,
|
|
189
|
+
getQuestionFromIdentifiers,
|
|
190
|
+
hasHintAndCorrection: true,
|
|
191
|
+
answerType: "QCU",
|
|
192
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/dataRepresentations/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/dataRepresentations/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
|
|
@@ -4,6 +4,7 @@ export * from "./functionGraphReading.js";
|
|
|
4
4
|
export * from "./pieChartReading.js";
|
|
5
5
|
export * from "./boxPlotReadingPercentages.js";
|
|
6
6
|
export * from "./boxPlotReading.js";
|
|
7
|
+
export * from "./compareBoxPlot.js";
|
|
7
8
|
// export * from "./testGen.js";
|
|
8
9
|
// export * from "./testGenGGB.js";
|
|
9
10
|
// export * from "./testGenStudentGGB.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivativeNumberReading.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/derivation/tangent/derivativeNumberReading.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"derivativeNumberReading.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/derivation/tangent/derivativeNumberReading.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AA+HF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAczD,CAAC"}
|
|
@@ -44,7 +44,6 @@ const getGGBOptions = (identifiers) => {
|
|
|
44
44
|
const penteString = penteTree.toMathString();
|
|
45
45
|
const originString = originTree.toMathString();
|
|
46
46
|
const polynome = new Polynomial(identifiers.coeffs);
|
|
47
|
-
console.log(polynome.toMathString());
|
|
48
47
|
const commands = [
|
|
49
48
|
`f(x) = ${polynome.toMathString()}`,
|
|
50
49
|
`SetColor(f, "${blueMain}")`,
|
|
@@ -13,5 +13,6 @@ export * from "./affineMeanValue.js";
|
|
|
13
13
|
export * from "./affineExpressionFromTwoImages.js";
|
|
14
14
|
export * from "./affineFromExercise.js";
|
|
15
15
|
export * from "./drawAffineFrom2Points.js";
|
|
16
|
+
export * from "./recognizeAffineGraph.js";
|
|
16
17
|
export * from "./drawAffineFromLitExp.js";
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -13,4 +13,5 @@ export * from "./affineMeanValue.js";
|
|
|
13
13
|
export * from "./affineExpressionFromTwoImages.js";
|
|
14
14
|
export * from "./affineFromExercise.js";
|
|
15
15
|
export * from "./drawAffineFrom2Points.js";
|
|
16
|
+
export * from "./recognizeAffineGraph.js";
|
|
16
17
|
export * from "./drawAffineFromLitExp.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
|
|
3
|
+
type ColorProps = {
|
|
4
|
+
strFrench: string;
|
|
5
|
+
hashRgb: string;
|
|
6
|
+
};
|
|
7
|
+
type FunctionProps = {
|
|
8
|
+
fName: string;
|
|
9
|
+
colorProps: ColorProps;
|
|
10
|
+
};
|
|
11
|
+
type Identifiers = {
|
|
12
|
+
arrNodeIds: NodeIdentifiers[];
|
|
13
|
+
arrFProps: FunctionProps[];
|
|
14
|
+
isLinear: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare const recognizeAffineGraph: Exercise<Identifiers>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=recognizeAffineGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recognizeAffineGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/recognizeAffineGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAc7C,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAmBF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AA+IF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAgBtD,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { addValidProp, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { blueDark, orange, red } from "../../../../geogebra/colors.js";
|
|
4
|
+
import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
|
|
5
|
+
import { AffineConstructor } from "../../../../math/polynomials/affine.js";
|
|
6
|
+
import { TrinomConstructor } from "../../../../math/polynomials/trinom.js";
|
|
7
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
8
|
+
import { exp } from "../../../../tree/nodes/functions/expNode.js";
|
|
9
|
+
import { NodeConstructor, } from "../../../../tree/nodes/nodeConstructor.js";
|
|
10
|
+
import { add } from "../../../../tree/nodes/operators/addNode.js";
|
|
11
|
+
import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
12
|
+
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
13
|
+
import { randomMany } from "../../../../utils/alea/random.js";
|
|
14
|
+
import { shuffle } from "../../../../utils/alea/shuffle.js";
|
|
15
|
+
const DISPLAY_PROPS = {
|
|
16
|
+
xMin: -5,
|
|
17
|
+
xMax: +5,
|
|
18
|
+
yMin: -5,
|
|
19
|
+
yMax: +5,
|
|
20
|
+
};
|
|
21
|
+
const arrColorProps = [
|
|
22
|
+
{
|
|
23
|
+
strFrench: "rouge",
|
|
24
|
+
hashRgb: red,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
strFrench: "bleu",
|
|
28
|
+
hashRgb: blueDark,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
strFrench: "orange",
|
|
32
|
+
hashRgb: orange,
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
const arrFName = ["f", "g", "h"];
|
|
36
|
+
const getInstruction = (identifiers) => {
|
|
37
|
+
const { isLinear, arrFProps } = identifiers;
|
|
38
|
+
const arrFPropsSorted = arrFProps.toSorted((fProps1, fProps2) => fProps1.fName.localeCompare(fProps2.fName));
|
|
39
|
+
return `Ci-dessous sont tracées les courbes représentatives d'une fonction $${arrFPropsSorted[0].fName}$ (en ${arrFPropsSorted[0].colorProps.strFrench}), d'une fonction $${arrFPropsSorted[1].fName}$ (en ${arrFPropsSorted[1].colorProps.strFrench}) et d'une fonction $${arrFPropsSorted[2].fName}$ (en ${arrFPropsSorted[2].colorProps.strFrench}).
|
|
40
|
+
|
|
41
|
+
Quelle fonction est ${isLinear ? "linéaire" : "affine"} ?`;
|
|
42
|
+
};
|
|
43
|
+
const getGGBOptions = (identifiers) => {
|
|
44
|
+
const { arrNodeIds, arrFProps } = identifiers;
|
|
45
|
+
function createFunctionCommands(nodeIds, fName, color) {
|
|
46
|
+
const nodeF = NodeConstructor.fromIdentifiers(nodeIds);
|
|
47
|
+
const expr = nodeF.toMathString();
|
|
48
|
+
return [
|
|
49
|
+
`${fName} = Function(${expr}, x, -20, 20)`,
|
|
50
|
+
// `ShowLabel(${fName}, true)`,
|
|
51
|
+
// `SetCaption(${fName}, "C_${fName}")`,
|
|
52
|
+
`SetColor(${fName}, "${color}")`,
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
const commands = arrNodeIds.flatMap((_, i) => createFunctionCommands(arrNodeIds[i], arrFProps[i].fName, arrFProps[i].colorProps.hashRgb));
|
|
56
|
+
const ggb = new GeogebraConstructor({
|
|
57
|
+
commands,
|
|
58
|
+
});
|
|
59
|
+
const { xMin, xMax, yMin, yMax } = DISPLAY_PROPS;
|
|
60
|
+
return ggb.getOptions({
|
|
61
|
+
coords: ggb.getAdaptedCoords({ xMin, xMax, yMin, yMax }),
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const getHint = () => {
|
|
65
|
+
return `Les fonctions affines et linéaires sont représentées par des droites.`;
|
|
66
|
+
};
|
|
67
|
+
const getCorrection = (identifiers) => {
|
|
68
|
+
const { isLinear, arrFProps } = identifiers;
|
|
69
|
+
const strFName = arrFProps[0].fName;
|
|
70
|
+
const strColor = arrFProps[0].colorProps.strFrench;
|
|
71
|
+
return `Une fonction ${isLinear ? "linéaire" : "affine"} est représentée par une droite ${isLinear ? "passant par l'origine" : ""}.
|
|
72
|
+
La seule droite ici est la courbe en ${strColor}.
|
|
73
|
+
La fonction ${isLinear ? "linéaire" : "affine"} est donc $${strFName}$.`;
|
|
74
|
+
};
|
|
75
|
+
const getAnswer = (identifiers) => {
|
|
76
|
+
const { arrFProps } = identifiers;
|
|
77
|
+
return arrFProps[0].fName;
|
|
78
|
+
};
|
|
79
|
+
const getRecognizeAffineGraphQuestion = () => {
|
|
80
|
+
const isLinear = coinFlip();
|
|
81
|
+
const { xMin, xMax, yMin, yMax } = DISPLAY_PROPS;
|
|
82
|
+
const arrNodeIds = [
|
|
83
|
+
AffineConstructor.random({ min: -10, max: 10 }, { min: isLinear ? 0 : -10, max: isLinear ? 0 : 10 }, "x").toTree(),
|
|
84
|
+
add(multiply(randint(-0.5, 0.5, [0]), exp("x")), randint(-5, 5)),
|
|
85
|
+
(() => {
|
|
86
|
+
const rootsPool = [...Array(xMax - xMin).keys()].map((i) => i + xMin);
|
|
87
|
+
const roots = randomMany(rootsPool, 2).toSorted((i1, i2) => i1 - i2);
|
|
88
|
+
const ySummit = randint(yMin, yMax, [0]);
|
|
89
|
+
return TrinomConstructor.fromRootsAndSummitY(roots, ySummit).toTree();
|
|
90
|
+
})(),
|
|
91
|
+
].map((node) => node.toIdentifiers());
|
|
92
|
+
const arrFNameShuffled = shuffle(arrFName);
|
|
93
|
+
const arrColorPropsShuffled = shuffle(arrColorProps);
|
|
94
|
+
const arrFProps = arrFNameShuffled.map((_, i) => {
|
|
95
|
+
return { fName: arrFName[i], colorProps: arrColorPropsShuffled[i] };
|
|
96
|
+
});
|
|
97
|
+
const identifiers = { arrNodeIds, arrFProps, isLinear };
|
|
98
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
99
|
+
};
|
|
100
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
101
|
+
const question = {
|
|
102
|
+
answer: getAnswer(identifiers),
|
|
103
|
+
instruction: getInstruction(identifiers),
|
|
104
|
+
keys: [],
|
|
105
|
+
ggbOptions: getGGBOptions(identifiers),
|
|
106
|
+
answerFormat: "tex",
|
|
107
|
+
identifiers,
|
|
108
|
+
hint: getHint(identifiers),
|
|
109
|
+
correction: getCorrection(identifiers),
|
|
110
|
+
};
|
|
111
|
+
return question;
|
|
112
|
+
};
|
|
113
|
+
const getPropositions = (_, { answer, ...idenfitiers }) => {
|
|
114
|
+
const { arrFProps } = idenfitiers;
|
|
115
|
+
const propositions = [];
|
|
116
|
+
//keep same order on each question
|
|
117
|
+
arrFProps.forEach((fProps) => {
|
|
118
|
+
if (fProps.fName === answer) {
|
|
119
|
+
addValidProp(propositions, answer);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
tryToAddWrongProp(propositions, fProps.fName);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return propositions;
|
|
126
|
+
};
|
|
127
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
128
|
+
return ans === answer;
|
|
129
|
+
};
|
|
130
|
+
export const recognizeAffineGraph = {
|
|
131
|
+
id: "recognizeAffineGraph",
|
|
132
|
+
label: "Reconnaître la représentation graphique d'une fonction linéaire ou d'une fonction affine",
|
|
133
|
+
isSingleStep: true,
|
|
134
|
+
generator: (nb) => getDistinctQuestions(getRecognizeAffineGraphQuestion, nb),
|
|
135
|
+
qcmTimer: 60,
|
|
136
|
+
freeTimer: 60,
|
|
137
|
+
getPropositions,
|
|
138
|
+
isAnswerValid,
|
|
139
|
+
hasGeogebra: true,
|
|
140
|
+
subject: "Mathématiques",
|
|
141
|
+
getQuestionFromIdentifiers,
|
|
142
|
+
hasHintAndCorrection: true,
|
|
143
|
+
answerType: "QCU",
|
|
144
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelogramRectangle.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/quadrilaterals/parallelogramRectangle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAM7C,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AA4IF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"parallelogramRectangle.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/quadrilaterals/parallelogramRectangle.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAM7C,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AA4IF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAqBxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelogramRhombus.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/quadrilaterals/parallelogramRhombus.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAO7C,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAgJF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"parallelogramRhombus.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/quadrilaterals/parallelogramRhombus.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAO7C,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,eAAe,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAgJF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAqBtD,CAAC"}
|