math-exercises 3.0.114 → 3.0.116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/exercises/exercise.d.ts +12 -4
  2. package/lib/exercises/exercise.d.ts.map +1 -1
  3. package/lib/exercises/math/dataRepresentations/compareBoxPlot.d.ts +13 -0
  4. package/lib/exercises/math/dataRepresentations/compareBoxPlot.d.ts.map +1 -0
  5. package/lib/exercises/math/dataRepresentations/compareBoxPlot.js +192 -0
  6. package/lib/exercises/math/dataRepresentations/index.d.ts +1 -0
  7. package/lib/exercises/math/dataRepresentations/index.d.ts.map +1 -1
  8. package/lib/exercises/math/dataRepresentations/index.js +1 -0
  9. package/lib/exercises/math/derivation/tangent/derivativeNumberReading.d.ts.map +1 -1
  10. package/lib/exercises/math/derivation/tangent/derivativeNumberReading.js +0 -1
  11. package/lib/exercises/math/functions/affines/index.d.ts +1 -0
  12. package/lib/exercises/math/functions/affines/index.d.ts.map +1 -1
  13. package/lib/exercises/math/functions/affines/index.js +1 -0
  14. package/lib/exercises/math/functions/affines/recognizeAffineGraph.d.ts +18 -0
  15. package/lib/exercises/math/functions/affines/recognizeAffineGraph.d.ts.map +1 -0
  16. package/lib/exercises/math/functions/affines/recognizeAffineGraph.js +144 -0
  17. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +4 -1
  18. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -1
  19. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +21 -47
  20. package/lib/exercises/math/primitive/polynomialPrimitive.d.ts.map +1 -1
  21. package/lib/exercises/math/primitive/polynomialPrimitive.js +2 -2
  22. package/lib/exercises/math/probaStat/basicProbas/possibleValuesForProba.d.ts +13 -0
  23. package/lib/exercises/math/probaStat/basicProbas/possibleValuesForProba.d.ts.map +1 -0
  24. package/lib/exercises/math/probaStat/basicProbas/possibleValuesForProba.js +293 -0
  25. package/lib/index.d.ts +779 -760
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/latexTester.d.ts.map +1 -1
  28. package/lib/latexTester.js +3 -1
  29. package/lib/math/polynomials/trinom.d.ts +1 -0
  30. package/lib/math/polynomials/trinom.d.ts.map +1 -1
  31. package/lib/math/polynomials/trinom.js +5 -0
  32. package/lib/tests/questionTest.d.ts.map +1 -1
  33. package/lib/tests/questionTest.js +4 -0
  34. package/lib/utils/strings/capitalize.d.ts +2 -0
  35. package/lib/utils/strings/capitalize.d.ts.map +1 -0
  36. package/lib/utils/strings/capitalize.js +3 -0
  37. package/lib/utils/strings/reverseString.d.ts +2 -0
  38. package/lib/utils/strings/reverseString.d.ts.map +1 -0
  39. package/lib/utils/strings/reverseString.js +3 -0
  40. 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":"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"}
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
+ ![](https://heureuxhasarddocsbucket.s3.eu-west-3.amazonaws.com/mathliveV2/activities/quizzes/generator/boxplot.png)
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
+ };
@@ -4,4 +4,5 @@ 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
  //# sourceMappingURL=index.d.ts.map
@@ -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;AAgIF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAczD,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
+ };
@@ -6,6 +6,9 @@ type Identifiers = {
6
6
  angleIndex: number;
7
7
  apexIndex: number;
8
8
  };
9
- export declare const recognizeAngleType: Exercise<Identifiers>;
9
+ type Options = {
10
+ angleTypes: string[];
11
+ };
12
+ export declare const recognizeAngleType: Exercise<Identifiers, Options>;
10
13
  export {};
11
14
  //# sourceMappingURL=recognizeAngleType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recognizeAngleType.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/angles/recognizeAngleType.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAUtC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAmVF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAcpD,CAAC"}
1
+ {"version":3,"file":"recognizeAngleType.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/angles/recognizeAngleType.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAiBT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAWtC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA+SF,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAeF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAe7D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
1
+ import { addValidProp, shuffleProps, tryToAddWrongProp, GeneratorOptionTarget, GeneratorOptionType, } from "../../../../exercises/exercise.js";
2
2
  import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
3
3
  import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
4
4
  import { Angle } from "../../../../math/geometry/angle.js";
@@ -9,6 +9,7 @@ import { randint } from "../../../../math/utils/random/randint.js";
9
9
  import { NumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
10
10
  import { random } from "../../../../utils/alea/random.js";
11
11
  import { randomLetter } from "../../../../utils/strings/randomLetter.js";
12
+ import { reverseString } from "../../../../utils/strings/reverseString.js";
12
13
  const getAngle = (identifiers) => {
13
14
  const indexes = getAnglePointsIndexes(identifiers.angleIndex, identifiers.apexIndex);
14
15
  return new Angle(indexes.map((i) => PointConstructor.fromIdentifiers(identifiers.points[i])));
@@ -168,54 +169,13 @@ const isAnswerValid = (ans, { answer }) => {
168
169
  formated = formated.replaceAll("\\widehat{", "").replaceAll("}", "");
169
170
  }
170
171
  //TODO fix vea
171
- return "\\widehat{" + formated + "}" === answer;
172
- // let validAngles: string[] = [answer];
173
- // switch (angleType) {
174
- // case "opposé par le sommet":
175
- // // return studentAngle.isSummitOpposite(answerAngle);
176
- // case "alterne-interne":
177
- // // return studentAngle.isAlterneInterne(answerAngle);
178
- // break;
179
- // case "correspondant":
180
- // default:
181
- // // return studentAngle.isCorrespondant(answerAngle);
182
- // break;
183
- // }
184
- // return validAngles.includes(formated);
185
- // let formated = ans;
186
- // if (ans.includes("widehat")) {
187
- // formated = formated.replaceAll("\\widehat{", "").replaceAll("}", "");
188
- // }
189
- // const pointsNames = Array.from(new Set(formated.split("")));
190
- // if (pointsNames.length !== 3 || pointsNames.some((char) => !isLetter(char)))
191
- // return false;
192
- // const studentPoints = pointsNames.map((char) =>
193
- // PointConstructor.fromIdentifiers(points.find((p) => p.name === char)!),
194
- // );
195
- // const answerAngle = getAngle({ angleIndex, apexIndex, points });
196
- // const studentAngle = new Angle(studentPoints);
197
- // //? on va accpter aussi des angles correspondants ou alternes-internes qui ne sont pas définis par les sécantes tracées
198
- // //? c'est chelou mais dans le fond ça fait sens (c'est vrai mathémtiquement)
199
- // switch (angleType) {
200
- // case "opposé par le sommet":
201
- // return studentAngle.isSummitOpposite(answerAngle);
202
- // case "alterne-interne":
203
- // return studentAngle.isAlterneInterne(answerAngle);
204
- // break;
205
- // case "correspondant":
206
- // default:
207
- // return studentAngle.isCorrespondant(answerAngle);
208
- // break;
209
- // }
210
- return false;
172
+ return ("\\widehat{" + formated + "}" === answer ||
173
+ "\\widehat{" + reverseString(formated) + "}" === answer);
211
174
  };
212
175
  //deux paires de sécantes
213
- const getRecognizeAngleTypeQuestion = () => {
214
- const angleType = random([
215
- "alterne-interne",
216
- "correspondant",
217
- "opposé par le sommet",
218
- ]);
176
+ const getRecognizeAngleTypeQuestion = (optsIn) => {
177
+ const opts = optsIn ?? optsDefault;
178
+ const angleType = random(opts.angleTypes);
219
179
  const names = [];
220
180
  for (let i = 0; i < 12; i++) {
221
181
  names.push(randomLetter(true, names));
@@ -273,11 +233,25 @@ const getQuestionFromIdentifiers = (identifiers) => {
273
233
  };
274
234
  return question;
275
235
  };
236
+ const optsDefault = {
237
+ angleTypes: ["alterne-interne", "correspondant", "opposé par le sommet"],
238
+ };
239
+ const options = [
240
+ {
241
+ id: "angleTypes",
242
+ label: "Type d'angles demandés",
243
+ target: GeneratorOptionTarget.generation,
244
+ type: GeneratorOptionType.multiselect,
245
+ values: ["alterne-interne", "correspondant", "opposé par le sommet"],
246
+ defaultValue: optsDefault.angleTypes,
247
+ },
248
+ ];
276
249
  export const recognizeAngleType = {
277
250
  id: "recognizeAngleType",
278
251
  label: "Reconnaître un angle alterne-interne, correspondant, opposé par le sommet",
279
252
  isSingleStep: true,
280
253
  generator: (nb, opts) => getDistinctQuestions(() => getRecognizeAngleTypeQuestion(opts), nb),
254
+ options,
281
255
  qcmTimer: 60,
282
256
  freeTimer: 60,
283
257
  getPropositions,
@@ -1 +1 @@
1
- {"version":3,"file":"polynomialPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/polynomialPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAGJ,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAiBF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAKjE,CAAC;AAEF,eAAO,MAAM,6CAA6C,EAAE,0BAA0B,CACpF,WAAW,CAYZ,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAexE,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,GAAG,CAAC,WAAW,CA2B7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAYrD,CAAC"}
1
+ {"version":3,"file":"polynomialPrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/polynomialPrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,0BAA0B,EAE1B,YAAY,EAEZ,iBAAiB,EACjB,GAAG,EAGJ,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAiBF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAKjE,CAAC;AAEF,eAAO,MAAM,6CAA6C,EAAE,0BAA0B,CACpF,WAAW,CAYZ,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAexE,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,GAAG,CAAC,WAAW,CA8B7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAYrD,CAAC"}
@@ -46,12 +46,12 @@ export const getPolynomialPrimitivePropositions = (n, { answer, coeffs }) => {
46
46
  }
47
47
  return shuffle(propositions);
48
48
  };
49
- export const isPolynomialPrimitiveAnswerValid = (ans) => {
49
+ export const isPolynomialPrimitiveAnswerValid = (ans, { answer }) => {
50
50
  try {
51
51
  const parsed = parseAlgebraic(ans);
52
52
  if (!parsed)
53
53
  return false;
54
- const ansParsed = parseAlgebraic(ans);
54
+ const ansParsed = parseAlgebraic(answer);
55
55
  return (parsed
56
56
  .simplify({
57
57
  towardsDistribute: true,