math-exercises 3.0.47 → 3.0.48

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.
@@ -1 +1 @@
1
- {"version":3,"file":"triangleThirdAngleValue.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/triangles/triangleThirdAngleValue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAkBT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAGL,mBAAmB,EAEpB,MAAM,2CAA2C,CAAC;AAQnD,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAkIF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAmBzD,CAAC"}
1
+ {"version":3,"file":"triangleThirdAngleValue.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/triangles/triangleThirdAngleValue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAGL,mBAAmB,EAEpB,MAAM,2CAA2C,CAAC;AASnD,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8IF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAoBzD,CAAC"}
@@ -6,6 +6,7 @@ import { randint } from "../../../../math/utils/random/randint.js";
6
6
  import { round } from "../../../../math/utils/round.js";
7
7
  import { DegreeNode } from "../../../../tree/nodes/geometry/degree.js";
8
8
  import { add } from "../../../../tree/nodes/operators/addNode.js";
9
+ import { substract } from "../../../../tree/nodes/operators/substractNode.js";
9
10
  import { degreeParser } from "../../../../tree/parsers/degreeParser.js";
10
11
  import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
11
12
  const getPropositions = (n, { answer }) => {
@@ -20,7 +21,13 @@ const getPropositions = (n, { answer }) => {
20
21
  const getAnswer = (identifiers) => {
21
22
  const { triangleIdentifiers, angleAsked } = identifiers;
22
23
  const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
23
- return triangle.angles[angleAsked].getValueNode(true).toTex() + "^{\\circ}";
24
+ const angles = [
25
+ triangle.angles[(angleAsked + 1) % 3].getValueNode(true),
26
+ triangle.angles[(angleAsked + 2) % 3].getValueNode(true),
27
+ ];
28
+ const addAngles = add(angles[0], angles[1]);
29
+ const simp = addAngles.simplify();
30
+ return substract(180, simp).simplify().toTex() + "^{\\circ}";
24
31
  };
25
32
  const getInstruction = (identifiers) => {
26
33
  const { triangleIdentifiers, angleAsked } = identifiers;
@@ -66,7 +73,9 @@ $$`;
66
73
  const getGGBOptions = (identifiers) => {
67
74
  const { triangleIdentifiers, angleAsked } = identifiers;
68
75
  const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
69
- triangle.drawAngles([angleAsked], { fitCaption: true, color: "red" });
76
+ // triangle.drawAngles([angleAsked], { fitCaption: true, color: "black" });
77
+ triangle.drawAngles([angleAsked]);
78
+ triangle.highlightAngle(angleAsked, { color: "red" });
70
79
  const ggb = new GeogebraConstructor({
71
80
  commands: [...triangle.commands],
72
81
  hideAxes: true,
@@ -101,7 +110,10 @@ const getTriangleThirdAngleValueQuestion = (opts) => {
101
110
  triangleIdentifiers: triangle.toIdentifiers(),
102
111
  angleAsked: randint(0, 3),
103
112
  };
104
- const question = {
113
+ return getQuestionFromIdentifiers(identifiers);
114
+ };
115
+ const getQuestionFromIdentifiers = (identifiers) => {
116
+ return {
105
117
  answer: getAnswer(identifiers),
106
118
  instruction: getInstruction(identifiers),
107
119
  keys: getKeys(identifiers),
@@ -111,7 +123,6 @@ const getTriangleThirdAngleValueQuestion = (opts) => {
111
123
  correction: getCorrection(identifiers),
112
124
  ggbOptions: getGGBOptions(identifiers),
113
125
  };
114
- return question;
115
126
  };
116
127
  export const triangleThirdAngleValue = {
117
128
  id: "triangleThirdAngleValue",
@@ -131,4 +142,5 @@ export const triangleThirdAngleValue = {
131
142
  getGGBOptions,
132
143
  hasGeogebra: true,
133
144
  hasHintAndCorrection: true,
145
+ getQuestionFromIdentifiers,
134
146
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trigonometry.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AASnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAsHF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAe9C,CAAC"}
1
+ {"version":3,"file":"trigonometry.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AASnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAyJF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,CAmB9C,CAAC"}
@@ -7,17 +7,18 @@ import { LengthNode } from "../../../tree/nodes/geometry/lengthNode.js";
7
7
  import { FractionNode } from "../../../tree/nodes/operators/fractionNode.js";
8
8
  import { random } from "../../../utils/alea/random.js";
9
9
  import { shuffle } from "../../../utils/alea/shuffle.js";
10
- const getTrigonometry = () => {
11
- const triangle = RightTriangleConstructor.randomNiceSides({
12
- randomName: true,
13
- });
10
+ const getInstruction = (identifiers) => {
11
+ const { randAngle, triangleIdentifiers, randTrigo } = identifiers;
12
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
14
13
  const trigo = ["le cosinus", "le sinus", "la tangente"];
15
- const randTrigo = randint(0, 3);
16
- const randAngle = random([1, 2]);
17
- triangle.highlightAngle(randAngle, { color: "red" });
18
- const [sideA, sideB, sideC] = triangle.sides.map((s) => s.toInsideName());
19
14
  const angleSummit = triangle.points[randAngle].name;
15
+ return `À quel quotient est égal ${trigo[randTrigo]} de l'angle $${triangle.angles[randAngle].toTex()}$ ?`;
16
+ };
17
+ const getAnswer = (identifiers) => {
18
+ const { randAngle, triangleIdentifiers, randTrigo } = identifiers;
19
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
20
20
  let quotient;
21
+ const [sideA, sideB, sideC] = triangle.sides.map((s) => s.toInsideName());
21
22
  switch (randAngle) {
22
23
  case 1: //angle B
23
24
  quotient = [
@@ -35,27 +36,49 @@ const getTrigonometry = () => {
35
36
  ];
36
37
  break;
37
38
  }
39
+ const answer = quotient[randTrigo];
40
+ return answer;
41
+ };
42
+ const getKeys = (identifiers) => {
43
+ const { randAngle, triangleIdentifiers, randTrigo } = identifiers;
44
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
45
+ return [...triangle.points.map((p) => p.name), "equal"];
46
+ };
47
+ const getGGBOptions = (identifiers) => {
48
+ const { randAngle, triangleIdentifiers, randTrigo } = identifiers;
49
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
50
+ triangle.highlightAngle(randAngle, { color: "red" });
38
51
  const ggb = new GeogebraConstructor({
39
52
  commands: triangle.commands,
40
53
  hideAxes: true,
41
54
  hideGrid: true,
42
55
  });
43
- const answer = quotient[randTrigo];
44
- const question = {
45
- instruction: `À quel quotient est égal ${trigo[randTrigo]} de l'angle $\\widehat{${angleSummit}}$ ?`,
46
- answer,
47
- keys: [...triangle.points.map((p) => p.name), "equal"],
48
- ggbOptions: ggb.getOptions({
49
- coords: triangle.generateCoords(),
50
- }),
56
+ return ggb.getOptions({
57
+ coords: triangle.generateCoords(),
58
+ });
59
+ };
60
+ const getTrigonometry = () => {
61
+ const triangle = RightTriangleConstructor.randomNiceSides({
62
+ randomName: true,
63
+ });
64
+ const randTrigo = randint(0, 3);
65
+ const randAngle = random([1, 2]);
66
+ const identifiers = {
67
+ triangleIdentifiers: triangle.toIdentifiers(),
68
+ randAngle,
69
+ randTrigo,
70
+ };
71
+ return getQuestionFromIdentifiers(identifiers);
72
+ };
73
+ const getQuestionFromIdentifiers = (identifiers) => {
74
+ return {
75
+ instruction: getInstruction(identifiers),
76
+ answer: getAnswer(identifiers),
77
+ keys: getKeys(identifiers),
78
+ ggbOptions: getGGBOptions(identifiers),
51
79
  answerFormat: "tex",
52
- identifiers: {
53
- triangleIdentifiers: triangle.toIdentifiers(),
54
- randAngle,
55
- randTrigo,
56
- },
80
+ identifiers,
57
81
  };
58
- return question;
59
82
  };
60
83
  const getPropositions = (n, { answer, triangleIdentifiers }) => {
61
84
  const propositions = [];
@@ -116,4 +139,8 @@ export const trigonometry = {
116
139
  isAnswerValid,
117
140
  hasGeogebra: true,
118
141
  subject: "Mathématiques",
142
+ getAnswer,
143
+ getInstruction,
144
+ getGGBOptions,
145
+ getQuestionFromIdentifiers,
119
146
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trigonometryAngleCalcul.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometryAngleCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AAOnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAyDF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
1
+ {"version":3,"file":"trigonometryAngleCalcul.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometryAngleCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AAOnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AA+EF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAmBzD,CAAC"}
@@ -5,39 +5,57 @@ import { RightTriangleConstructor } from "../../../math/geometry/triangles/right
5
5
  import { randint } from "../../../math/utils/random/randint.js";
6
6
  import { round } from "../../../math/utils/round.js";
7
7
  import { shuffle } from "../../../utils/alea/shuffle.js";
8
- const getTrigonometryAngleCalcul = () => {
9
- const triangle = RightTriangleConstructor.randomNiceSides({
10
- randomName: true,
11
- });
12
- const randAngle = randint(1, 3);
13
- const hiddenSide = randint(0, 3);
8
+ const getInstruction = (identifiers) => {
9
+ const { randAngle, hiddenSide, triangleIdentifiers } = identifiers;
10
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
14
11
  const givenSides = triangle.sides.filter((s, i) => i !== hiddenSide);
12
+ return `Le triangle $${triangle.name}$ rectangle en $${triangle.points[0].name}$ est tel que $${givenSides[0].toLengthTex()}$ cm et $${givenSides[1].toLengthTex()}$ cm.
13
+
14
+ Calculer $\\widehat{${triangle.points[randAngle].name}}$ à $1^\\circ$ près.`;
15
+ };
16
+ const getAnswer = (identifiers) => {
17
+ const { randAngle, hiddenSide, triangleIdentifiers } = identifiers;
18
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
19
+ const answer = round(triangle.angles[randAngle].evaluate(), 0);
20
+ return answer + "^{\\circ}";
21
+ };
22
+ const getGGBOptions = (identifiers) => {
23
+ const { randAngle, hiddenSide, triangleIdentifiers } = identifiers;
24
+ const triangle = RightTriangleConstructor.fromIdentifiers(triangleIdentifiers);
15
25
  triangle.showSidesLength([hiddenSide]);
16
26
  triangle.highlightAngle(randAngle, { color: "red" });
17
- const answer = round(triangle.angles[randAngle].evaluate(), 0);
18
- const answerTex = answer + "^{\\circ}";
19
27
  const ggb = new GeogebraConstructor({
20
28
  commands: triangle.commands,
21
29
  hideAxes: true,
22
30
  hideGrid: true,
23
31
  });
24
- const question = {
25
- instruction: `Le triangle $${triangle.name}$ rectangle en $${triangle.points[0].name}$ est tel que $${givenSides[0].toLengthTex()}$ cm et $${givenSides[1].toLengthTex()}$ cm.
26
-
27
- Calculer $\\widehat{${triangle.points[randAngle].name}}$ à $1^\\circ$ près.`,
28
- answer: answerTex,
32
+ return ggb.getOptions({
33
+ coords: triangle.generateCoords(),
34
+ });
35
+ };
36
+ const getTrigonometryAngleCalcul = () => {
37
+ const triangle = RightTriangleConstructor.randomNiceSides({
38
+ randomName: true,
39
+ });
40
+ const randAngle = randint(1, 3);
41
+ const hiddenSide = randint(0, 3);
42
+ const identifiers = {
43
+ randAngle,
44
+ hiddenSide,
45
+ triangleIdentifiers: triangle.toIdentifiers(),
46
+ };
47
+ const question = getQuestionFromIdentifiers(identifiers);
48
+ return question;
49
+ };
50
+ const getQuestionFromIdentifiers = (identifiers) => {
51
+ return {
52
+ instruction: getInstruction(identifiers),
53
+ answer: getAnswer(identifiers),
29
54
  keys: ["degree"],
30
- ggbOptions: ggb.getOptions({
31
- coords: triangle.generateCoords(),
32
- }),
55
+ ggbOptions: getGGBOptions(identifiers),
33
56
  answerFormat: "tex",
34
- identifiers: {
35
- randAngle,
36
- hiddenSide,
37
- triangleIdentifiers: triangle.toIdentifiers(),
38
- },
57
+ identifiers,
39
58
  };
40
- return question;
41
59
  };
42
60
  const getPropositions = (n, { answer }) => {
43
61
  const propositions = [];
@@ -64,4 +82,8 @@ export const trigonometryAngleCalcul = {
64
82
  isAnswerValid,
65
83
  hasGeogebra: true,
66
84
  subject: "Mathématiques",
85
+ getAnswer,
86
+ getInstruction,
87
+ getGGBOptions,
88
+ getQuestionFromIdentifiers,
67
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trigonometrySideCalcul.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometrySideCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AASrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AAMnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AA8OF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAmBxD,CAAC"}
1
+ {"version":3,"file":"trigonometrySideCalcul.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/trigonometry/trigonometrySideCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AASrC,OAAO,EAEL,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AAMnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C,CAAC;AAiPF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAoBxD,CAAC"}
@@ -12,7 +12,7 @@ const getInstruction = (identifiers) => {
12
12
  const { givenAngle, givenSide, sideAsked, triangleIdentifiers } = identifiers;
13
13
  const triangle = TriangleConstructor.fromIdentifiers(triangleIdentifiers);
14
14
  const angleValue = triangle.angles[givenAngle].evaluate().frenchify();
15
- return `Le triangle $${triangle.name}$ rectangle en $${triangle.points[0].name}$ est tel que $${triangle.sides[givenSide].toLengthTex()}$ cm et $\\widehat{${triangle.points[givenAngle].name}} = ${angleValue}^\\circ$.
15
+ return `Le triangle $${triangle.name}$ rectangle en $${triangle.points[0].name}$ est tel que $${triangle.sides[givenSide].toLengthTex()}$ cm et $${triangle.angles[givenAngle].toTex()} = ${angleValue}^\\circ$.
16
16
 
17
17
  Calculer $${triangle.sides[sideAsked].toInsideName()}$ à $0,1$ cm près.`;
18
18
  };
@@ -51,7 +51,10 @@ const getTrigonometrySideCalcul = () => {
51
51
  sideAsked,
52
52
  triangleIdentifiers: triangle.toIdentifiers(),
53
53
  };
54
- const question = {
54
+ return getQuestionFromIdentifiers(identifiers);
55
+ };
56
+ const getQuestionFromIdentifiers = (identifiers) => {
57
+ return {
55
58
  instruction: getInstruction(identifiers),
56
59
  answer: getAnswer(identifiers),
57
60
  hint: getHint(identifiers),
@@ -61,7 +64,6 @@ const getTrigonometrySideCalcul = () => {
61
64
  answerFormat: "tex",
62
65
  identifiers,
63
66
  };
64
- return question;
65
67
  };
66
68
  const getPropositions = (n, { answer }) => {
67
69
  const propositions = [];
@@ -223,4 +225,5 @@ export const trigonometrySideCalcul = {
223
225
  getGGBOptions,
224
226
  getCorrection,
225
227
  hasHintAndCorrection: true,
228
+ getQuestionFromIdentifiers,
226
229
  };
@@ -78,7 +78,7 @@ export class Triangle {
78
78
  this.props = props;
79
79
  this.name = points.map((p) => p.name).join("");
80
80
  this.points = points;
81
- const anglePoints = [points[0], points[2], points[1]];
81
+ const anglePoints = [points[0], points[1], points[2]];
82
82
  this.angles = [
83
83
  new Angle(arrayRotation(anglePoints, 2), {
84
84
  radianValueNode: props?.anglesRadianValues?.[0],
@@ -166,7 +166,7 @@ export class Triangle {
166
166
  showSidesLength(hiddenSides) {
167
167
  this.commands.push(...this.sides
168
168
  .filter((s, i) => !hiddenSides?.includes(i))
169
- .flatMap((s) => s.getFitCaptionCommands()));
169
+ .flatMap((s) => s.getFitCaptionCommands({ size: "scriptsize" })));
170
170
  }
171
171
  getHeight(summitIndex, opts) {
172
172
  const base = LineConstructor.fromSegment(this.sides[summitIndex]);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "math-exercises",
3
3
  "type": "module",
4
- "version": "3.0.47",
4
+ "version": "3.0.48",
5
5
  "description": "Math exercises generator for middle school and high school",
6
6
  "main": "lib/index.js",
7
7
  "files": [