math-exercises 3.0.212 → 3.0.214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/exercises/math/arithmetic/hasDiophantianEquationSolution.js +4 -4
- package/lib/exercises/math/arithmetic/pgcdFromPrimeDecomposition.d.ts.map +1 -1
- package/lib/exercises/math/arithmetic/pgcdFromPrimeDecomposition.js +11 -9
- package/lib/exercises/math/complex/argumentFromAlgebraicComplex.d.ts +3 -0
- package/lib/exercises/math/complex/argumentFromAlgebraicComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/argumentFromAlgebraicComplex.js +92 -3
- package/lib/exercises/math/complex/conjugateDivideComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/conjugateDivideComplex.js +67 -6
- package/lib/exercises/math/complex/conjugateMultiplyComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/conjugateMultiplyComplex.js +54 -15
- package/lib/exercises/math/complex/divideComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/divideComplex.js +60 -6
- package/lib/exercises/math/complex/exp/complexAlgebraicFromExpForm.d.ts +9 -0
- package/lib/exercises/math/complex/exp/complexAlgebraicFromExpForm.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/complexAlgebraicFromExpForm.js +178 -0
- package/lib/exercises/math/complex/exp/complexExpFormPowerSimplify.d.ts +10 -0
- package/lib/exercises/math/complex/exp/complexExpFormPowerSimplify.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/complexExpFormPowerSimplify.js +152 -0
- package/lib/exercises/math/complex/exp/complexExpFormProductSimplify.d.ts +11 -0
- package/lib/exercises/math/complex/exp/complexExpFormProductSimplify.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/complexExpFormProductSimplify.js +165 -0
- package/lib/exercises/math/complex/exp/complexExpFormQuotientSimplify.d.ts +11 -0
- package/lib/exercises/math/complex/exp/complexExpFormQuotientSimplify.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/complexExpFormQuotientSimplify.js +164 -0
- package/lib/exercises/math/complex/exp/complexExpFromAlgebraicForm.d.ts +9 -0
- package/lib/exercises/math/complex/exp/complexExpFromAlgebraicForm.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/complexExpFromAlgebraicForm.js +175 -0
- package/lib/exercises/math/complex/exp/index.d.ts +5 -0
- package/lib/exercises/math/complex/exp/index.d.ts.map +1 -0
- package/lib/exercises/math/complex/exp/index.js +5 -0
- package/lib/exercises/math/complex/index.d.ts +1 -0
- package/lib/exercises/math/complex/index.d.ts.map +1 -1
- package/lib/exercises/math/complex/index.js +1 -0
- package/lib/exercises/math/complex/inverseComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/inverseComplex.js +35 -2
- package/lib/exercises/math/complex/linearCombinaisonComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/linearCombinaisonComplex.js +36 -5
- package/lib/exercises/math/complex/moduloFromAlgebraicComplex.d.ts.map +1 -1
- package/lib/exercises/math/complex/moduloFromAlgebraicComplex.js +38 -9
- package/lib/exercises/math/derivation/problems/index.d.ts +0 -1
- package/lib/exercises/math/derivation/problems/index.d.ts.map +1 -1
- package/lib/exercises/math/derivation/problems/index.js +1 -1
- package/lib/exercises/math/trigonometry/formulas/index.d.ts +2 -0
- package/lib/exercises/math/trigonometry/formulas/index.d.ts.map +1 -0
- package/lib/exercises/math/trigonometry/formulas/index.js +1 -0
- package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.d.ts +8 -0
- package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.d.ts.map +1 -0
- package/lib/exercises/math/trigonometry/formulas/trigoAdditionFormulaUsage.js +217 -0
- package/lib/exercises/math/trigonometry/index.d.ts +1 -0
- package/lib/exercises/math/trigonometry/index.d.ts.map +1 -1
- package/lib/exercises/math/trigonometry/index.js +1 -0
- package/lib/index.d.ts +21 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/playground.d.ts +0 -5
- package/lib/playground.d.ts.map +1 -1
- package/lib/playground.js +3 -9
- package/lib/tree/nodes/algebraicNode.d.ts +2 -0
- package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
- package/lib/tree/nodes/complex/complexNode.d.ts +3 -0
- package/lib/tree/nodes/complex/complexNode.d.ts.map +1 -1
- package/lib/tree/nodes/complex/complexNode.js +8 -0
- package/lib/tree/nodes/functions/absNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/absNode.js +6 -1
- package/lib/tree/nodes/functions/expNode.d.ts +2 -2
- package/lib/tree/nodes/functions/expNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/expNode.js +2 -2
- package/lib/tree/nodes/node.d.ts +1 -0
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/operators/addNode.js +6 -0
- package/lib/tree/nodes/operators/multiplyNode.d.ts +1 -1
- package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/multiplyNode.js +11 -6
- package/package.json +1 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, propWhile, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { mainTrigoValues } from "../../../../math/trigonometry/remarkableValues.js";
|
|
4
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
5
|
+
import { abs } from "../../../../tree/nodes/functions/absNode.js";
|
|
6
|
+
import { exp } from "../../../../tree/nodes/functions/expNode.js";
|
|
7
|
+
import { logn } from "../../../../tree/nodes/functions/logNode.js";
|
|
8
|
+
import { reifyAlgebraic, } from "../../../../tree/nodes/nodeConstructor.js";
|
|
9
|
+
import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
|
|
10
|
+
import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
|
|
11
|
+
import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
12
|
+
import { substract } from "../../../../tree/nodes/operators/substractNode.js";
|
|
13
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
14
|
+
import { random } from "../../../../utils/alea/random.js";
|
|
15
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
16
|
+
import { alignTex } from "../../../../utils/latex/alignTex.js";
|
|
17
|
+
const getPropositions = (n, { answer, ...identifiers }) => {
|
|
18
|
+
const propositions = [];
|
|
19
|
+
addValidProp(propositions, answer);
|
|
20
|
+
const { z1ArgIds, z1ModuleIds, z2ArgIds, z2ModuleIds } = identifiers;
|
|
21
|
+
const z1Arg = reifyAlgebraic(z1ArgIds);
|
|
22
|
+
const z1Module = reifyAlgebraic(z1ModuleIds);
|
|
23
|
+
const z2Arg = reifyAlgebraic(z2ArgIds);
|
|
24
|
+
const z2Module = reifyAlgebraic(z2ModuleIds);
|
|
25
|
+
const module = frac(z1Module, z2Module).simplify();
|
|
26
|
+
const arg = substract(z1Arg, z2Arg).simplify();
|
|
27
|
+
propWhile(propositions, n, () => {
|
|
28
|
+
const z1ModuleFake = randint(2, 10);
|
|
29
|
+
const z2ModuleFake = randint(2, 10, [z1ModuleFake]);
|
|
30
|
+
const z1ArgFake = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0));
|
|
31
|
+
const z2ArgFake = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0 &&
|
|
32
|
+
Math.abs(a.angle.evaluate()) !== Math.abs(z1ArgFake.angle.evaluate())));
|
|
33
|
+
const moduleFake = frac(z1ModuleFake, z2ModuleFake).simplify();
|
|
34
|
+
const argFake = substract(z1ArgFake.angle, z2ArgFake.angle).simplify();
|
|
35
|
+
if (module.toTex() === moduleFake.toTex() &&
|
|
36
|
+
frac(substract(argFake, arg), PiNode).simplify().evaluate() % 2 === 0)
|
|
37
|
+
return;
|
|
38
|
+
tryToAddWrongProp(propositions, `${moduleFake.toTex()}${getExpTex(argFake)}`);
|
|
39
|
+
});
|
|
40
|
+
return shuffleProps(propositions, n);
|
|
41
|
+
};
|
|
42
|
+
const getExpTex = (theta) => {
|
|
43
|
+
const rawTheta = abs(theta).simplify();
|
|
44
|
+
return `e^{${theta.evaluate() < 0 ? "-" : ""}${multiply("i", rawTheta).toTex({
|
|
45
|
+
forceNoTimesSign: true,
|
|
46
|
+
})}}`;
|
|
47
|
+
};
|
|
48
|
+
const getAnswer = (identifiers) => {
|
|
49
|
+
const { z1ArgIds, z1ModuleIds, z2ArgIds, z2ModuleIds } = identifiers;
|
|
50
|
+
const z1Arg = reifyAlgebraic(z1ArgIds);
|
|
51
|
+
const z1Module = reifyAlgebraic(z1ModuleIds);
|
|
52
|
+
const z2Arg = reifyAlgebraic(z2ArgIds);
|
|
53
|
+
const z2Module = reifyAlgebraic(z2ModuleIds);
|
|
54
|
+
const module = frac(z1Module, z2Module).simplify();
|
|
55
|
+
const arg = substract(z1Arg, z2Arg).simplify();
|
|
56
|
+
return `${module.toTex()}${getExpTex(arg)}`;
|
|
57
|
+
};
|
|
58
|
+
const getInstruction = (identifiers) => {
|
|
59
|
+
const { z1ArgIds, z1ModuleIds, z2ArgIds, z2ModuleIds } = identifiers;
|
|
60
|
+
const z1Arg = reifyAlgebraic(z1ArgIds);
|
|
61
|
+
const z1Module = reifyAlgebraic(z1ModuleIds);
|
|
62
|
+
const z2Arg = reifyAlgebraic(z2ArgIds);
|
|
63
|
+
const z2Module = reifyAlgebraic(z2ModuleIds);
|
|
64
|
+
return `Écrire sous forme exponentielle :
|
|
65
|
+
|
|
66
|
+
$$
|
|
67
|
+
\\frac{${z1Module.toTex()}${getExpTex(z1Arg)}}{${z2Module.toTex()}${getExpTex(z2Arg)}}
|
|
68
|
+
$$`;
|
|
69
|
+
};
|
|
70
|
+
const getHint = () => {
|
|
71
|
+
return `Pour tous nombres réels $\\theta$ et $\\theta'$, on a :
|
|
72
|
+
|
|
73
|
+
$$
|
|
74
|
+
\\frac{e^{i\\theta}}{e^{i\\theta'}} = e^{i\\left(\\theta-\\theta'\\right)}
|
|
75
|
+
$$`;
|
|
76
|
+
};
|
|
77
|
+
const getCorrection = (identifiers) => {
|
|
78
|
+
const { z1ArgIds, z1ModuleIds, z2ArgIds, z2ModuleIds } = identifiers;
|
|
79
|
+
const z1Arg = reifyAlgebraic(z1ArgIds);
|
|
80
|
+
const z1Module = reifyAlgebraic(z1ModuleIds);
|
|
81
|
+
const z2Arg = reifyAlgebraic(z2ArgIds);
|
|
82
|
+
const z2Module = reifyAlgebraic(z2ModuleIds);
|
|
83
|
+
const module = frac(z1Module, z2Module).simplify();
|
|
84
|
+
return `On utilise la relation fonctionnelle : pour tous nombres réels $\\theta$ et $\\theta'$, on a
|
|
85
|
+
|
|
86
|
+
$$
|
|
87
|
+
\\frac{e^{i\\theta}}{e^{i\\theta'}} = e^{i\\left(\\theta-\\theta'\\right)}
|
|
88
|
+
$$
|
|
89
|
+
|
|
90
|
+
Ici, on a donc :
|
|
91
|
+
|
|
92
|
+
${alignTex([
|
|
93
|
+
[
|
|
94
|
+
"",
|
|
95
|
+
`\\frac{${z1Module.toTex()}${getExpTex(z1Arg)}}{${z2Module.toTex()}${getExpTex(z2Arg)}}`,
|
|
96
|
+
],
|
|
97
|
+
["=", multiply(module, exp(multiply("i", substract(z1Arg, z2Arg)))).toTex()],
|
|
98
|
+
["=", getAnswer(identifiers)],
|
|
99
|
+
])}`;
|
|
100
|
+
};
|
|
101
|
+
const getKeys = () => {
|
|
102
|
+
return ["epower", "i", "pi"];
|
|
103
|
+
};
|
|
104
|
+
const isAnswerValid = (ans, { z1ArgIds, z1ModuleIds, z2ArgIds, z2ModuleIds }) => {
|
|
105
|
+
try {
|
|
106
|
+
const z1Arg = reifyAlgebraic(z1ArgIds);
|
|
107
|
+
const z1Module = reifyAlgebraic(z1ModuleIds);
|
|
108
|
+
const z2Arg = reifyAlgebraic(z2ArgIds);
|
|
109
|
+
const z2Module = reifyAlgebraic(z2ModuleIds);
|
|
110
|
+
const module = frac(z1Module, z2Module).simplify();
|
|
111
|
+
const angle = substract(z1Arg, z2Arg).simplify();
|
|
112
|
+
const parsed = parseAlgebraic(ans);
|
|
113
|
+
const expForm = multiply(module, exp(multiply("i", angle))).simplify();
|
|
114
|
+
const divided = frac(expForm, parsed).simplify();
|
|
115
|
+
return (parsed.simplify().toTex() === expForm.toTex() ||
|
|
116
|
+
frac(logn(divided), multiply(PiNode, "i")).simplify().evaluate() % 2 === 0);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return handleVEAError(err);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const getComplexExpFormQuotientSimplifyQuestion = () => {
|
|
123
|
+
const z1Module = randint(2, 10);
|
|
124
|
+
const z2Module = randint(2, 10, [z1Module]);
|
|
125
|
+
const z1Arg = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0));
|
|
126
|
+
const z2Arg = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0 &&
|
|
127
|
+
Math.abs(a.angle.evaluate()) !== Math.abs(z1Arg.angle.evaluate())));
|
|
128
|
+
const identifiers = {
|
|
129
|
+
z1ArgIds: z1Arg.angle.toIdentifiers(),
|
|
130
|
+
z1ModuleIds: z1Module.toTree().toIdentifiers(),
|
|
131
|
+
z2ArgIds: z2Arg.angle.toIdentifiers(),
|
|
132
|
+
z2ModuleIds: z2Module.toTree().toIdentifiers(),
|
|
133
|
+
};
|
|
134
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
135
|
+
};
|
|
136
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
137
|
+
return {
|
|
138
|
+
answer: getAnswer(identifiers),
|
|
139
|
+
instruction: getInstruction(identifiers),
|
|
140
|
+
keys: getKeys(identifiers),
|
|
141
|
+
answerFormat: "tex",
|
|
142
|
+
identifiers,
|
|
143
|
+
hint: getHint(identifiers),
|
|
144
|
+
correction: getCorrection(identifiers),
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
export const complexExpFormQuotientSimplify = {
|
|
148
|
+
id: "complexExpFormQuotientSimplify",
|
|
149
|
+
connector: "=",
|
|
150
|
+
label: "Simplifier un quotient de formes exponentielles de nombres complexes",
|
|
151
|
+
isSingleStep: true,
|
|
152
|
+
generator: (nb, opts) => getDistinctQuestions(() => getComplexExpFormQuotientSimplifyQuestion(opts), nb),
|
|
153
|
+
qcmTimer: 60,
|
|
154
|
+
freeTimer: 60,
|
|
155
|
+
getPropositions,
|
|
156
|
+
isAnswerValid,
|
|
157
|
+
subject: "Mathématiques",
|
|
158
|
+
getInstruction,
|
|
159
|
+
getHint,
|
|
160
|
+
getCorrection,
|
|
161
|
+
getAnswer,
|
|
162
|
+
getQuestionFromIdentifiers,
|
|
163
|
+
hasHintAndCorrection: true,
|
|
164
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
|
|
3
|
+
type Identifiers = {
|
|
4
|
+
reIds: NodeIdentifiers;
|
|
5
|
+
imIds: NodeIdentifiers;
|
|
6
|
+
};
|
|
7
|
+
export declare const complexExpFromAlgebraicForm: Exercise<Identifiers>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=complexExpFromAlgebraicForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complexExpFromAlgebraicForm.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/exp/complexExpFromAlgebraicForm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAcrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAW7C,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AA2KF,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,WAAW,CAsB7D,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, propWhile, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { RationalConstructor } from "../../../../math/numbers/rationals/rational.js";
|
|
4
|
+
import { mainTrigoValues, } from "../../../../math/trigonometry/remarkableValues.js";
|
|
5
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
6
|
+
import { ComplexNode } from "../../../../tree/nodes/complex/complexNode.js";
|
|
7
|
+
import { abs } from "../../../../tree/nodes/functions/absNode.js";
|
|
8
|
+
import { exp } from "../../../../tree/nodes/functions/expNode.js";
|
|
9
|
+
import { logn } from "../../../../tree/nodes/functions/logNode.js";
|
|
10
|
+
import { sqrt } from "../../../../tree/nodes/functions/sqrtNode.js";
|
|
11
|
+
import { reifyAlgebraic, } from "../../../../tree/nodes/nodeConstructor.js";
|
|
12
|
+
import { PiNode } from "../../../../tree/nodes/numbers/piNode.js";
|
|
13
|
+
import { add } from "../../../../tree/nodes/operators/addNode.js";
|
|
14
|
+
import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
|
|
15
|
+
import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
16
|
+
import { square } from "../../../../tree/nodes/operators/powerNode.js";
|
|
17
|
+
import { parseAlgebraic } from "../../../../tree/parsers/latexParser.js";
|
|
18
|
+
import { random } from "../../../../utils/alea/random.js";
|
|
19
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
20
|
+
import { alignTex } from "../../../../utils/latex/alignTex.js";
|
|
21
|
+
const getPropositions = (n, { answer }) => {
|
|
22
|
+
const propositions = [];
|
|
23
|
+
addValidProp(propositions, answer);
|
|
24
|
+
propWhile(propositions, n, () => {
|
|
25
|
+
const theta = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0));
|
|
26
|
+
const rawTheta = abs(theta.angle).simplify();
|
|
27
|
+
const module = random([
|
|
28
|
+
randint(2, 6).toTree(),
|
|
29
|
+
RationalConstructor.randomIrreductible().toTree(),
|
|
30
|
+
random([sqrt(2), sqrt(3)]),
|
|
31
|
+
]);
|
|
32
|
+
tryToAddWrongProp(propositions, `${module.toTex()}e^{${theta.angle.evaluate() < 0 ? "-" : ""}${multiply("i", rawTheta).toTex({
|
|
33
|
+
forceNoTimesSign: true,
|
|
34
|
+
})}}`);
|
|
35
|
+
});
|
|
36
|
+
return shuffleProps(propositions, n);
|
|
37
|
+
};
|
|
38
|
+
const getParams = (identifiers) => {
|
|
39
|
+
const { reIds, imIds } = identifiers;
|
|
40
|
+
const re = reifyAlgebraic(reIds);
|
|
41
|
+
const im = reifyAlgebraic(imIds);
|
|
42
|
+
const module = sqrt(add(square(re), square(im))).simplify();
|
|
43
|
+
const cos = frac(re, module).simplify();
|
|
44
|
+
const sin = frac(im, module).simplify();
|
|
45
|
+
const theta = mainTrigoValues.find((point) => Math.abs(point.cos.evaluate({}) - cos.evaluate()) < 0.01 &&
|
|
46
|
+
Math.abs(point.sin.evaluate({}) - sin.evaluate()) < 0.01);
|
|
47
|
+
return [module, theta];
|
|
48
|
+
};
|
|
49
|
+
const getAnswer = (identifiers) => {
|
|
50
|
+
const [module, theta] = getParams(identifiers);
|
|
51
|
+
const rawTheta = abs(theta.angle).simplify();
|
|
52
|
+
return `${module.toTex()}e^{${theta.angle.evaluate() < 0 ? "-" : ""}${multiply("i", rawTheta).toTex({
|
|
53
|
+
forceNoTimesSign: true,
|
|
54
|
+
})}}`;
|
|
55
|
+
};
|
|
56
|
+
const getInstruction = (identifiers) => {
|
|
57
|
+
const { reIds, imIds } = identifiers;
|
|
58
|
+
const re = reifyAlgebraic(reIds);
|
|
59
|
+
const im = reifyAlgebraic(imIds);
|
|
60
|
+
return `Soit le nombre complexe :
|
|
61
|
+
|
|
62
|
+
$$
|
|
63
|
+
z = ${new ComplexNode(re, im).toTex()}
|
|
64
|
+
$$
|
|
65
|
+
|
|
66
|
+
Écrire $z$ sous forme exponentielle.`;
|
|
67
|
+
};
|
|
68
|
+
const getHint = () => {
|
|
69
|
+
return `Tout nombre complexe $z$ non nul peut s'écrire sous forme exponentielle :
|
|
70
|
+
|
|
71
|
+
$$
|
|
72
|
+
z = re^{i\\theta}
|
|
73
|
+
$$
|
|
74
|
+
|
|
75
|
+
où $r$ est le module de $z$, et $\\theta$ est un argument de $z$.`;
|
|
76
|
+
};
|
|
77
|
+
const getCorrection = (identifiers) => {
|
|
78
|
+
const { reIds, imIds } = identifiers;
|
|
79
|
+
const re = reifyAlgebraic(reIds);
|
|
80
|
+
const im = reifyAlgebraic(imIds);
|
|
81
|
+
const [module, ang] = getParams(identifiers);
|
|
82
|
+
const cos = frac(re, module).simplify();
|
|
83
|
+
const sin = frac(im, module).simplify();
|
|
84
|
+
const argCos = ang.cos.toTex();
|
|
85
|
+
const argSin = ang.sin.toTex();
|
|
86
|
+
const cosSimp = frac(re, module).toSimplificationTex();
|
|
87
|
+
const sinSimp = frac(im, module).toSimplificationTex();
|
|
88
|
+
return `On calcule le module de $z$ :
|
|
89
|
+
|
|
90
|
+
${alignTex([
|
|
91
|
+
["|z|", "=", sqrt(add(square(re), square(im))).toTex()],
|
|
92
|
+
["", "=", module.toTex()],
|
|
93
|
+
])}
|
|
94
|
+
|
|
95
|
+
Tout argument $\\theta$ de $z$ vérifie alors :
|
|
96
|
+
|
|
97
|
+
$$
|
|
98
|
+
\\cos(\\theta) = ${cosSimp} ${argCos !== cos.toTex() ? `= ${argCos}` : ""}
|
|
99
|
+
$$
|
|
100
|
+
|
|
101
|
+
et
|
|
102
|
+
|
|
103
|
+
$$
|
|
104
|
+
\\sin(\\theta) = ${sinSimp} ${argSin !== sin.toTex() ? `= ${argSin}` : ""}
|
|
105
|
+
$$
|
|
106
|
+
|
|
107
|
+
Un argument de $z$ est donc par exemple $${ang.angle.toTex()}$.
|
|
108
|
+
|
|
109
|
+
La forme exponentielle de $z$ est donc :
|
|
110
|
+
|
|
111
|
+
$$
|
|
112
|
+
z = ${getAnswer(identifiers)}
|
|
113
|
+
$$
|
|
114
|
+
`;
|
|
115
|
+
};
|
|
116
|
+
const getKeys = () => {
|
|
117
|
+
return ["epower", "i", "pi"];
|
|
118
|
+
};
|
|
119
|
+
const isAnswerValid = (ans, { answer, ...identifiers }) => {
|
|
120
|
+
try {
|
|
121
|
+
const [module, angle] = getParams(identifiers);
|
|
122
|
+
const parsed = parseAlgebraic(ans);
|
|
123
|
+
const expForm = multiply(module, exp(multiply("i", angle.angle))).simplify();
|
|
124
|
+
const divided = frac(expForm, parsed).simplify();
|
|
125
|
+
return (parsed.simplify().toTex() === expForm.toTex() ||
|
|
126
|
+
frac(logn(divided), multiply(PiNode, "i")).simplify().evaluate() % 2 === 0);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
return handleVEAError(err);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const getComplexExpFromAlgebraicFormQuestion = () => {
|
|
133
|
+
const arg = random(mainTrigoValues.filter((a) => a.angle.evaluate({}) !== 0));
|
|
134
|
+
const factor = random([
|
|
135
|
+
randint(2, 6).toTree(),
|
|
136
|
+
RationalConstructor.randomIrreductible().toTree(),
|
|
137
|
+
random([sqrt(2), sqrt(3)]),
|
|
138
|
+
]);
|
|
139
|
+
const re = multiply(factor, arg.cos).simplify();
|
|
140
|
+
const im = multiply(factor, arg.sin).simplify();
|
|
141
|
+
const identifiers = {
|
|
142
|
+
imIds: im.toIdentifiers(),
|
|
143
|
+
reIds: re.toIdentifiers(),
|
|
144
|
+
};
|
|
145
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
146
|
+
};
|
|
147
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
148
|
+
return {
|
|
149
|
+
answer: getAnswer(identifiers),
|
|
150
|
+
instruction: getInstruction(identifiers),
|
|
151
|
+
keys: getKeys(identifiers),
|
|
152
|
+
answerFormat: "tex",
|
|
153
|
+
identifiers,
|
|
154
|
+
hint: getHint(identifiers),
|
|
155
|
+
correction: getCorrection(identifiers),
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
export const complexExpFromAlgebraicForm = {
|
|
159
|
+
id: "complexExpFromAlgebraicForm",
|
|
160
|
+
connector: "=",
|
|
161
|
+
label: "Donner la forme exponentielle d'un complexe écrit sous forme algébrique",
|
|
162
|
+
isSingleStep: true,
|
|
163
|
+
generator: (nb, opts) => getDistinctQuestions(() => getComplexExpFromAlgebraicFormQuestion(opts), nb),
|
|
164
|
+
qcmTimer: 60,
|
|
165
|
+
freeTimer: 60,
|
|
166
|
+
getPropositions,
|
|
167
|
+
isAnswerValid,
|
|
168
|
+
subject: "Mathématiques",
|
|
169
|
+
getInstruction,
|
|
170
|
+
getHint,
|
|
171
|
+
getCorrection,
|
|
172
|
+
getAnswer,
|
|
173
|
+
getQuestionFromIdentifiers,
|
|
174
|
+
hasHintAndCorrection: true,
|
|
175
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/complex/exp/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,cAAc,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inverseComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/inverseComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"inverseComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/inverseComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAoFF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAchD,CAAC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { addValidProp, propWhile, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
2
|
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
3
|
import { Complex, ComplexConstructor } from "../../../math/complex/complex.js";
|
|
4
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
5
|
+
import { frac } from "../../../tree/nodes/operators/fractionNode.js";
|
|
6
|
+
import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
7
|
+
import { square } from "../../../tree/nodes/operators/powerNode.js";
|
|
8
|
+
import { substract } from "../../../tree/nodes/operators/substractNode.js";
|
|
4
9
|
import { shuffle } from "../../../utils/alea/shuffle.js";
|
|
10
|
+
import { alignTex } from "../../../utils/latex/alignTex.js";
|
|
5
11
|
const getInstruction = (identifiers) => {
|
|
6
12
|
const complex = new Complex(identifiers.re, identifiers.im);
|
|
7
13
|
return `Déterminer l'inverse de $z=${complex.toTree().toTex()}$.`;
|
|
@@ -11,6 +17,29 @@ const getAnswer = (identifiers) => {
|
|
|
11
17
|
const answer = complex.inverseNode().toTex();
|
|
12
18
|
return answer;
|
|
13
19
|
};
|
|
20
|
+
const getHint = () => {
|
|
21
|
+
return `Pour calculer un quotient dans $\\mathbb{C}$, on multiplie le numérateur et le dénominateur par le conjugué du dénominateur.
|
|
22
|
+
|
|
23
|
+
On rappelle que le conjugué d'un nombre complexe $z$ est le nombre complexe de même partie réelle et de partie imaginaire opposée.
|
|
24
|
+
`;
|
|
25
|
+
};
|
|
26
|
+
const getCorrection = (identifiers) => {
|
|
27
|
+
const { im, re } = identifiers;
|
|
28
|
+
const z = new Complex(re, im);
|
|
29
|
+
const zTree = z.toTree();
|
|
30
|
+
const conj = z.conjugate().toTree();
|
|
31
|
+
return `On cherche à calculer $\\frac{1}{${zTree.toTex()}}$.
|
|
32
|
+
|
|
33
|
+
Pour cela, on multiplie le numérateur et le dénominateur de ce quotient par le conjugué du dénominateur :
|
|
34
|
+
|
|
35
|
+
${alignTex([
|
|
36
|
+
["", ` \\frac{1}{${zTree.toTex()}} `],
|
|
37
|
+
["=", `\\frac{${conj.toTex()}}{(${zTree.toTex()})(${conj.toTex()})}`],
|
|
38
|
+
["=", frac(conj, substract(re ** 2, square(multiply(im, "i")))).toTex()],
|
|
39
|
+
["=", frac(conj, re ** 2 + im ** 2).toTex()],
|
|
40
|
+
["=", getAnswer(identifiers)],
|
|
41
|
+
])}`;
|
|
42
|
+
};
|
|
14
43
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
15
44
|
const question = {
|
|
16
45
|
answer: getAnswer(identifiers),
|
|
@@ -19,12 +48,15 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
19
48
|
answerFormat: "tex",
|
|
20
49
|
identifiers,
|
|
21
50
|
startStatement: "\\frac{1}{z}",
|
|
51
|
+
hint: getHint(identifiers),
|
|
52
|
+
correction: getCorrection(identifiers),
|
|
22
53
|
};
|
|
23
54
|
return question;
|
|
24
55
|
};
|
|
25
56
|
const getInverseComplexQuestion = () => {
|
|
26
|
-
const
|
|
27
|
-
const
|
|
57
|
+
const re = randint(-10, 11, [0]);
|
|
58
|
+
const im = randint(-10, 11, [0]);
|
|
59
|
+
const identifiers = { re, im };
|
|
28
60
|
return getQuestionFromIdentifiers(identifiers);
|
|
29
61
|
};
|
|
30
62
|
const getPropositions = (n, { answer, re, im }) => {
|
|
@@ -59,4 +91,5 @@ export const inverseComplex = {
|
|
|
59
91
|
isAnswerValid,
|
|
60
92
|
subject: "Mathématiques",
|
|
61
93
|
getQuestionFromIdentifiers,
|
|
94
|
+
hasHintAndCorrection: true,
|
|
62
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linearCombinaisonComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/linearCombinaisonComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"linearCombinaisonComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/linearCombinaisonComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;CACd,CAAC;AAmGF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,WAAW,CAc1D,CAAC"}
|
|
@@ -2,16 +2,15 @@ import { addValidProp, propWhile, tryToAddWrongProp, } from "../../../exercises/
|
|
|
2
2
|
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
3
|
import { Complex, ComplexConstructor } from "../../../math/complex/complex.js";
|
|
4
4
|
import { randint } from "../../../math/utils/random/randint.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { MultiplyNode } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
8
|
-
import { VariableNode } from "../../../tree/nodes/variables/variableNode.js";
|
|
5
|
+
import { add } from "../../../tree/nodes/operators/addNode.js";
|
|
6
|
+
import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
9
7
|
import { shuffle } from "../../../utils/alea/shuffle.js";
|
|
8
|
+
import { alignTex } from "../../../utils/latex/alignTex.js";
|
|
10
9
|
const getInstruction = (identifiers) => {
|
|
11
10
|
const { a, b, z1, z2 } = identifiers;
|
|
12
11
|
const z1Complex = new Complex(z1[0], z1[1]);
|
|
13
12
|
const z2Complex = new Complex(z2[0], z2[1]);
|
|
14
|
-
const statement =
|
|
13
|
+
const statement = add(multiply(a, "z_1"), multiply(b, "z_2"));
|
|
15
14
|
return `Soit $z_1=${z1Complex.toTree().toTex()}$ et $z_2=${z2Complex
|
|
16
15
|
.toTree()
|
|
17
16
|
.toTex()}$.
|
|
@@ -25,6 +24,35 @@ const getAnswer = (identifiers) => {
|
|
|
25
24
|
const answer = z1Complex.times(a).add(z2Complex.times(b)).toTree().toTex();
|
|
26
25
|
return answer;
|
|
27
26
|
};
|
|
27
|
+
const getHint = () => {
|
|
28
|
+
return `L'addition et la multiplication des nombres réels se prolongent aux nombres complexes : les règles de calcul sont les mêmes.
|
|
29
|
+
`;
|
|
30
|
+
};
|
|
31
|
+
const getCorrection = (identifiers) => {
|
|
32
|
+
const { a, b, z1, z2 } = identifiers;
|
|
33
|
+
const z1Complex = new Complex(z1[0], z1[1]).toTree().toRawTree();
|
|
34
|
+
const z2Complex = new Complex(z2[0], z2[1]).toTree().toRawTree();
|
|
35
|
+
const z1Aff = multiply(a, z1Complex);
|
|
36
|
+
const z2Aff = multiply(b, z2Complex);
|
|
37
|
+
return `On applique les mêmes règles de calcul que pour les nombres réels :
|
|
38
|
+
|
|
39
|
+
${alignTex([
|
|
40
|
+
["", add(z1Aff, z2Aff).toTex()],
|
|
41
|
+
[
|
|
42
|
+
"=",
|
|
43
|
+
add(z1Aff.simplify({
|
|
44
|
+
towardsDistribute: true,
|
|
45
|
+
forbidFactorize: true,
|
|
46
|
+
noAddOrder: true,
|
|
47
|
+
}), z2Aff.simplify({
|
|
48
|
+
towardsDistribute: true,
|
|
49
|
+
forbidFactorize: true,
|
|
50
|
+
noAddOrder: true,
|
|
51
|
+
})).toTex(),
|
|
52
|
+
],
|
|
53
|
+
["=", getAnswer(identifiers)],
|
|
54
|
+
])}`;
|
|
55
|
+
};
|
|
28
56
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
29
57
|
const question = {
|
|
30
58
|
answer: getAnswer(identifiers),
|
|
@@ -32,6 +60,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
32
60
|
keys: ["i", "z", "quote"],
|
|
33
61
|
answerFormat: "tex",
|
|
34
62
|
identifiers,
|
|
63
|
+
hint: getHint(identifiers),
|
|
64
|
+
correction: getCorrection(identifiers),
|
|
35
65
|
};
|
|
36
66
|
return question;
|
|
37
67
|
};
|
|
@@ -71,4 +101,5 @@ export const linearCombinaisonComplex = {
|
|
|
71
101
|
isAnswerValid,
|
|
72
102
|
subject: "Mathématiques",
|
|
73
103
|
getQuestionFromIdentifiers,
|
|
104
|
+
hasHintAndCorrection: true,
|
|
74
105
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moduloFromAlgebraicComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/moduloFromAlgebraicComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"moduloFromAlgebraicComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/moduloFromAlgebraicComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAoFF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAc5D,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
2
|
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { sqrtVEA } from "../../../exercises/vea/sqrtVEA.js";
|
|
3
4
|
import { Complex, ComplexConstructor } from "../../../math/complex/complex.js";
|
|
4
5
|
import { SquareRoot } from "../../../math/numbers/reals/real.js";
|
|
5
6
|
import { randint } from "../../../math/utils/random/randint.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
7
|
+
import { sqrt } from "../../../tree/nodes/functions/sqrtNode.js";
|
|
8
|
+
import { add } from "../../../tree/nodes/operators/addNode.js";
|
|
9
|
+
import { square } from "../../../tree/nodes/operators/powerNode.js";
|
|
10
|
+
import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
|
|
11
|
+
import { alignTex } from "../../../utils/latex/alignTex.js";
|
|
8
12
|
const getInstruction = (identifiers) => {
|
|
9
13
|
const zTex = new Complex(identifiers.re, identifiers.im).toTree().toTex();
|
|
10
14
|
return `Soit $z=${zTex}$.
|
|
@@ -16,6 +20,28 @@ const getAnswer = (identifiers) => {
|
|
|
16
20
|
const answer = z.toModuleTree().toTex();
|
|
17
21
|
return answer;
|
|
18
22
|
};
|
|
23
|
+
const getHint = () => {
|
|
24
|
+
return `Si $z$ est un nombre complexe de forme algébrique
|
|
25
|
+
|
|
26
|
+
$$
|
|
27
|
+
z = x+iy
|
|
28
|
+
$$
|
|
29
|
+
|
|
30
|
+
avec $x$ et $y$ réels, alors le module de $z$ est le nombre :
|
|
31
|
+
|
|
32
|
+
$$
|
|
33
|
+
|z| = \\sqrt{x^2 + y^2}
|
|
34
|
+
$$`;
|
|
35
|
+
};
|
|
36
|
+
const getCorrection = (identifiers) => {
|
|
37
|
+
const { im, re } = identifiers;
|
|
38
|
+
return `Le module $|z|$ de $z$ vaut :
|
|
39
|
+
|
|
40
|
+
${alignTex([
|
|
41
|
+
["|z|", "=", sqrt(add(square(re), square(im))).toTex()],
|
|
42
|
+
["", "=", sqrt(re ** 2 + im ** 2).toSimplificationTex()],
|
|
43
|
+
])}`;
|
|
44
|
+
};
|
|
19
45
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
20
46
|
const question = {
|
|
21
47
|
answer: getAnswer(identifiers),
|
|
@@ -23,6 +49,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
23
49
|
keys: [],
|
|
24
50
|
answerFormat: "tex",
|
|
25
51
|
identifiers,
|
|
52
|
+
hint: getHint(identifiers),
|
|
53
|
+
correction: getCorrection(identifiers),
|
|
26
54
|
};
|
|
27
55
|
return question;
|
|
28
56
|
};
|
|
@@ -41,13 +69,13 @@ const getPropositions = (n, { answer, re, im }) => {
|
|
|
41
69
|
});
|
|
42
70
|
return shuffleProps(propositions, n);
|
|
43
71
|
};
|
|
44
|
-
const isAnswerValid = (ans, {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
72
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
73
|
+
try {
|
|
74
|
+
return sqrtVEA(ans, answer);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return handleVEAError(err);
|
|
78
|
+
}
|
|
51
79
|
};
|
|
52
80
|
export const moduloFromAlgebraicComplex = {
|
|
53
81
|
id: "moduloFromAlgebraicComplex",
|
|
@@ -61,4 +89,5 @@ export const moduloFromAlgebraicComplex = {
|
|
|
61
89
|
isAnswerValid,
|
|
62
90
|
subject: "Mathématiques",
|
|
63
91
|
getQuestionFromIdentifiers,
|
|
92
|
+
hasHintAndCorrection: true,
|
|
64
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/derivation/problems/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/derivation/problems/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AAEzD,cAAc,4CAA4C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from "./problemMaximizeBoxVolumeFindX.js";
|
|
2
2
|
export * from "./problemProjectileHeightFindAbscissa.js";
|
|
3
|
-
export * from "./problemMaximizeProfitFindProduction.js";
|
|
3
|
+
// export * from "./problemMaximizeProfitFindProduction.js";
|
|
4
4
|
export * from "./problemMovementOnLineFindSpeedAtPoint.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/trigonometry/formulas/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./trigoAdditionFormulaUsage.js";
|