math-exercises 3.0.130 → 3.0.131

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":"equationWithDistributivity.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/equation/equationWithDistributivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAmBrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA+HF,KAAK,OAAO,GAAG;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAgEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAerE,CAAC"}
1
+ {"version":3,"file":"equationWithDistributivity.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/equation/equationWithDistributivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAmBrC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAyIF,KAAK,OAAO,GAAG;IACb,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAgEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAerE,CAAC"}
@@ -24,16 +24,15 @@ const getPropositions = (n, { answer }, opts) => {
24
24
  });
25
25
  return shuffleProps(propositions, n);
26
26
  };
27
- const getAnswer = (identifiers) => {
27
+ const getAnswerNode = (identifiers) => {
28
28
  const { type, a, b, c, d, e, f } = identifiers;
29
- const sol = type
30
- ? frac(substract(multiply(d, f), multiply(a, c)), substract(multiply(a, b), multiply(d, e)))
31
- .simplify()
32
- .toTex()
33
- : frac(substract(e, multiply(a, c)), substract(multiply(a, b), d))
34
- .simplify()
35
- .toTex();
36
- return `x=${sol}`;
29
+ return type
30
+ ? frac(substract(multiply(d, f), multiply(a, c)), substract(multiply(a, b), multiply(d, e))).simplify()
31
+ : frac(substract(e, multiply(a, c)), substract(multiply(a, b), d)).simplify();
32
+ };
33
+ const getAnswer = (identifiers) => {
34
+ const answerNode = getAnswerNode(identifiers);
35
+ return `x=${answerNode.toTex()}`;
37
36
  };
38
37
  const getInstruction = (identifiers) => {
39
38
  const { type, a, b, c, d, e, f } = identifiers;
@@ -100,11 +99,16 @@ $$
100
99
  const getKeys = () => {
101
100
  return ["x", "equal"];
102
101
  };
103
- const isAnswerValid = (ans, { answer }) => {
102
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
104
103
  const parsed = equationSolutionParser(ans);
105
104
  if (!parsed)
106
105
  return false;
107
- return `x=${parsed.toTex()}` === answer;
106
+ return (`x=${parsed.toTex()}` === answer ||
107
+ (() => {
108
+ const ansNode = parsed;
109
+ const answerNode = getAnswerNode(identifiers);
110
+ return substract(ansNode, answerNode).simplify().evaluate() === 0;
111
+ })());
108
112
  };
109
113
  const getEquationWithDistributivityQuestion = (opts) => {
110
114
  const type = random([0, 1]);
@@ -1 +1 @@
1
- {"version":3,"file":"multiplicationEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/equation/multiplicationEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkIF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
1
+ {"version":3,"file":"multiplicationEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/equation/multiplicationEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkIF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
@@ -8,6 +8,8 @@ import { MultiplyNode } from "../../../../tree/nodes/operators/multiplyNode.js";
8
8
  import { DiscreteSetNode } from "../../../../tree/nodes/sets/discreteSetNode.js";
9
9
  import { alignTex } from "../../../../utils/latex/alignTex.js";
10
10
  import { shuffle } from "../../../../utils/alea/shuffle.js";
11
+ import { SetVEA } from "../../../../exercises/vea/setVEA.js";
12
+ import { discreteSetParser } from "../../../../tree/parsers/discreteSetParser.js";
11
13
  const getStatementNode = (identifiers) => {
12
14
  const { a, b, c, d } = identifiers;
13
15
  const polynome1 = new Polynomial([b, a]);
@@ -110,14 +112,13 @@ const getPropositions = (n, { answer }) => {
110
112
  return shuffle(propositions);
111
113
  };
112
114
  const isAnswerValid = (ans, { a, b, c, d }) => {
115
+ const parsed = discreteSetParser(ans);
116
+ if (!parsed)
117
+ return false;
113
118
  const sol1 = new Rational(-b, a).simplify().toTree();
114
119
  const sol2 = new Rational(-d, c).simplify().toTree();
115
120
  const sortedSols = -b / a < -d / c ? [sol1, sol2] : [sol2, sol1];
116
- const answer = new EquationSolutionNode(new DiscreteSetNode(sortedSols), {
117
- opts: { allowFractionToDecimal: true },
118
- });
119
- const texs = answer.toAllValidTexs();
120
- return texs.includes(ans);
121
+ return SetVEA.isArrayOfNodesValid(parsed.elements, sortedSols);
121
122
  };
122
123
  export const multiplicationEquation = {
123
124
  id: "multiplicationEquation",
@@ -6,5 +6,4 @@ export * from "./factorizeCanonicalForm.js";
6
6
  export * from "./factorizeCanonicalFormWithSqrt.js";
7
7
  export * from "./factoType2.js";
8
8
  export * from "./factoByX.js";
9
- export * from "./factorizeAX2PlusBX.js";
10
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/factorisation/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/factorisation/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
@@ -6,4 +6,4 @@ export * from "./factorizeCanonicalForm.js";
6
6
  export * from "./factorizeCanonicalFormWithSqrt.js";
7
7
  export * from "./factoType2.js";
8
8
  export * from "./factoByX.js";
9
- export * from "./factorizeAX2PlusBX.js";
9
+ // export * from "./factorizeAX2PlusBX.js"; //! existe déjà
@@ -81,7 +81,7 @@ const getHint = () => {
81
81
  return `Voici les énoncés des théorèmes de Pythagore et de Thalès, et leurs réciproques :
82
82
 
83
83
  - **Théorème de Pythagore** : Dans un triangle rectangle, le carré de l'hypoténuse est égal à la somme des carrés des deux autres côtés.
84
- - **Réciproque du théorème de Pythagore** : Si dans un triangle, le carré de l'hypoténuse est égal à la somme des carrés des deux autres côtés, alors le triangle est rectangle.
84
+ - **Réciproque du théorème de Pythagore** : Si dans un triangle, le carré du plus grand côté est égal à la somme des carrés des deux autres côtés, alors le triangle est rectangle.
85
85
  - **Théorème de Thalès** : Soit un triangle $ABC$, et $D$ un point sur la droite $(AB)$ et $E$ un point sur la droite $(AC)$. Si les droites $(DE)$ et $(BC)$ sont parallèles, alors :
86
86
 
87
87
  $$
@@ -98,7 +98,7 @@ const getCorrection = (identifiers) => {
98
98
  On applique ce théorème dans le triangle $ABD$ rectangle en $D$. En effet, d'après le théorème de Pythagore, on a $AB^2 = AD^2 + DB^2$. Puisqu'on connaît les longueurs $AD$ et $DB$, on peut en déduire la longueur $AB$.`;
99
99
  }
100
100
  else {
101
- return `Il faut utiliser la réciproque du théorème de Pythagore : si dans un triangle, le carré de l'hypoténuse est égal à la somme des carrés des deux autres côtés, alors le triangle est rectangle.
101
+ return `Il faut utiliser la réciproque du théorème de Pythagore : si dans un triangle, le carré du plus grand côté est égal à la somme des carrés des deux autres côtés, alors le triangle est rectangle.
102
102
 
103
103
  On applique cette réciproque dans le triangle $BCD$. En effet, on connaît les longueurs des trois côtés. Il suffit donc de montrer que $BC^2 = BD^2 + CD^2$.`;
104
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evolutionRateFromValues.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/percent/evolutions/evolutionRateFromValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAyGF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAgBzD,CAAC"}
1
+ {"version":3,"file":"evolutionRateFromValues.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/percent/evolutions/evolutionRateFromValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAyHF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAgBzD,CAAC"}
@@ -4,9 +4,11 @@ import { randfloat } from "../../../../math/utils/random/randfloat.js";
4
4
  import { randint } from "../../../../math/utils/random/randint.js";
5
5
  import { round } from "../../../../math/utils/round.js";
6
6
  import { percentParser } from "../../../../tree/parsers/percentParser.js";
7
+ import { valueParser } from "../../../../tree/parsers/valueParser.js";
7
8
  import { coinFlip } from "../../../../utils/alea/coinFlip.js";
8
9
  import { doWhile } from "../../../../utils/doWhile.js";
9
10
  import { alignTex } from "../../../../utils/latex/alignTex.js";
11
+ import { approxOrEqual } from "../../../../utils/latex/approxOrEqual.js";
10
12
  const getPropositions = (n, { answer, vd, vf }) => {
11
13
  const propositions = [];
12
14
  addValidProp(propositions, answer);
@@ -25,42 +27,53 @@ const getAnswer = (identifiers) => {
25
27
  return taux.frenchify() + "\\%";
26
28
  };
27
29
  const getInstruction = (identifiers) => {
28
- return `Un prix passe de $${identifiers.vd.frenchify()}€$ à $${identifiers.vf.frenchify()}€$. Quel est le taux d'évolution du prix, en pourcentage ? Arrondir au centième de pourcentage.`;
30
+ return `Un prix passe de $${identifiers.vd.frenchify()}€$ à $${identifiers.vf.frenchify()}€$. Quel est le taux d'évolution du prix ? Arrondir au centième de pourcent.`;
29
31
  };
30
32
  const getHint = () => {
31
- return `Si une valeur passe d'une valeur de départ $V_d$ à une valeur d'arrivée $V_a$, alors le taux d'évolution $t$ en pourcentage est donné par la formule :
33
+ return `Si une valeur passe d'une valeur de départ $V_d$ à une valeur d'arrivée $V_a$, alors le taux d'évolution $t$ est donné par la formule :
32
34
 
33
35
  $$
34
- t = \\frac{V_a-V_d}{V_d}\\times 100
36
+ t = \\frac{V_a-V_d}{V_d}
35
37
  $$`;
36
38
  };
37
39
  const getCorrection = (identifiers) => {
38
- const answer = round(((identifiers.vf - identifiers.vd) / identifiers.vd) * 100, 2).frenchify();
39
- return `Si une valeur passe d'une valeur de départ $V_d$ à une valeur d'arrivée $V_a$, alors le taux d'évolution $t$ en pourcentage est donné par la formule :
40
+ const { vd, vf } = identifiers;
41
+ const percentAnswer = round(((identifiers.vf - identifiers.vd) / identifiers.vd) * 100, 2).frenchify();
42
+ return `Si une valeur passe d'une valeur de départ $V_d$ à une valeur d'arrivée $V_a$, alors le taux d'évolution $t$ est donné par la formule :
40
43
 
41
44
  $$
42
- t = \\frac{V_a-V_d}{V_d}\\times 100
45
+ t = \\frac{V_a-V_d}{V_d}
43
46
  $$
44
47
 
45
- Ici, on a $V_d = ${identifiers.vd.frenchify()}$ et $V_a = ${identifiers.vf.frenchify()}$.
48
+ Ici, on a $V_d = ${vd.frenchify()}$ et $V_a = ${vf.frenchify()}$.
46
49
 
47
- Donc, le taux d'évolution, en pourcentage, est :
50
+ Donc, le taux d'évolution est :
48
51
 
49
52
  ${alignTex([
50
- [
51
- "t",
52
- "=",
53
- `\\frac{${identifiers.vf.frenchify()}-${identifiers.vd.frenchify()}}{${identifiers.vd.frenchify()}}\\times 100`,
54
- ],
55
- ["", "\\approx", answer],
53
+ ["t", "=", `\\frac{${vf.frenchify()}-${vd.frenchify()}}{${vd.frenchify()}}`],
54
+ ["", "=", `\\frac{${round(vf - vd, 4).frenchify()}}{${vd.frenchify()}}`],
55
+ ["", ...approxOrEqual((vf - vd) / vd, 4)],
56
56
  ])}
57
+
58
+ Sous forme de pourcentage, le taux d'évolution est donc :
59
+
60
+ $$
61
+ ${percentAnswer}\\%
62
+ $$
57
63
  `;
58
64
  };
59
65
  const getKeys = () => {
60
66
  return ["percent"];
61
67
  };
62
- const isAnswerValid = (ans, { answer }) => {
63
- return percentParser(ans) === answer;
68
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
69
+ if (ans.includes("\\%")) {
70
+ const value = percentParser(ans);
71
+ return value === answer;
72
+ }
73
+ const refinedAns = ans.replaceAll("\\%", ``);
74
+ const nodeAns = valueParser(refinedAns);
75
+ const nodeAnswer = round((identifiers.vf - identifiers.vd) / identifiers.vd, 4);
76
+ return nodeAns === nodeAnswer;
64
77
  };
65
78
  const getEvolutionRateFromValuesQuestion = () => {
66
79
  const vd = coinFlip() ? randint(1, 100) : randfloat(1, 100, 2);
@@ -3,11 +3,7 @@ type Identifiers = {
3
3
  indexSituation: number;
4
4
  total: number;
5
5
  lefties: number;
6
- opts: Options;
7
6
  };
8
- type Options = {
9
- isPercentSymbolRequired: boolean;
10
- };
11
- export declare const findProportion: Exercise<Identifiers, Options>;
7
+ export declare const findProportion: Exercise<Identifiers>;
12
8
  export {};
13
9
  //# sourceMappingURL=findProportion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findProportion.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/percent/findProportion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAkBT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAwNF,KAAK,OAAO,GAAG;IACb,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAeF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAgBzD,CAAC"}
1
+ {"version":3,"file":"findProportion.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/percent/findProportion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAarC,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAgOF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAehD,CAAC"}
@@ -1,26 +1,29 @@
1
- import { GeneratorOptionTarget, GeneratorOptionType, addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
1
+ import { addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
2
  import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
3
  import { randfloat } from "../../../math/utils/random/randfloat.js";
4
4
  import { randint } from "../../../math/utils/random/randint.js";
5
5
  import { round } from "../../../math/utils/round.js";
6
- import { percentParser } from "../../../tree/parsers/percentParser.js";
6
+ import { frac } from "../../../tree/nodes/operators/fractionNode.js";
7
+ import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
8
+ import { substract } from "../../../tree/nodes/operators/substractNode.js";
9
+ import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
7
10
  import { random } from "../../../utils/alea/random.js";
8
11
  import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
9
- import { approxOrEqual } from "../../../utils/latex/approxOrEqual.js";
12
+ import { alignTex } from "../../../utils/latex/alignTex.js";
10
13
  const situations = [
11
14
  {
12
15
  instruction: (total, lefties) => `${random([
13
16
  `Dans un lycée de $${total}$ élèves, $${lefties}$ sont gauchers.`,
14
17
  `Dans un lycée, $${lefties}$ élèves sont gauchers sur un total de $${total}$ élèves.`,
15
18
  ])}
16
- Quelle est la proportion de gauchers dans ce lycée, en pourcentage ?`,
17
- hint: `La proportion de gauchers en pourcents s'obtient par la formule :
19
+ Quelle est la proportion de gauchers dans ce lycée ?`,
20
+ hint: `La proportion de gauchers s'obtient par la formule :
18
21
 
19
22
  $$
20
- \\frac{\\text{nombre de gauchers}}{\\text{nombre total d'élèves}}\\times 100
23
+ \\frac{\\text{nombre de gauchers}}{\\text{nombre total d'élèves}}
21
24
  $$
22
25
  `,
23
- correction: `La proportion de gauchers en pourcentage dans ce lycée est de`,
26
+ correction: `La proportion de gauchers dans ce lycée est de`,
24
27
  randTotal: () => randint(500, 2000),
25
28
  },
26
29
  {
@@ -28,14 +31,14 @@ $$
28
31
  `Dans une casse automobile, il y a $${total}$ voitures dont $${lefties}$ ont le volant à gauche.`,
29
32
  `Dans une casse automobile, $${lefties}$ voitures ont le volant à gauche. Il y a au total $${total}$ voitures.`,
30
33
  ])}
31
- Quelle est la proportion de voitures avec le volant à gauche dans cette casse, en pourcentage ?`,
32
- hint: `La proportion, en pourcents, de voitures avec le volant à gauche s'obtient par la formule :
34
+ Quelle est la proportion de voitures avec le volant à gauche dans cette casse ?`,
35
+ hint: `La proportion de voitures avec le volant à gauche s'obtient par la formule :
33
36
 
34
37
  $$
35
- \\frac{\\text{nombre de voitures avec volant à gauche}}{\\text{nombre total de voitures}}\\times 100
38
+ \\frac{\\text{nombre de voitures avec volant à gauche}}{\\text{nombre total de voitures}}
36
39
  $$
37
40
  `,
38
- correction: `La proportion, en pourcentage, de voitures avec le volant à gauche est de`,
41
+ correction: `La proportion de voitures avec le volant à gauche est de`,
39
42
  randTotal: () => randint(100, 500),
40
43
  },
41
44
  {
@@ -43,14 +46,14 @@ $$
43
46
  `Dans un restaurant italien, sur un total de $${total}$ clients, $${lefties}$ ont commandé des pâtes.`,
44
47
  `Dans un restaurant italien, $${lefties}$ clients ont commandé des pâtes. Il y a au total $${total}$ clients.`,
45
48
  ])}
46
- Quelle est la proportion de clients qui ont commandé des pâtes, en pourcentage ?`,
47
- hint: `La proportion en pourcents de clients qui ont commandé des pâtes s'obtient par la formule :
49
+ Quelle est la proportion de clients qui ont commandé des pâtes ?`,
50
+ hint: `La proportion de clients qui ont commandé des pâtes s'obtient par la formule :
48
51
 
49
52
  $$
50
- \\frac{\\text{nombre de clients ayant commandé des pâtes}}{\\text{nombre total de clients}}\\times 100
53
+ \\frac{\\text{nombre de clients ayant commandé des pâtes}}{\\text{nombre total de clients}}
51
54
  $$
52
55
  `,
53
- correction: `La proportion en pourcentage de clients ayant commandé des pâtes est de`,
56
+ correction: `La proportion de clients ayant commandé des pâtes est de`,
54
57
  randTotal: () => randint(30, 200),
55
58
  },
56
59
  {
@@ -58,14 +61,14 @@ $$
58
61
  `Dans une cagette de $${total}$ pommes, $${lefties}$ sont véreuses.`,
59
62
  `Dans une cagette de pommes, $${lefties}$ sont véreuses. Il y a au total $${total}$ pommes.`,
60
63
  ])}
61
- Quelle est la proportion de pommes véreuses dans la cagette, en pourcentage ?`,
62
- hint: `La proportion, en pourcents, de pommes véreuses s'obtient par la formule :
64
+ Quelle est la proportion de pommes véreuses dans la cagette ?`,
65
+ hint: `La proportion de pommes véreuses s'obtient par la formule :
63
66
 
64
67
  $$
65
- \\frac{\\text{nombre de pommes véreuses}}{\\text{nombre total de pommes}}\\times 100
68
+ \\frac{\\text{nombre de pommes véreuses}}{\\text{nombre total de pommes}}
66
69
  $$
67
70
  `,
68
- correction: `La proportion, en pourcentage, de pommes véreuses est de`,
71
+ correction: `La proportion de pommes véreuses est de`,
69
72
  randTotal: () => randint(30, 100),
70
73
  },
71
74
  {
@@ -73,14 +76,14 @@ $$
73
76
  `Dans un car scolaire transportant $${total}$ élèves, $${lefties}$ sont du côté gauche.`,
74
77
  `Dans un car scolaire, $${lefties}$ élèves sont du côté gauche. Le car transporte $${total}$ élèves.`,
75
78
  ])}
76
- Quelle est la proportion d'élèves du côté gauche du car, en pourcentage ?`,
77
- hint: `La proportion en pourcents d'élèves du gauche du car s'obtient par la formule :
79
+ Quelle est la proportion d'élèves du côté gauche du car ?`,
80
+ hint: `La proportion d'élèves du gauche du car s'obtient par la formule :
78
81
 
79
82
  $$
80
- \\frac{\\text{nombre d'élèves du côté gauche}}{\\text{nombre d'élèves dans le car}}\\times 100
83
+ \\frac{\\text{nombre d'élèves du côté gauche}}{\\text{nombre d'élèves dans le car}}
81
84
  $$
82
85
  `,
83
- correction: `La proportion en pourcentage d'élèves du côté gauche est de`,
86
+ correction: `La proportion d'élèves du côté gauche est de`,
84
87
  randTotal: () => randint(20, 40),
85
88
  },
86
89
  {
@@ -88,54 +91,67 @@ $$
88
91
  `Dans un champ, au mois de septembre, sur $${total}$ champignons, $${lefties}$ sont vénéneux.`,
89
92
  `Dans un champ, au mois de septembre, $${lefties}$ champignons sont vénéneux sur un total de $${total}$ champignons.`,
90
93
  ])}
91
- Quelle est la proportion de champignons vénéneux dans ce champ, en pourcentage ?`,
92
- hint: `La proportion de champignons vénéneux dans ce champ, en pourcents, s'obtient par la formule :
94
+ Quelle est la proportion de champignons vénéneux dans ce champ ?`,
95
+ hint: `La proportion de champignons vénéneux dans ce champ s'obtient par la formule :
93
96
 
94
97
  $$
95
- \\frac{\\text{nombre de champignons vénéneux}}{\\text{nombre total de champignons}}\\times 100
98
+ \\frac{\\text{nombre de champignons vénéneux}}{\\text{nombre total de champignons}}
96
99
  $$
97
100
  `,
98
- correction: `La proportion en pourcentage de champignons vénéneux dans ce champ est de`,
101
+ correction: `La proportion de champignons vénéneux dans ce champ est de`,
99
102
  randTotal: () => randint(20, 400),
100
103
  },
101
104
  ];
102
105
  const getInstruction = (identifiers) => {
103
- const { indexSituation, total, lefties, opts } = identifiers;
106
+ const { indexSituation, total, lefties } = identifiers;
104
107
  const situation = situations[indexSituation];
105
108
  return `${situation.instruction(total, lefties)}
106
109
 
107
- Arrondir au centième de pourcent.
108
- ${opts.isPercentSymbolRequired
109
- ? `
110
-
111
- Ne pas oublier le symbole $\\%$ à la fin.`
112
- : ``}`;
110
+ Arrondir au centième de pourcent.`;
113
111
  };
114
112
  const getHint = (identifiers) => {
115
113
  const { indexSituation } = identifiers;
116
114
  const situation = situations[indexSituation];
117
- return situation.hint;
115
+ return `${situation.hint}
116
+
117
+ Rappel :
118
+
119
+ $$
120
+ 2\\% = 0,02
121
+ $$
122
+
123
+ $$
124
+ 2,01\\% = 0,0201
125
+ $$
126
+
127
+ `;
118
128
  };
119
129
  const getCorrection = (identifiers) => {
120
- const { indexSituation, total, lefties, opts } = identifiers;
130
+ const { indexSituation, total, lefties } = identifiers;
121
131
  const situation = situations[indexSituation];
122
- const frac = (100 * lefties) / total;
132
+ const fractionNode = frac(lefties, total);
133
+ const roundedProportion = round(frac(lefties, total).evaluate(), 4);
134
+ const isEqual = substract(frac(lefties, total), round(frac(lefties, total).evaluate(), 4).toTree()).evaluate() === 0;
135
+ const middleSymbol = isEqual ? "=" : "\\approx";
123
136
  return `On a :
124
137
 
125
- $$
126
- \\frac{${lefties}}{${total}}\\times 100 ${approxOrEqual(frac, 2).join("")}
127
- $$
138
+ ${alignTex([
139
+ [`${fractionNode.toTex()}`, middleSymbol, `${roundedProportion.frenchify()}`],
140
+ [
141
+ "",
142
+ middleSymbol,
143
+ `${roundedProportion.frenchify()} \\times 100 \\times \\frac{1}{100}`,
144
+ ],
145
+ ["", middleSymbol, `${roundedProportion.frenchify()} \\times 100 \\ \\%`],
146
+ ["", middleSymbol, `${getAnswer(identifiers)}`],
147
+ ])}
128
148
 
129
- ${situation.correction} $${getAnswer(identifiers)}$.
130
- ${opts.isPercentSymbolRequired
131
- ? `
132
-
133
- Attention, ici le symbole "$\\%$" est requis à la fin.`
134
- : ``}`;
149
+ ${situation.correction} $${getAnswer(identifiers)}$.`;
135
150
  };
136
151
  const getAnswer = (identifiers) => {
137
152
  const { total, lefties } = identifiers;
138
- const answer = round((lefties / total) * 100, 2).frenchify() + "\\%";
153
+ const answer = round(multiply(frac(lefties, total), 100).evaluate(), 2).frenchify() +
154
+ "\\%";
139
155
  return answer;
140
156
  };
141
157
  const getPropositions = (n, { answer, total, lefties }) => {
@@ -147,34 +163,27 @@ const getPropositions = (n, { answer, total, lefties }) => {
147
163
  });
148
164
  return shuffleProps(propositions, n);
149
165
  };
150
- const isAnswerValid = (ans, { answer, opts }) => {
166
+ const isAnswerValid = (ans, { answer, ...identifiers }) => {
167
+ const { lefties, total } = identifiers;
151
168
  try {
152
- if (opts.isPercentSymbolRequired) {
153
- if (!ans.includes("\\%")) {
154
- return false;
155
- }
156
- else {
157
- return percentParser(ans) === answer;
158
- }
159
- }
160
- else {
161
- const texs = [answer, answer.replace("\\%", "")];
162
- return texs.includes(ans);
163
- }
169
+ const percentNode = frac(1, 100);
170
+ const refinedAns = ans.replaceAll("\\%", `({${percentNode.toTex()}})`);
171
+ const nodeAns = parseAlgebraic(refinedAns);
172
+ const nodeAnswer = round(lefties / total, 4);
173
+ return substract(nodeAns, nodeAnswer).simplify().evaluate() === 0;
164
174
  }
165
175
  catch (err) {
166
176
  return handleVEAError(err);
167
177
  }
168
178
  };
169
- const getFindProportionQuestion = (optsIn) => {
170
- const opts = optsIn ?? optsDefault;
179
+ const getFindProportionQuestion = () => {
171
180
  const indexSituation = randint(0, situations.length);
172
181
  const situation = situations[indexSituation];
173
182
  const total = situation.randTotal();
174
183
  const lefties = round(randfloat(0.1, 0.9) * total, 0);
175
- return getQuestionFromIdentifiers({ indexSituation, total, lefties, opts });
184
+ return getQuestionFromIdentifiers({ indexSituation, total, lefties });
176
185
  };
177
- const getQuestionFromIdentifiers = (identifiers, opts) => {
186
+ const getQuestionFromIdentifiers = (identifiers) => {
178
187
  const question = {
179
188
  answer: getAnswer(identifiers),
180
189
  instruction: getInstruction(identifiers),
@@ -183,30 +192,15 @@ const getQuestionFromIdentifiers = (identifiers, opts) => {
183
192
  identifiers,
184
193
  hint: getHint(identifiers),
185
194
  correction: getCorrection(identifiers),
186
- options: opts,
187
195
  };
188
196
  return question;
189
197
  };
190
- const optsDefault = {
191
- isPercentSymbolRequired: false,
192
- };
193
- const options = [
194
- {
195
- id: "isPercentSymbolRequired",
196
- label: "Symbole pourcent requis",
197
- target: GeneratorOptionTarget.generation,
198
- type: GeneratorOptionType.checkbox,
199
- values: [false, true],
200
- defaultValue: optsDefault.isPercentSymbolRequired,
201
- },
202
- ];
203
198
  export const findProportion = {
204
199
  id: "findProportion",
205
200
  connector: "=",
206
- label: "Calculer une proportion en pourcentage",
201
+ label: "Calculer une proportion",
207
202
  isSingleStep: true,
208
- generator: (nb, opts) => getDistinctQuestions(() => getFindProportionQuestion(opts), nb),
209
- options,
203
+ generator: (nb) => getDistinctQuestions(getFindProportionQuestion, nb),
210
204
  qcmTimer: 60,
211
205
  freeTimer: 60,
212
206
  getPropositions,
@@ -30,7 +30,7 @@ Que vaut l'espérance $E(X)$ de $X$ ?
30
30
  `;
31
31
  };
32
32
  const getHint = () => {
33
- return `$V(X)$ est la somme des produits des valeurs de $X$ par leur probabilité. `;
33
+ return `$E(X)$ est la somme des produits des valeurs de $X$ par leur probabilité. `;
34
34
  };
35
35
  const getCorrection = (identifiers) => {
36
36
  const { xValuesIds, yValuesIds } = identifiers;
@@ -0,0 +1,3 @@
1
+ import { AlgebraicNode } from "../../tree/nodes/algebraicNode.js";
2
+ export declare function isNodesEqual(node1: AlgebraicNode, node2: AlgebraicNode): boolean;
3
+ //# sourceMappingURL=isNodesEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNodesEqual.d.ts","sourceRoot":"","sources":["../../../src/exercises/vea/isNodesEqual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIlE,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,WAMtE"}
@@ -0,0 +1,6 @@
1
+ import { multiply } from "../../tree/nodes/operators/multiplyNode.js";
2
+ import { substract } from "../../tree/nodes/operators/substractNode.js";
3
+ export function isNodesEqual(node1, node2) {
4
+ return [1, 1_000, 1_000_000].every((factor) => substract(multiply(factor, node1), multiply(factor, node2)).evaluate() ===
5
+ 0);
6
+ }
@@ -0,0 +1,5 @@
1
+ import { AlgebraicNode } from "../../tree/nodes/algebraicNode.js";
2
+ export declare abstract class SetVEA {
3
+ static isArrayOfNodesValid: (arrAns: AlgebraicNode[], arrAnswer: AlgebraicNode[]) => boolean;
4
+ }
5
+ //# sourceMappingURL=setVEA.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setVEA.d.ts","sourceRoot":"","sources":["../../../src/exercises/vea/setVEA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,8BAAsB,MAAM;IAC1B,MAAM,CAAC,mBAAmB,GACxB,QAAQ,aAAa,EAAE,EACvB,WAAW,aAAa,EAAE,aA2B1B;CACH"}
@@ -0,0 +1,25 @@
1
+ import { isNodesEqual } from "./isNodesEqual.js";
2
+ export class SetVEA {
3
+ static isArrayOfNodesValid = (arrAns, arrAnswer) => {
4
+ const dictAnswer = Object.fromEntries(arrAnswer.map((node, i) => [i, node]));
5
+ let isValid = true;
6
+ for (let i = 0; i < arrAns.length; i++) {
7
+ const nodeAns = arrAns[i];
8
+ let isFound = false;
9
+ const keys = Object.keys(dictAnswer);
10
+ for (let j = 0; j < keys.length; j++) {
11
+ const key = keys[j];
12
+ const answerNode = dictAnswer[key];
13
+ if (isNodesEqual(nodeAns, answerNode)) {
14
+ isFound = true;
15
+ delete dictAnswer[key]; //one-to-one correspondence
16
+ break;
17
+ }
18
+ }
19
+ isValid = isValid && isFound;
20
+ if (!isValid)
21
+ break;
22
+ }
23
+ return isValid;
24
+ };
25
+ }
package/lib/index.d.ts CHANGED
@@ -503,11 +503,6 @@ declare const mathExercises: (Exercise<{
503
503
  }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
504
504
  a: number;
505
505
  b: number;
506
- }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
507
- a: number;
508
- b: number;
509
- isAdd: boolean;
510
- varName: string;
511
506
  }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
512
507
  b: number;
513
508
  c: number;
@@ -2049,12 +2044,7 @@ declare const mathExercises: (Exercise<{
2049
2044
  indexSituation: number;
2050
2045
  total: number;
2051
2046
  lefties: number;
2052
- opts: {
2053
- isPercentSymbolRequired: boolean;
2054
- };
2055
- }, {
2056
- isPercentSymbolRequired: boolean;
2057
- }, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
2047
+ }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
2058
2048
  TVA: number;
2059
2049
  ht: number;
2060
2050
  }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
@@ -3423,12 +3413,7 @@ declare const pcExercises: (Exercise<{
3423
3413
  indexSituation: number;
3424
3414
  total: number;
3425
3415
  lefties: number;
3426
- opts: {
3427
- isPercentSymbolRequired: boolean;
3428
- };
3429
- }, {
3430
- isPercentSymbolRequired: boolean;
3431
- }, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
3416
+ }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
3432
3417
  decimal: number;
3433
3418
  }, object, string | number | boolean | string[] | number[] | boolean[]> | Exercise<{
3434
3419
  a: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAE3D,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAA+B,CAAC;AACnD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEAA6B,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAE3D,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAA+B,CAAC;AACnD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEAA6B,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "math-exercises",
3
3
  "type": "module",
4
- "version": "3.0.130",
4
+ "version": "3.0.131",
5
5
  "description": "Math exercises generator for middle school and high school",
6
6
  "main": "lib/index.js",
7
7
  "files": [