math-exercises 2.2.79 → 2.2.80

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 (71) hide show
  1. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType0.d.ts +5 -1
  2. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType0.d.ts.map +1 -1
  3. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType0.js +95 -20
  4. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType1.d.ts +4 -1
  5. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType1.d.ts.map +1 -1
  6. package/lib/exercises/math/calculLitteral/inequations/firstDegreeInequationsType1.js +104 -26
  7. package/lib/exercises/math/derivation/derivative/lnDerivativeOne.d.ts.map +1 -1
  8. package/lib/exercises/math/derivation/derivative/lnDerivativeOne.js +17 -7
  9. package/lib/exercises/math/derivation/derivative/lnDerivativeThree.d.ts.map +1 -1
  10. package/lib/exercises/math/derivation/derivative/lnDerivativeThree.js +46 -27
  11. package/lib/exercises/math/derivation/derivative/lnDerivativeTwo.js +1 -1
  12. package/lib/exercises/math/derivation/derivative/secondDerivativeOfExpoFunction.js +1 -1
  13. package/lib/exercises/math/functions/affines/signFunction.d.ts.map +1 -1
  14. package/lib/exercises/math/functions/affines/signFunction.js +66 -27
  15. package/lib/exercises/math/functions/basics/graphicInequation.d.ts.map +1 -1
  16. package/lib/exercises/math/functions/basics/graphicInequation.js +57 -36
  17. package/lib/exercises/math/functions/exponential/expEquation.js +1 -1
  18. package/lib/exercises/math/functions/integral/integralFractions.js +1 -1
  19. package/lib/exercises/math/functions/logarithm/log10Simplifying.d.ts.map +1 -1
  20. package/lib/exercises/math/functions/logarithm/log10Simplifying.js +6 -2
  21. package/lib/exercises/math/functions/logarithm/logEquation.d.ts.map +1 -1
  22. package/lib/exercises/math/functions/logarithm/logEquation.js +22 -14
  23. package/lib/exercises/math/functions/logarithm/logPowerEquation.d.ts.map +1 -1
  24. package/lib/exercises/math/functions/logarithm/logPowerEquation.js +14 -12
  25. package/lib/exercises/math/functions/logarithm/logSimplifiying.d.ts.map +1 -1
  26. package/lib/exercises/math/functions/logarithm/logSimplifiying.js +36 -16
  27. package/lib/exercises/math/geometry/vectors/vectorLinearCombination.js +4 -4
  28. package/lib/exercises/math/matrices/matrixInversibilityDomain.js +1 -0
  29. package/lib/exercises/math/primitive/logarithmePrimitive.d.ts.map +1 -1
  30. package/lib/exercises/math/primitive/logarithmePrimitive.js +11 -3
  31. package/lib/exercises/math/sets/intervals/inequalityToInterval.d.ts.map +1 -1
  32. package/lib/exercises/math/sets/intervals/inequalityToInterval.js +11 -11
  33. package/lib/exercises/options/inequationSolutionFormat.d.ts +3 -0
  34. package/lib/exercises/options/inequationSolutionFormat.d.ts.map +1 -0
  35. package/lib/exercises/options/inequationSolutionFormat.js +12 -0
  36. package/lib/exercises/pc/pH.js +1 -1
  37. package/lib/index.d.ts +6 -2
  38. package/lib/index.d.ts.map +1 -1
  39. package/lib/math/numbers/integer/integer.d.ts +1 -1
  40. package/lib/math/numbers/reals/real.d.ts +1 -1
  41. package/lib/tree/nodes/algebraicNode.d.ts +1 -0
  42. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  43. package/lib/tree/nodes/inequations/inequationNode.d.ts +5 -2
  44. package/lib/tree/nodes/inequations/inequationNode.d.ts.map +1 -1
  45. package/lib/tree/nodes/inequations/inequationNode.js +40 -3
  46. package/lib/tree/nodes/numbers/numberNode.d.ts +2 -2
  47. package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
  48. package/lib/tree/nodes/numbers/numberNode.js +7 -1
  49. package/lib/tree/nodes/sets/intervalNode.d.ts +2 -2
  50. package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
  51. package/lib/tree/nodes/sets/intervalNode.js +2 -2
  52. package/lib/tree/nodes/sets/setNode.d.ts +1 -0
  53. package/lib/tree/nodes/sets/setNode.d.ts.map +1 -1
  54. package/lib/tree/nodes/sets/unionIntervalNode.d.ts +1 -1
  55. package/lib/tree/nodes/sets/unionIntervalNode.d.ts.map +1 -1
  56. package/lib/tree/nodes/sets/unionIntervalNode.js +1 -1
  57. package/lib/tree/parsers/inequationParser.d.ts +7 -0
  58. package/lib/tree/parsers/inequationParser.d.ts.map +1 -0
  59. package/lib/tree/parsers/inequationParser.js +30 -0
  60. package/lib/tree/parsers/intervalParser.d.ts.map +1 -1
  61. package/lib/tree/parsers/intervalParser.js +32 -26
  62. package/lib/tree/parsers/latexParser.d.ts.map +1 -1
  63. package/lib/tree/parsers/latexParser.js +29 -6
  64. package/lib/tree/parsers/powerParser.d.ts +1 -1
  65. package/lib/tree/parsers/rationalParser.d.ts +1 -1
  66. package/lib/tree/parsers/unionIntervalParser.d.ts +9 -0
  67. package/lib/tree/parsers/unionIntervalParser.d.ts.map +1 -0
  68. package/lib/tree/parsers/unionIntervalParser.js +26 -0
  69. package/lib/types/keyIds.d.ts +1 -1
  70. package/lib/types/keyIds.d.ts.map +1 -1
  71. package/package.json +1 -1
@@ -4,38 +4,77 @@ exports.signFunction = void 0;
4
4
  const exercise_1 = require("../../../../exercises/exercise");
5
5
  const getDistinctQuestions_1 = require("../../../../exercises/utils/getDistinctQuestions");
6
6
  const rational_1 = require("../../../../math/numbers/rationals/rational");
7
+ const affine_1 = require("../../../../math/polynomials/affine");
7
8
  const polynomial_1 = require("../../../../math/polynomials/polynomial");
8
9
  const randint_1 = require("../../../../math/utils/random/randint");
10
+ const inequationNode_1 = require("../../../../tree/nodes/inequations/inequationNode");
9
11
  const infiniteNode_1 = require("../../../../tree/nodes/numbers/infiniteNode");
10
12
  const closure_1 = require("../../../../tree/nodes/sets/closure");
11
13
  const intervalNode_1 = require("../../../../tree/nodes/sets/intervalNode");
14
+ const intervalParser_1 = require("../../../../tree/parsers/intervalParser");
12
15
  const coinFlip_1 = require("../../../../utils/alea/coinFlip");
13
16
  const shuffle_1 = require("../../../../utils/alea/shuffle");
14
- const getSignFunction = () => {
15
- const a = (0, randint_1.randint)(-9, 10, [0]);
16
- const b = (0, randint_1.randint)(-9, 10);
17
+ const getHint = (identifiers) => {
18
+ const { a, b, askingPositive } = identifiers;
17
19
  const affine = new polynomial_1.Polynomial([b, a]);
18
- let instruction = `Soit $f$ la fonction définie par : $f(x) = ${affine.toTex()}$. Sur quel intervalle $f$ est-elle `;
19
- let answer = "";
20
- const askingPositive = (0, coinFlip_1.coinFlip)();
20
+ return `Pour déterminer l'intervalle sur lequel la fonction $f(x) = ${affine.toTex()}$ est ${askingPositive ? "positive" : "négative"}, il faut résoudre l'inéquation :
21
+
22
+ $$
23
+ ${affine.toTex()} ${askingPositive ? "\\geq" : "\\leq"} 0
24
+ $$
25
+ `;
26
+ };
27
+ const getCorrection = (identifiers) => {
28
+ const { a, b, askingPositive } = identifiers;
29
+ const affine = new affine_1.Affine(a, b);
30
+ const answer = getAnswer(identifiers);
31
+ const order = askingPositive ? "\\ge" : "\\le";
32
+ return `On résout l'inéquation :
33
+
34
+ ${(0, inequationNode_1.firstDegreeInequationResolutionTex)(affine, order, (0).toTree())}
35
+
36
+ On en conclut que $f$ est ${identifiers.askingPositive ? "positive" : "négative"} sur l'intervalle :
37
+
38
+ $$
39
+ ${answer}
40
+ $$
41
+ `;
42
+ };
43
+ const getInstruction = (identifiers) => {
44
+ const { a, b, askingPositive } = identifiers;
45
+ const affine = new polynomial_1.Polynomial([b, a]);
46
+ return `Soit $f$ la fonction définie sur $\\mathbb{R}$ par :
47
+
48
+ $$
49
+ f(x) = ${affine.toTex()}
50
+ $$
51
+
52
+ Sur quel intervalle $f$ est-elle ${identifiers.askingPositive ? "positive" : "négative"} ?`;
53
+ };
54
+ const getAnswer = ({ a, b, askingPositive }) => {
21
55
  const root = new rational_1.Rational(-b, a).simplify().toTree();
22
56
  const toRightInfInterval = new intervalNode_1.IntervalNode(root, infiniteNode_1.PlusInfinityNode, closure_1.ClosureType.FO).toTex();
23
57
  const toLeftInfInteral = new intervalNode_1.IntervalNode(infiniteNode_1.MinusInfinityNode, root, closure_1.ClosureType.OF).toTex();
24
58
  if (askingPositive) {
25
- instruction += "positive ?";
26
- answer = a > 0 ? toRightInfInterval : toLeftInfInteral;
59
+ return a > 0 ? toRightInfInterval : toLeftInfInteral;
27
60
  }
28
61
  else {
29
- instruction += "négative ?";
30
- answer = a > 0 ? toLeftInfInteral : toRightInfInterval;
62
+ return a > 0 ? toLeftInfInteral : toRightInfInterval;
31
63
  }
64
+ };
65
+ const getSignFunction = () => {
66
+ const a = (0, randint_1.randint)(-9, 10, [0]);
67
+ const b = (0, randint_1.randint)(-9, 10);
68
+ const askingPositive = (0, coinFlip_1.coinFlip)();
69
+ const identifiers = { a, askingPositive, b };
32
70
  const question = {
33
- instruction,
34
- startStatement: "S",
35
- answer,
71
+ instruction: getInstruction(identifiers),
72
+ answer: getAnswer(identifiers),
36
73
  keys: ["lbracket", "semicolon", "rbracket", "infty"],
37
74
  answerFormat: "tex",
38
- identifiers: { a, askingPositive, b },
75
+ identifiers,
76
+ hint: getHint(identifiers),
77
+ correction: getCorrection(identifiers),
39
78
  };
40
79
  return question;
41
80
  };
@@ -53,21 +92,19 @@ const getPropositions = (n, { answer }) => {
53
92
  }
54
93
  return (0, shuffle_1.shuffle)(propositions);
55
94
  };
56
- const isAnswerValid = (ans, { a, b, askingPositive }) => {
57
- const root = new rational_1.Rational(-b, a)
58
- .simplify()
59
- .toTree({ allowFractionToDecimal: true });
60
- const toRightInfInterval = new intervalNode_1.IntervalNode(root, infiniteNode_1.PlusInfinityNode, closure_1.ClosureType.FO);
61
- const toLeftInfInteral = new intervalNode_1.IntervalNode(infiniteNode_1.MinusInfinityNode, root, closure_1.ClosureType.OF);
62
- let answer;
63
- if (askingPositive) {
64
- answer = a > 0 ? toRightInfInterval : toLeftInfInteral;
95
+ const isAnswerValid = (ans, { answer, a, b, askingPositive }) => {
96
+ try {
97
+ const parsed = (0, intervalParser_1.intervalParser)(ans, {
98
+ allowCommaInsteadOfSemicolon: true,
99
+ allowNoBrackets: true,
100
+ });
101
+ if (!parsed)
102
+ return false;
103
+ return parsed.simplify().toTex() === answer;
65
104
  }
66
- else {
67
- answer = a > 0 ? toLeftInfInteral : toRightInfInterval;
105
+ catch (err) {
106
+ return false;
68
107
  }
69
- const texs = answer.toAllValidTexs();
70
- return texs.includes(ans);
71
108
  };
72
109
  exports.signFunction = {
73
110
  id: "signFunction",
@@ -82,4 +119,6 @@ exports.signFunction = {
82
119
  getPropositions,
83
120
  isAnswerValid,
84
121
  subject: "Mathématiques",
122
+ getHint,
123
+ hasHintAndCorrection: true,
85
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"graphicInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/graphicInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAM5D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;CAC7D,CAAC;AA4LF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAgBnD,CAAC"}
1
+ {"version":3,"file":"graphicInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/graphicInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAO5D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;CAC7D,CAAC;AAgNF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAgBnD,CAAC"}
@@ -11,7 +11,42 @@ const numberNode_1 = require("../../../../tree/nodes/numbers/numberNode");
11
11
  const closure_1 = require("../../../../tree/nodes/sets/closure");
12
12
  const intervalNode_1 = require("../../../../tree/nodes/sets/intervalNode");
13
13
  const unionIntervalNode_1 = require("../../../../tree/nodes/sets/unionIntervalNode");
14
+ const unionIntervalParser_1 = require("../../../../tree/parsers/unionIntervalParser");
14
15
  const coinFlip_1 = require("../../../../utils/alea/coinFlip");
16
+ const getAnswer = (identifiers) => {
17
+ const intervalsNodes = identifiers.intervals.map((n) => new intervalNode_1.IntervalNode(new numberNode_1.NumberNode(n.a), new numberNode_1.NumberNode(n.b), n.closure));
18
+ const intervalsTree = intervalsNodes.length === 1
19
+ ? intervalsNodes[0]
20
+ : new unionIntervalNode_1.UnionIntervalNode(intervalsNodes);
21
+ const answerTree = new inequationSolutionNode_1.InequationSolutionNode(intervalsTree);
22
+ return answerTree.toTex();
23
+ };
24
+ const getInstruction = (identifiers) => {
25
+ return `Déterminer graphiquement les solutions de l'inéquation $f(x)${identifiers.isAskingSup
26
+ ? identifiers.isStrict
27
+ ? ">"
28
+ : "\\geq"
29
+ : identifiers.isStrict
30
+ ? "<"
31
+ : "\\leq"}${identifiers.yValue}$ où $f$ est la fonction représentée ci-dessous.`;
32
+ };
33
+ const getGGBOptions = (identifiers) => {
34
+ const commands = [
35
+ `S =Spline(${identifiers.splinePoints
36
+ .map((point) => `(${point[0]},${point[1]})`)
37
+ .join(",")})`,
38
+ "SetFixed(S, true)",
39
+ `SetColor(S, "${(0, colors_1.randomColor)()}")`,
40
+ ];
41
+ const ggb = new geogebraConstructor_1.GeogebraConstructor({ commands });
42
+ const xMin = Math.min(...identifiers.splinePoints.map((point) => point[0]));
43
+ const yMin = Math.min(...identifiers.splinePoints.map((point) => point[1]));
44
+ const xMax = Math.max(...identifiers.splinePoints.map((point) => point[0]));
45
+ const yMax = Math.max(...identifiers.splinePoints.map((point) => point[1]));
46
+ return ggb.getOptions({
47
+ coords: ggb.getAdaptedCoords({ xMin, xMax, yMin, yMax }),
48
+ });
49
+ };
15
50
  const getGraphicInequationQuestion = () => {
16
51
  let xSolutions = [];
17
52
  const nb = (0, randint_1.randint)(2, 4);
@@ -70,25 +105,16 @@ const getGraphicInequationQuestion = () => {
70
105
  prevYWasAbove = y > 0;
71
106
  splinePoints.push([x, yValue + y]);
72
107
  }
73
- const xMin = Math.min(...splinePoints.map((point) => point[0]));
74
- const yMin = Math.min(...splinePoints.map((point) => point[1]));
75
- const xMax = Math.max(...splinePoints.map((point) => point[0]));
76
- const yMax = Math.max(...splinePoints.map((point) => point[1]));
77
- const intervalsNodes = intervals.map((i) => new intervalNode_1.IntervalNode(new numberNode_1.NumberNode(i.a), new numberNode_1.NumberNode(i.b), i.closure));
78
- const answer = intervalsNodes.length === 1
79
- ? `S=\\ ${intervalsNodes[0].toTex()}`
80
- : `S=\\ ${new unionIntervalNode_1.UnionIntervalNode(intervalsNodes).toTex()}`;
81
- const commands = [
82
- `S =Spline(${splinePoints
83
- .map((point) => `(${point[0]},${point[1]})`)
84
- .join(",")})`,
85
- "SetFixed(S, true)",
86
- `SetColor(S, "${(0, colors_1.randomColor)()}")`,
87
- ];
88
- const ggb = new geogebraConstructor_1.GeogebraConstructor({ commands });
108
+ const identifiers = {
109
+ yValue,
110
+ splinePoints,
111
+ isAskingSup,
112
+ isStrict,
113
+ intervals,
114
+ };
89
115
  const question = {
90
- answer,
91
- instruction: `Déterminer graphiquement les solutions de l'inéquation $f(x)${isAskingSup ? (isStrict ? ">" : "\\geq") : isStrict ? "<" : "\\leq"}${yValue}$ où $f$ est la fonction représentée ci-dessous.`,
116
+ answer: getAnswer(identifiers),
117
+ instruction: getInstruction(identifiers),
92
118
  keys: [
93
119
  "S",
94
120
  "equal",
@@ -101,16 +127,8 @@ const getGraphicInequationQuestion = () => {
101
127
  "varnothing",
102
128
  ],
103
129
  answerFormat: "tex",
104
- ggbOptions: ggb.getOptions({
105
- coords: ggb.getAdaptedCoords({ xMin, xMax, yMin, yMax }),
106
- }),
107
- identifiers: {
108
- yValue,
109
- splinePoints,
110
- isAskingSup,
111
- isStrict,
112
- intervals,
113
- },
130
+ ggbOptions: getGGBOptions(identifiers),
131
+ identifiers,
114
132
  };
115
133
  return question;
116
134
  };
@@ -138,14 +156,17 @@ const getPropositions = (n, { answer, intervals, splinePoints, yValue }) => {
138
156
  }
139
157
  return (0, exercise_1.shuffleProps)(propositions, n);
140
158
  };
141
- const isAnswerValid = (ans, { intervals }) => {
142
- const intervalsNodes = intervals.map((n) => new intervalNode_1.IntervalNode(new numberNode_1.NumberNode(n.a), new numberNode_1.NumberNode(n.b), n.closure));
143
- const intervalsTree = intervalsNodes.length === 1
144
- ? intervalsNodes[0]
145
- : new unionIntervalNode_1.UnionIntervalNode(intervalsNodes);
146
- const answerTree = new inequationSolutionNode_1.InequationSolutionNode(intervalsTree);
147
- const texs = answerTree.toAllValidTexs();
148
- return texs.includes(ans);
159
+ const isAnswerValid = (ans, { answer, intervals }) => {
160
+ try {
161
+ const parsed = (0, unionIntervalParser_1.unionIntervalParser)(ans.replaceAll("S", "").replaceAll("=", ""));
162
+ if (!parsed)
163
+ return false;
164
+ console.log(parsed.simplify().toTex(), answer);
165
+ return "S=\\ " + parsed.simplify().toTex() === answer;
166
+ }
167
+ catch (err) {
168
+ return false;
169
+ }
149
170
  };
150
171
  exports.graphicInequation = {
151
172
  id: "graphicInequation",
@@ -27,7 +27,7 @@ const getExpEquation = () => {
27
27
  "equal",
28
28
  "epower",
29
29
  "exp",
30
- "ln",
30
+ "lnBrackets",
31
31
  "S",
32
32
  "lbrace",
33
33
  "semicolon",
@@ -47,7 +47,7 @@ const getIntegralFractionsQuestion = () => {
47
47
  const question = {
48
48
  answer: answer.toTex(),
49
49
  instruction: `Calculer : $${integral.toTex()}$`,
50
- keys: ["ln"],
50
+ keys: ["lnBrackets"],
51
51
  answerFormat: "tex",
52
52
  identifiers: {
53
53
  questionType,
@@ -1 +1 @@
1
- {"version":3,"file":"log10Simplifying.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/log10Simplifying.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAalC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AA8FF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAiBrD,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAiBnD,CAAC"}
1
+ {"version":3,"file":"log10Simplifying.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/log10Simplifying.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAalC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAkGF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAiBrD,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAiBnD,CAAC"}
@@ -13,6 +13,9 @@ const multiplyNode_1 = require("../../../../tree/nodes/operators/multiplyNode");
13
13
  const powerNode_1 = require("../../../../tree/nodes/operators/powerNode");
14
14
  const operatorComposition_1 = require("../../../../tree/utilities/operatorComposition");
15
15
  const random_1 = require("../../../../utils/alea/random");
16
+ const getKeys = (identifiers, opts) => {
17
+ return [opts?.isLog10 ? "logBrackets" : "lnBrackets"];
18
+ };
16
19
  const getLog10SumSimplifyingQuestion = (opts) => {
17
20
  const nb = (0, randint_1.randint)(2, 10);
18
21
  const trueNb = [2, 4, 8].includes(nb) ? 2 : [3, 9].includes(nb) ? 3 : nb;
@@ -35,12 +38,13 @@ const getLog10SumSimplifyingQuestion = (opts) => {
35
38
  : new oppositeNode_1.OppositeNode(new LNode(new powerNode_1.PowerNode(nbNode, new numberNode_1.NumberNode(power)))));
36
39
  const statement = (0, operatorComposition_1.operatorComposition)(addNode_1.AddNode, logs);
37
40
  const answer = statement.simplify();
41
+ const identifiers = { nb, powers, signs, isLog10: opts?.isLog10 ?? false };
38
42
  const question = {
39
43
  answer: answer.toTex(),
40
44
  instruction: `Exprimer le nombre suivant sous la forme $a${opts?.isLog10 ? "\\log" : "\\ln"}\\left(${trueNb}\\right)$ : $\\newline ${statement.toTex()}$`,
41
- keys: [opts?.isLog10 ? "log" : "ln"],
45
+ keys: getKeys(identifiers, opts),
42
46
  answerFormat: "tex",
43
- identifiers: { nb, powers, signs, isLog10: opts?.isLog10 ?? false },
47
+ identifiers,
44
48
  };
45
49
  return question;
46
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"logEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,0BAA0B,CAAC;AAclC,cAAc;AACd,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAoEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,WAAW,CAa7C,CAAC"}
1
+ {"version":3,"file":"logEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAclC,cAAc;AACd,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA6EF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,WAAW,CAa7C,CAAC"}
@@ -14,28 +14,36 @@ const multiplyNode_1 = require("../../../../tree/nodes/operators/multiplyNode");
14
14
  const discreteSetNode_1 = require("../../../../tree/nodes/sets/discreteSetNode");
15
15
  const variableNode_1 = require("../../../../tree/nodes/variables/variableNode");
16
16
  const shuffle_1 = require("../../../../utils/alea/shuffle");
17
+ const getKeys = () => {
18
+ return [
19
+ "x",
20
+ "equal",
21
+ "lnBrackets",
22
+ "e",
23
+ "epower",
24
+ "exp",
25
+ "lbrace",
26
+ "S",
27
+ "semicolon",
28
+ "rbrace",
29
+ ];
30
+ };
17
31
  const getLnEquation = () => {
18
32
  const a = (0, randint_1.randint)(-9, 20, [0]);
19
33
  const k = (0, randint_1.randint)(-9, 20, [0]);
20
34
  const equation = new equalNode_1.EqualNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new logNode_1.LogNode(new variableNode_1.VariableNode("x"))), new numberNode_1.NumberNode(k));
21
35
  const answer = new equationSolutionNode_1.EquationSolutionNode(new discreteSetNode_1.DiscreteSetNode([new expNode_1.ExpNode(new rational_1.Rational(k, a).simplify().toTree())])).toTex();
36
+ const identifiers = { a, k };
22
37
  const question = {
23
- instruction: `Résoudre l'équation $${equation.toTex()}$.`,
38
+ instruction: `Résoudre l'équation :
39
+
40
+ $$
41
+ ${equation.toTex()}
42
+ $$`,
24
43
  answer,
25
- keys: [
26
- "x",
27
- "equal",
28
- "ln",
29
- "e",
30
- "epower",
31
- "exp",
32
- "lbrace",
33
- "S",
34
- "semicolon",
35
- "rbrace",
36
- ],
44
+ keys: getKeys(identifiers),
37
45
  answerFormat: "tex",
38
- identifiers: { a, k },
46
+ identifiers,
39
47
  };
40
48
  return question;
41
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"logPowerEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logPowerEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AA0GF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,WAAW,CAelD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAkBpD,CAAC"}
1
+ {"version":3,"file":"logPowerEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logPowerEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AA4GF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,WAAW,CAelD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAkBpD,CAAC"}
@@ -16,6 +16,11 @@ const powerNode_1 = require("../../../../tree/nodes/operators/powerNode");
16
16
  const discreteSetNode_1 = require("../../../../tree/nodes/sets/discreteSetNode");
17
17
  const variableNode_1 = require("../../../../tree/nodes/variables/variableNode");
18
18
  /**a*b^x+c=d */
19
+ const getKeys = (identifiers, opts) => {
20
+ const keys = ["x", "equal", "S", "lbrace", "semicolon", "rbrace"];
21
+ keys.push(opts?.isLog10 ? "logBrackets" : "lnBrackets");
22
+ return keys;
23
+ };
19
24
  const getLogPowerEquationQuestion = (opts) => {
20
25
  const powered = (0, randint_1.randint)(2, 8);
21
26
  const a = (0, randint_1.randint)(1, 10, [powered]);
@@ -29,22 +34,13 @@ const getLogPowerEquationQuestion = (opts) => {
29
34
  new fractionNode_1.FractionNode(new LNode(new numberNode_1.NumberNode(k)), new LNode(poweredNode)).simplify(),
30
35
  ])).toTex();
31
36
  const equation = new equalNode_1.EqualNode(new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new powerNode_1.PowerNode(poweredNode, xNode)), new numberNode_1.NumberNode(c)).simplify(), new numberNode_1.NumberNode(d));
32
- const keys = [
33
- "log",
34
- "x",
35
- "equal",
36
- "S",
37
- "lbrace",
38
- "semicolon",
39
- "rbrace",
40
- ];
41
- keys.push(opts?.isLog10 ? "log" : "ln");
37
+ const identifiers = { a, c, k, powered, isLog10: opts?.isLog10 ?? false };
42
38
  const question = {
43
39
  answer,
44
40
  instruction: `Résoudre : $${equation.toTex()}$`,
45
- keys,
41
+ keys: getKeys(identifiers, opts),
46
42
  answerFormat: "tex",
47
- identifiers: { a, c, k, powered, isLog10: opts?.isLog10 ?? false },
43
+ identifiers,
48
44
  };
49
45
  return question;
50
46
  };
@@ -64,6 +60,12 @@ const getPropositions = (n, { answer, isLog10, a, c, k, powered }) => {
64
60
  return (0, exercise_1.shuffleProps)(propositions, n);
65
61
  };
66
62
  const isAnswerValid = (ans, { a, c, k, powered, isLog10 }) => {
63
+ try {
64
+ //!TODO parse equation solution
65
+ }
66
+ catch (err) {
67
+ return false;
68
+ }
67
69
  const LNode = isLog10 ? log10Node_1.Log10Node : logNode_1.LogNode;
68
70
  const poweredNode = new numberNode_1.NumberNode(powered);
69
71
  const answerSimp = new equationSolutionNode_1.EquationSolutionNode(new discreteSetNode_1.DiscreteSetNode([
@@ -1 +1 @@
1
- {"version":3,"file":"logSimplifiying.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logSimplifiying.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,0BAA0B,CAAC;AAYlC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAqEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAajD,CAAC"}
1
+ {"version":3,"file":"logSimplifiying.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/logarithm/logSimplifiying.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,0BAA0B,CAAC;AAYlC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAqFF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAajD,CAAC"}
@@ -11,31 +11,51 @@ const addNode_1 = require("../../../../tree/nodes/operators/addNode");
11
11
  const substractNode_1 = require("../../../../tree/nodes/operators/substractNode");
12
12
  const coinFlip_1 = require("../../../../utils/alea/coinFlip");
13
13
  const shuffle_1 = require("../../../../utils/alea/shuffle");
14
+ const getStatementNode = (identifiers) => {
15
+ const { a, b, pm } = identifiers;
16
+ const opts = { allowLnOfOne: true };
17
+ const aNode = new logNode_1.LogNode(new numberNode_1.NumberNode(a), opts);
18
+ const bNode = new logNode_1.LogNode(new numberNode_1.NumberNode(b), opts);
19
+ if (pm === 1) {
20
+ return new addNode_1.AddNode(aNode, bNode);
21
+ }
22
+ else {
23
+ return new substractNode_1.SubstractNode(aNode, bNode);
24
+ }
25
+ };
26
+ const getInstruction = (identifiers) => {
27
+ return `Ecrire le nombre suivant sous la forme $\\ln\\left(a\\right)$ :
28
+
29
+ $$
30
+ ${getStatementNode(identifiers).toTex()}
31
+ $$`;
32
+ };
33
+ const getAnswer = (identifiers) => {
34
+ const { a, b, pm } = identifiers;
35
+ if (pm === 1) {
36
+ return new logNode_1.LogNode(new numberNode_1.NumberNode(a * b)).toTex();
37
+ }
38
+ else {
39
+ return new logNode_1.LogNode(new rational_1.Rational(a, b).simplify().toTree()).toTex();
40
+ }
41
+ };
42
+ const getKeys = (identifiers) => {
43
+ return ["lnBrackets"];
44
+ };
14
45
  const getExpSimplifiying = () => {
15
- let expression;
16
- let simplifiedExpression;
17
46
  let pm = (0, coinFlip_1.coinFlip)() ? 1 : -1;
18
47
  const a = (0, randint_1.randint)(1, 10);
19
48
  let b;
20
49
  do {
21
50
  b = (0, randint_1.randint)(1, 10);
22
51
  } while (pm === -1 && a === b);
23
- const opts = { allowLnOfOne: true };
24
- if (pm === 1) {
25
- expression = new addNode_1.AddNode(new logNode_1.LogNode(new numberNode_1.NumberNode(a), opts), new logNode_1.LogNode(new numberNode_1.NumberNode(b), opts));
26
- simplifiedExpression = new logNode_1.LogNode(new numberNode_1.NumberNode(a * b));
27
- }
28
- else {
29
- expression = new substractNode_1.SubstractNode(new logNode_1.LogNode(new numberNode_1.NumberNode(a), opts), new logNode_1.LogNode(new numberNode_1.NumberNode(b), opts));
30
- simplifiedExpression = new logNode_1.LogNode(new rational_1.Rational(a, b).simplify().toTree());
31
- }
32
- const answer = simplifiedExpression.toTex();
52
+ const identifiers = { pm, a, b };
33
53
  const question = {
34
- instruction: `Ecrire le nombre suivant sous la forme $\\ln\\left(a\\right)$ : $\\newline ${expression.toTex()}$.`,
35
- answer,
36
- keys: ["ln"],
54
+ instruction: getInstruction(identifiers),
55
+ answer: getAnswer(identifiers),
56
+ keys: getKeys(identifiers),
37
57
  answerFormat: "tex",
38
- identifiers: { pm, a, b },
58
+ identifiers,
39
59
  };
40
60
  return question;
41
61
  };
@@ -15,12 +15,12 @@ const getVectorLinearCombinationQuestion = () => {
15
15
  const a = (0, randint_1.randint)(-10, 11, [0]);
16
16
  const b = (0, randint_1.randint)(-10, 11, [0]);
17
17
  const uCoords = {
18
- x: u.x.simplify().value,
19
- y: u.y.simplify().value,
18
+ x: u.x.simplify().evaluate(),
19
+ y: u.y.simplify().evaluate(),
20
20
  };
21
21
  const vCoords = {
22
- x: v.x.simplify().value,
23
- y: v.y.simplify().value,
22
+ x: v.x.simplify().evaluate(),
23
+ y: v.y.simplify().evaluate(),
24
24
  };
25
25
  const instruction = `Soient deux vecteurs $${u.toTexWithCoords()}$ et $${v.toTexWithCoords()}$.
26
26
  Calculer les coordonnées du vecteur $${getAddVectorTex(getMultiplyVectorTex(a, u), getMultiplyVectorTex(b, v))}$`;
@@ -94,3 +94,4 @@ exports.matrixInversibilityDomain = {
94
94
  subject: "Mathématiques",
95
95
  pdfOptions: { shouldSpreadPropositions: true },
96
96
  };
97
+ //lbracket
@@ -1 +1 @@
1
- {"version":3,"file":"logarithmePrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/logarithmePrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAER,YAAY,EAEZ,iBAAiB,EAIlB,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAgBjE,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAsCxE,CAAC;AAeF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAcrD,CAAC"}
1
+ {"version":3,"file":"logarithmePrimitive.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/primitive/logarithmePrimitive.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGR,YAAY,EAEZ,iBAAiB,EAIlB,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAKF,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,WAAW,CAsBjE,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,WAAW,CAsCxE,CAAC;AAeF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAcrD,CAAC"}
@@ -13,19 +13,27 @@ const fractionNode_1 = require("../../../tree/nodes/operators/fractionNode");
13
13
  const powerNode_1 = require("../../../tree/nodes/operators/powerNode");
14
14
  const variableNode_1 = require("../../../tree/nodes/variables/variableNode");
15
15
  const shuffle_1 = require("../../../utils/alea/shuffle");
16
+ const getKeys = () => {
17
+ return ["x", "C", "lnBrackets", "abs"];
18
+ };
16
19
  const getLogarithmePrimitive = () => {
17
20
  const u = polynomial_1.PolynomialConstructor.randomWithOrder((0, randint_1.randint)(1, 3));
18
21
  const uTree = u.toTree();
19
22
  const selectedFunction = new fractionNode_1.FractionNode(u.derivate().toTree(), uTree);
20
23
  const integratedFuction = new logNode_1.LogNode(new absNode_1.AbsNode(uTree));
21
24
  const answer = new addNode_1.AddNode(integratedFuction, new variableNode_1.VariableNode("C")).toTex();
25
+ const identifiers = { coeffs: u.coefficients };
22
26
  const question = {
23
- instruction: `Déterminer la forme générale des primitives de la fonction $f$ définie par $f(x) = ${selectedFunction.toTex()}$.`,
27
+ instruction: `Déterminer la forme générale des primitives de la fonction $f$ définie par :
28
+
29
+ $$
30
+ f(x) = ${selectedFunction.toTex()}
31
+ $$`,
24
32
  startStatement: `F(x)`,
25
33
  answer,
26
- keys: ["x", "C", "ln", "abs"],
34
+ keys: getKeys(identifiers),
27
35
  answerFormat: "tex",
28
- identifiers: { coeffs: u.coefficients },
36
+ identifiers,
29
37
  };
30
38
  return question;
31
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"inequalityToInterval.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/inequalityToInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAK5D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,eAAe,EAAE,WAAW,CAAC;CAC9B,CAAC;AAwFF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CActD,CAAC"}
1
+ {"version":3,"file":"inequalityToInterval.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sets/intervals/inequalityToInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAQT,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAO5D,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,eAAe,EAAE,WAAW,CAAC;CAC9B,CAAC;AAkFF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CActD,CAAC"}
@@ -4,8 +4,7 @@ exports.inequalityToInterval = void 0;
4
4
  const exercise_1 = require("../../../../exercises/exercise");
5
5
  const getDistinctQuestions_1 = require("../../../../exercises/utils/getDistinctQuestions");
6
6
  const intervals_1 = require("../../../../math/sets/intervals/intervals");
7
- const belongsNode_1 = require("../../../../tree/nodes/sets/belongsNode");
8
- const variableNode_1 = require("../../../../tree/nodes/variables/variableNode");
7
+ const intervalParser_1 = require("../../../../tree/parsers/intervalParser");
9
8
  const shuffle_1 = require("../../../../utils/alea/shuffle");
10
9
  const getInequalityToIntervalQuestion = () => {
11
10
  const interval = intervals_1.IntervalConstructor.random();
@@ -55,15 +54,16 @@ const getPropositions = (n, { answer, intervalClosure, intervalMax, intervalMin
55
54
  });
56
55
  return (0, shuffle_1.shuffle)(propositions);
57
56
  };
58
- const isAnswerValid = (ans, { intervalClosure, intervalMax, intervalMin }) => {
59
- const min = intervalMin === "-infty" ? -Infinity : intervalMin;
60
- const max = intervalMax === "infty" ? Infinity : intervalMax;
61
- const interval = new intervals_1.Interval(min.toTree(), max.toTree(), intervalClosure).toTree();
62
- const answer = new belongsNode_1.BelongsNode(new variableNode_1.VariableNode("x"), interval, {
63
- allowRawRightChildAsSolution: true,
64
- });
65
- const texs = answer.toAllValidTexs();
66
- return texs.includes(ans);
57
+ const isAnswerValid = (ans, { intervalClosure, intervalMax, intervalMin, answer }) => {
58
+ try {
59
+ const parsed = (0, intervalParser_1.intervalParser)(ans.replaceAll("x\\in", ""));
60
+ if (!parsed)
61
+ return false;
62
+ return "x\\in\\ " + parsed.simplify().toTex() === answer;
63
+ }
64
+ catch (err) {
65
+ return false;
66
+ }
67
67
  };
68
68
  exports.inequalityToInterval = {
69
69
  id: "inequalityToInterval",
@@ -0,0 +1,3 @@
1
+ import { GeneratorOption } from "../exercise";
2
+ export declare const inequationSolutionFormat: GeneratorOption;
3
+ //# sourceMappingURL=inequationSolutionFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inequationSolutionFormat.d.ts","sourceRoot":"","sources":["../../../src/exercises/options/inequationSolutionFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGhB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inequationSolutionFormat = void 0;
4
+ const exercise_1 = require("../exercise");
5
+ exports.inequationSolutionFormat = {
6
+ id: "inequationSolutionFormat",
7
+ label: "Format de la solution",
8
+ target: exercise_1.GeneratorOptionTarget.answer,
9
+ type: exercise_1.GeneratorOptionType.select,
10
+ values: ["Intervalle (S = [a;b])", "Inégalité (x>a)"],
11
+ defaultValue: "Inégalité (x>a)",
12
+ };
@@ -24,7 +24,7 @@ const getpH = () => {
24
24
  answer,
25
25
  hint,
26
26
  correction,
27
- keys: ["log"],
27
+ keys: ["logBrackets"],
28
28
  answerFormat: "tex",
29
29
  identifiers: { randomNumber, randomTenPower },
30
30
  };