math-exercises 3.0.211 → 3.0.213
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/congruenceBasicEquation.d.ts +9 -0
- package/lib/exercises/math/arithmetic/congruenceBasicEquation.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/congruenceBasicEquation.js +116 -0
- package/lib/exercises/math/arithmetic/diophantianEquationSimpleSolution.d.ts +9 -0
- package/lib/exercises/math/arithmetic/diophantianEquationSimpleSolution.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/diophantianEquationSimpleSolution.js +129 -0
- package/lib/exercises/math/arithmetic/fermatUsageOnBigPowers.d.ts +9 -0
- package/lib/exercises/math/arithmetic/fermatUsageOnBigPowers.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/fermatUsageOnBigPowers.js +140 -0
- package/lib/exercises/math/arithmetic/fillCongruenceTableFirstDegree.d.ts +9 -0
- package/lib/exercises/math/arithmetic/fillCongruenceTableFirstDegree.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/fillCongruenceTableFirstDegree.js +106 -0
- package/lib/exercises/math/arithmetic/findBezoutCoefficients.d.ts +8 -0
- package/lib/exercises/math/arithmetic/findBezoutCoefficients.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/findBezoutCoefficients.js +175 -0
- package/lib/exercises/math/arithmetic/hasDiophantianEquationSolution.d.ts +9 -0
- package/lib/exercises/math/arithmetic/hasDiophantianEquationSolution.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/hasDiophantianEquationSolution.js +105 -0
- package/lib/exercises/math/arithmetic/index.d.ts +8 -0
- package/lib/exercises/math/arithmetic/index.d.ts.map +1 -1
- package/lib/exercises/math/arithmetic/index.js +8 -0
- package/lib/exercises/math/arithmetic/pgcdFromPrimeDecomposition.d.ts +10 -0
- package/lib/exercises/math/arithmetic/pgcdFromPrimeDecomposition.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/pgcdFromPrimeDecomposition.js +136 -0
- package/lib/exercises/math/arithmetic/pgcdHomogenuity.d.ts +8 -0
- package/lib/exercises/math/arithmetic/pgcdHomogenuity.d.ts.map +1 -0
- package/lib/exercises/math/arithmetic/pgcdHomogenuity.js +124 -0
- package/lib/exercises/math/calcul/ordering/compareFracAndDec.js +2 -2
- 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 +52 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/math/utils/arithmetic/bezout.d.ts +2 -0
- package/lib/math/utils/arithmetic/bezout.d.ts.map +1 -0
- package/lib/math/utils/arithmetic/bezout.js +10 -0
- 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 +2 -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/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/powerNode.js +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, propWhile, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { Point } from "../../../math/geometry/point.js";
|
|
4
|
+
import { bezout } from "../../../math/utils/arithmetic/bezout.js";
|
|
5
|
+
import { coprimesOf } from "../../../math/utils/arithmetic/coprimesOf.js";
|
|
6
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
7
|
+
import { add } from "../../../tree/nodes/operators/addNode.js";
|
|
8
|
+
import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
9
|
+
import { substract } from "../../../tree/nodes/operators/substractNode.js";
|
|
10
|
+
import { pointParser } from "../../../tree/parsers/pointParser.js";
|
|
11
|
+
import { random } from "../../../utils/alea/random.js";
|
|
12
|
+
import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
|
|
13
|
+
import { alignTex } from "../../../utils/latex/alignTex.js";
|
|
14
|
+
const getPropositions = (n, { answer, a, b }) => {
|
|
15
|
+
const propositions = [];
|
|
16
|
+
addValidProp(propositions, answer);
|
|
17
|
+
propWhile(propositions, n, () => {
|
|
18
|
+
const u = randint(-30, 30, [0]);
|
|
19
|
+
const v = randint(-30, 30, [0]);
|
|
20
|
+
if (a * u + b * v === 1)
|
|
21
|
+
return;
|
|
22
|
+
const tex = new Point("A", u, v).toCoords();
|
|
23
|
+
tryToAddWrongProp(propositions, tex);
|
|
24
|
+
});
|
|
25
|
+
return shuffleProps(propositions, n);
|
|
26
|
+
};
|
|
27
|
+
const getAnswer = (identifiers) => {
|
|
28
|
+
const { a, b } = identifiers;
|
|
29
|
+
const [u, v] = bezout(a, b);
|
|
30
|
+
return new Point("A", u, v).toCoords();
|
|
31
|
+
};
|
|
32
|
+
const getInstruction = (identifiers) => {
|
|
33
|
+
const { a, b } = identifiers;
|
|
34
|
+
return `À l'aide de l'algorithme d'Euclide, déterminer deux entiers relatifs $u$ et $v$ tels que :
|
|
35
|
+
|
|
36
|
+
$$
|
|
37
|
+
${a}u+${b}v=1
|
|
38
|
+
$$
|
|
39
|
+
|
|
40
|
+
Donner la réponse sous la forme $(u;v)$.`;
|
|
41
|
+
};
|
|
42
|
+
const getHint = (identifiers) => {
|
|
43
|
+
const { a, b } = identifiers;
|
|
44
|
+
return `Écris l'algorithme d'Euclide pour la division de $${a}$ par $${b}$, et isole les restes non nuls.
|
|
45
|
+
|
|
46
|
+
Puis, remonte l'algorithme en partant du dernier reste non nul et en remplaçant les restes obtenus précedemment.`;
|
|
47
|
+
};
|
|
48
|
+
const getCorrection = (identifiers) => {
|
|
49
|
+
const { a, b } = identifiers;
|
|
50
|
+
let dividend = a;
|
|
51
|
+
let divisor = b;
|
|
52
|
+
let q = Math.floor(dividend / divisor);
|
|
53
|
+
let r = a % b;
|
|
54
|
+
const coeffs = [[dividend, q, divisor, r]];
|
|
55
|
+
while (r !== 0) {
|
|
56
|
+
dividend = divisor;
|
|
57
|
+
divisor = r;
|
|
58
|
+
q = Math.floor(dividend / divisor);
|
|
59
|
+
r = dividend % divisor;
|
|
60
|
+
coeffs.push([dividend, divisor, q, r]);
|
|
61
|
+
}
|
|
62
|
+
let oneLine = "";
|
|
63
|
+
if (coeffs.length === 3) {
|
|
64
|
+
// 3 lignes :
|
|
65
|
+
// 1 = b-(1e exp)*q
|
|
66
|
+
// où q est le quotient pour 1=..
|
|
67
|
+
oneLine = substract(b, multiply(substract(coeffs[0][0], multiply(coeffs[0][1], coeffs[0][2])), coeffs[1][2])).toTex();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// 4 lignes:
|
|
71
|
+
// 1 = (1ere exp) - (2e)*q2
|
|
72
|
+
// où q2=quotient dans 1=..
|
|
73
|
+
// et 2e = b-(1ere)*q1
|
|
74
|
+
// où q1=quotient dans 2e ligne
|
|
75
|
+
const firstExp = substract(coeffs[0][0], multiply(coeffs[0][1], coeffs[0][2]));
|
|
76
|
+
const secondExp = substract(b, multiply(firstExp, coeffs[1][2]));
|
|
77
|
+
oneLine = substract(firstExp, multiply(secondExp, coeffs[2][2])).toTex();
|
|
78
|
+
}
|
|
79
|
+
const [u, v] = bezout(a, b);
|
|
80
|
+
const answerTex = add(multiply(a, u), multiply(b, v)).toTex();
|
|
81
|
+
return `On écrit l'algorithme d'Euclide :
|
|
82
|
+
|
|
83
|
+
${alignTex(coeffs.map((arr) => [
|
|
84
|
+
`${arr[0]}`,
|
|
85
|
+
"=",
|
|
86
|
+
`${arr[1]} \\times ${arr[2]} + ${arr[3]}`,
|
|
87
|
+
]))}
|
|
88
|
+
|
|
89
|
+
On isole les restes non nuls :
|
|
90
|
+
|
|
91
|
+
${alignTex(coeffs
|
|
92
|
+
.slice(0, coeffs.length - 1)
|
|
93
|
+
.map((arr) => [
|
|
94
|
+
`${arr[3]}`,
|
|
95
|
+
"=",
|
|
96
|
+
substract(arr[0], multiply(arr[1], arr[2])).toTex(),
|
|
97
|
+
]))}
|
|
98
|
+
|
|
99
|
+
On remonte l'algorithme à partir du dernier reste non nul ($1$), et on remplace les restes par les expressions obtenues ci-dessus. On obtient :
|
|
100
|
+
|
|
101
|
+
${alignTex([
|
|
102
|
+
["1", "=", oneLine],
|
|
103
|
+
["", "=", answerTex],
|
|
104
|
+
])}
|
|
105
|
+
|
|
106
|
+
On en conclut qu'un couple solution est :
|
|
107
|
+
|
|
108
|
+
$$
|
|
109
|
+
${getAnswer(identifiers)}
|
|
110
|
+
$$
|
|
111
|
+
|
|
112
|
+
`;
|
|
113
|
+
};
|
|
114
|
+
const getKeys = () => {
|
|
115
|
+
return ["semicolon"];
|
|
116
|
+
};
|
|
117
|
+
const isAnswerValid = (ans, { a, b }) => {
|
|
118
|
+
try {
|
|
119
|
+
const parsed = pointParser(ans);
|
|
120
|
+
if (!parsed)
|
|
121
|
+
return false;
|
|
122
|
+
const [u, v] = [parsed.x.evaluate(), parsed.y.evaluate()];
|
|
123
|
+
return a * u + b * v === 1;
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
return handleVEAError(err);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const getFindBezoutCoefficientsQuestion = () => {
|
|
130
|
+
let a = 0;
|
|
131
|
+
let b = 0;
|
|
132
|
+
let ite = 10;
|
|
133
|
+
let _u;
|
|
134
|
+
let _v;
|
|
135
|
+
//pour un algo d'euclide à 3 ou 4 lignes
|
|
136
|
+
while (ite > 5 || ite < 4) {
|
|
137
|
+
a = randint(10, 100);
|
|
138
|
+
b = random(coprimesOf(a));
|
|
139
|
+
[_u, _v, ite] = bezout(a, b, 0);
|
|
140
|
+
console.log(a, b, ite);
|
|
141
|
+
}
|
|
142
|
+
const identifiers = {
|
|
143
|
+
a,
|
|
144
|
+
b,
|
|
145
|
+
};
|
|
146
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
147
|
+
};
|
|
148
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
149
|
+
return {
|
|
150
|
+
answer: getAnswer(identifiers),
|
|
151
|
+
instruction: getInstruction(identifiers),
|
|
152
|
+
keys: getKeys(identifiers),
|
|
153
|
+
answerFormat: "tex",
|
|
154
|
+
identifiers,
|
|
155
|
+
hint: getHint(identifiers),
|
|
156
|
+
correction: getCorrection(identifiers),
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
export const findBezoutCoefficients = {
|
|
160
|
+
id: "findBezoutCoefficients",
|
|
161
|
+
label: "Calculer les coefficients de Bézout ($au+bv = 1$)",
|
|
162
|
+
isSingleStep: true,
|
|
163
|
+
generator: (nb, opts) => getDistinctQuestions(() => getFindBezoutCoefficientsQuestion(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,9 @@
|
|
|
1
|
+
import { Exercise } from "../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
a: number;
|
|
4
|
+
b: number;
|
|
5
|
+
c: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const hasDiophantianEquationSolution: Exercise<Identifiers>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=hasDiophantianEquationSolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasDiophantianEquationSolution.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/arithmetic/hasDiophantianEquationSolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,6BAA6B,CAAC;AAWrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CAEX,CAAC;AAgGF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,CAsBhE,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { gcd } from "../../../math/utils/arithmetic/gcd.js";
|
|
4
|
+
import { nonCoprimesOf } from "../../../math/utils/arithmetic/nonCoprimesOf.js";
|
|
5
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
6
|
+
import { add } from "../../../tree/nodes/operators/addNode.js";
|
|
7
|
+
import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
8
|
+
import { coinFlip } from "../../../utils/alea/coinFlip.js";
|
|
9
|
+
import { random } from "../../../utils/alea/random.js";
|
|
10
|
+
import { doWhile } from "../../../utils/doWhile.js";
|
|
11
|
+
const getPropositions = (n, { answer }) => {
|
|
12
|
+
const propositions = [];
|
|
13
|
+
addValidProp(propositions, answer);
|
|
14
|
+
tryToAddWrongProp(propositions, "Oui");
|
|
15
|
+
tryToAddWrongProp(propositions, "Non");
|
|
16
|
+
tryToAddWrongProp(propositions, "On ne peut pas savoir");
|
|
17
|
+
return shuffleProps(propositions, n);
|
|
18
|
+
};
|
|
19
|
+
const getAnswer = (identifiers) => {
|
|
20
|
+
const { a, b, c } = identifiers;
|
|
21
|
+
const pgcd = gcd(a, b);
|
|
22
|
+
const isMult = Math.floor(c / pgcd) === c / pgcd;
|
|
23
|
+
return isMult ? "Oui" : "Non";
|
|
24
|
+
};
|
|
25
|
+
const getInstruction = (identifiers) => {
|
|
26
|
+
const { a, b, c } = identifiers;
|
|
27
|
+
return `On considère l'équation $(E)$ suivante :
|
|
28
|
+
|
|
29
|
+
$$
|
|
30
|
+
(E): \\ \\ ${add(multiply(a, "x"), multiply(b, "y")).toTex()} = ${c}
|
|
31
|
+
$$
|
|
32
|
+
|
|
33
|
+
$(E)$ admet-elle au moins une solution ?`;
|
|
34
|
+
};
|
|
35
|
+
const getHint = () => {
|
|
36
|
+
return `Soient $a$,$b$ et $c$ trois entiers relatifs non nuls.
|
|
37
|
+
|
|
38
|
+
L'équation $ax+by=c$ admet des solutions si et seulement si $c$ est un multiple du PGCD de $a$ et $b$.`;
|
|
39
|
+
};
|
|
40
|
+
const getCorrection = (identifiers) => {
|
|
41
|
+
const { a, b, c } = identifiers;
|
|
42
|
+
const pgcd = gcd(a, b);
|
|
43
|
+
const isMult = Math.floor(c / pgcd) === c / pgcd;
|
|
44
|
+
return `L'équation $ax+by=c$ admet des solutions si et seulement si $c$ est un multiple du PGCD de $a$ et $b$.
|
|
45
|
+
|
|
46
|
+
Ici, on a :
|
|
47
|
+
|
|
48
|
+
$$
|
|
49
|
+
\\text{PGCD}(${a};${b}) = ${pgcd}
|
|
50
|
+
$$
|
|
51
|
+
|
|
52
|
+
${isMult
|
|
53
|
+
? `Puisque $${c}$ est un multiple de $${pgcd}$, l'équation $(E)$ admet bien au moins une solution.`
|
|
54
|
+
: `Puisque $${c}$ n'est pas un multiple de $${pgcd}$, l'équation $(E)$ n'admet pas de solution.`}
|
|
55
|
+
`;
|
|
56
|
+
};
|
|
57
|
+
const getHasDiophantianEquationSolutionQuestion = () => {
|
|
58
|
+
const hasSol = coinFlip();
|
|
59
|
+
let a;
|
|
60
|
+
let b;
|
|
61
|
+
let c;
|
|
62
|
+
let pgcd;
|
|
63
|
+
if (hasSol) {
|
|
64
|
+
a = randint(5, 50);
|
|
65
|
+
b = randint(-50, 50, [-1, 0, 1]);
|
|
66
|
+
pgcd = gcd(a, b);
|
|
67
|
+
c = pgcd * randint(-10, 10, [0]);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
a = randint(5, 50);
|
|
71
|
+
b = random(nonCoprimesOf(a));
|
|
72
|
+
pgcd = gcd(a, b);
|
|
73
|
+
c = doWhile(() => randint(-10, 10, [0]), (x) => Math.floor(x / pgcd) === x / pgcd);
|
|
74
|
+
}
|
|
75
|
+
const identifiers = { a, b, c };
|
|
76
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
77
|
+
};
|
|
78
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
79
|
+
return {
|
|
80
|
+
answer: getAnswer(identifiers),
|
|
81
|
+
instruction: getInstruction(identifiers),
|
|
82
|
+
keys: [],
|
|
83
|
+
answerFormat: "raw",
|
|
84
|
+
identifiers,
|
|
85
|
+
hint: getHint(identifiers),
|
|
86
|
+
correction: getCorrection(identifiers),
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
export const hasDiophantianEquationSolution = {
|
|
90
|
+
id: "hasDiophantianEquationSolution",
|
|
91
|
+
label: "Déterminer si l'équation diophantienne $ax+by=c$ admet au moins une solution",
|
|
92
|
+
isSingleStep: true,
|
|
93
|
+
generator: (nb, opts) => getDistinctQuestions(() => getHasDiophantianEquationSolutionQuestion(opts), nb),
|
|
94
|
+
qcmTimer: 60,
|
|
95
|
+
freeTimer: 60,
|
|
96
|
+
getPropositions,
|
|
97
|
+
subject: "Mathématiques",
|
|
98
|
+
getInstruction,
|
|
99
|
+
getHint,
|
|
100
|
+
getCorrection,
|
|
101
|
+
getAnswer,
|
|
102
|
+
getQuestionFromIdentifiers,
|
|
103
|
+
hasHintAndCorrection: true,
|
|
104
|
+
answerType: "QCU",
|
|
105
|
+
};
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
export * from "./congruenceBasicComputation.js";
|
|
2
|
+
export * from "./congruenceBasicEquation.js";
|
|
3
|
+
export * from "./fillCongruenceTableFirstDegree.js";
|
|
4
|
+
export * from "./findBezoutCoefficients.js";
|
|
5
|
+
export * from "./hasDiophantianEquationSolution.js";
|
|
6
|
+
export * from "./diophantianEquationSimpleSolution.js";
|
|
7
|
+
export * from "./pgcdHomogenuity.js";
|
|
8
|
+
export * from "./pgcdFromPrimeDecomposition.js";
|
|
9
|
+
export * from "./fermatUsageOnBigPowers.js";
|
|
2
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/arithmetic/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/arithmetic/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
|
|
@@ -1 +1,9 @@
|
|
|
1
1
|
export * from "./congruenceBasicComputation.js";
|
|
2
|
+
export * from "./congruenceBasicEquation.js";
|
|
3
|
+
export * from "./fillCongruenceTableFirstDegree.js";
|
|
4
|
+
export * from "./findBezoutCoefficients.js";
|
|
5
|
+
export * from "./hasDiophantianEquationSolution.js";
|
|
6
|
+
export * from "./diophantianEquationSimpleSolution.js";
|
|
7
|
+
export * from "./pgcdHomogenuity.js";
|
|
8
|
+
export * from "./pgcdFromPrimeDecomposition.js";
|
|
9
|
+
export * from "./fermatUsageOnBigPowers.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Exercise } from "../../../exercises/exercise.js";
|
|
2
|
+
type Identifiers = {
|
|
3
|
+
aPrimes: number[];
|
|
4
|
+
aPowers: number[];
|
|
5
|
+
bPrimes: number[];
|
|
6
|
+
bPowers: number[];
|
|
7
|
+
};
|
|
8
|
+
export declare const pgcdFromPrimeDecomposition: Exercise<Identifiers>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=pgcdFromPrimeDecomposition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgcdFromPrimeDecomposition.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/arithmetic/pgcdFromPrimeDecomposition.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAsJF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAmB5D,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, propWhile, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
4
|
+
import { randTupleInt } from "../../../math/utils/random/randTupleInt.js";
|
|
5
|
+
import { MultiplyNode } from "../../../tree/nodes/operators/multiplyNode.js";
|
|
6
|
+
import { power } from "../../../tree/nodes/operators/powerNode.js";
|
|
7
|
+
import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
|
|
8
|
+
import { operatorComposition } from "../../../tree/utilities/operatorComposition.js";
|
|
9
|
+
import { randomMany } from "../../../utils/alea/random.js";
|
|
10
|
+
import { doWhile } from "../../../utils/doWhile.js";
|
|
11
|
+
import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
|
|
12
|
+
const getPropositions = (n, { answer, ...identifiers }) => {
|
|
13
|
+
const propositions = [];
|
|
14
|
+
addValidProp(propositions, answer);
|
|
15
|
+
const { aPrimes, aPowers, bPrimes, bPowers } = identifiers;
|
|
16
|
+
const commonPrimes = aPrimes.filter((p) => bPrimes.includes(p));
|
|
17
|
+
const maxPowers = [];
|
|
18
|
+
commonPrimes.forEach((p) => {
|
|
19
|
+
const aIndex = aPrimes.indexOf(p);
|
|
20
|
+
const bIndex = bPrimes.indexOf(p);
|
|
21
|
+
maxPowers.push(Math.max(aPowers[aIndex], bPowers[bIndex]));
|
|
22
|
+
});
|
|
23
|
+
tryToAddWrongProp(propositions, operatorComposition(MultiplyNode, commonPrimes.map((p, i) => power(p, maxPowers[i]))).toTex({ hidePowerOfOne: true }));
|
|
24
|
+
propWhile(propositions, n, () => {
|
|
25
|
+
tryToAddWrongProp(propositions, operatorComposition(MultiplyNode, commonPrimes.map((p) => power(p, randint(1, 5)))).toTex({ hidePowerOfOne: true }));
|
|
26
|
+
});
|
|
27
|
+
return shuffleProps(propositions, n);
|
|
28
|
+
};
|
|
29
|
+
const getAnswer = (identifiers) => {
|
|
30
|
+
const { aPrimes, aPowers, bPrimes, bPowers } = identifiers;
|
|
31
|
+
const commonPrimes = aPrimes.filter((p) => bPrimes.includes(p));
|
|
32
|
+
const minPowers = [];
|
|
33
|
+
commonPrimes.forEach((p) => {
|
|
34
|
+
const aIndex = aPrimes.indexOf(p);
|
|
35
|
+
const bIndex = bPrimes.indexOf(p);
|
|
36
|
+
minPowers.push(Math.min(aPowers[aIndex], bPowers[bIndex]));
|
|
37
|
+
});
|
|
38
|
+
return operatorComposition(MultiplyNode, commonPrimes.map((p, i) => power(p, minPowers[i]))).toTex({ hidePowerOfOne: true });
|
|
39
|
+
};
|
|
40
|
+
const getInstruction = (identifiers) => {
|
|
41
|
+
const { aPrimes, aPowers, bPrimes, bPowers } = identifiers;
|
|
42
|
+
return `On considère les nombres $a$ et $b$ suivants :
|
|
43
|
+
|
|
44
|
+
$$
|
|
45
|
+
a = ${operatorComposition(MultiplyNode, aPrimes.map((p, i) => power(p, aPowers[i]))).toTex({ hidePowerOfOne: true })}
|
|
46
|
+
$$
|
|
47
|
+
|
|
48
|
+
$$
|
|
49
|
+
b = ${operatorComposition(MultiplyNode, bPrimes.map((p, i) => power(p, bPowers[i]))).toTex({ hidePowerOfOne: true })}
|
|
50
|
+
$$
|
|
51
|
+
|
|
52
|
+
Déterminer le PGCD de $a$ et $b$.
|
|
53
|
+
|
|
54
|
+
On pourra donner la réponse sous forme non calculée.`;
|
|
55
|
+
};
|
|
56
|
+
const getHint = () => {
|
|
57
|
+
return `Repère les facteurs premiers communs à $a$ et $b$, et prend leurs plus petit exposant.`;
|
|
58
|
+
};
|
|
59
|
+
const getCorrection = (identifiers) => {
|
|
60
|
+
return `On repère les facteurs premiers communs à $a$ et $b$, et on prend leurs plus petit exposant :
|
|
61
|
+
|
|
62
|
+
$$
|
|
63
|
+
${getAnswer(identifiers)}
|
|
64
|
+
$$
|
|
65
|
+
|
|
66
|
+
Ce nombre divise bien $a$ et $b$, et c'est bien le plus grand.
|
|
67
|
+
|
|
68
|
+
C'est donc le PGCD de $a$ et $b$.`;
|
|
69
|
+
};
|
|
70
|
+
const getKeys = () => {
|
|
71
|
+
return [];
|
|
72
|
+
};
|
|
73
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = parseAlgebraic(ans);
|
|
76
|
+
if (parsed.simplify().toTex() === answer)
|
|
77
|
+
return true;
|
|
78
|
+
if (parsed.simplify({ calculatePowers: true }).toTex() ===
|
|
79
|
+
parseAlgebraic(answer).simplify({ calculatePowers: true }).toTex())
|
|
80
|
+
return true;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
return handleVEAError(err);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const getPgcdFromPrimeDecompositionQuestion = () => {
|
|
88
|
+
const primes = [2, 3, 5, 7, 11, 13];
|
|
89
|
+
const aPrimes = randomMany(primes, randint(3, 6)).sort((a, b) => a - b);
|
|
90
|
+
const bPrimes = doWhile(() => randomMany(primes, randint(3, 6)), (list) => list.every((p) => !aPrimes.includes(p))).sort((a, b) => a - b);
|
|
91
|
+
const aPowers = randTupleInt(aPrimes.length, {
|
|
92
|
+
from: 1,
|
|
93
|
+
to: 7,
|
|
94
|
+
});
|
|
95
|
+
const bPowers = randTupleInt(bPrimes.length, {
|
|
96
|
+
from: 1,
|
|
97
|
+
to: 7,
|
|
98
|
+
excludes: [aPowers],
|
|
99
|
+
});
|
|
100
|
+
const identifiers = {
|
|
101
|
+
aPrimes,
|
|
102
|
+
bPrimes,
|
|
103
|
+
aPowers,
|
|
104
|
+
bPowers,
|
|
105
|
+
};
|
|
106
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
107
|
+
};
|
|
108
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
109
|
+
return {
|
|
110
|
+
answer: getAnswer(identifiers),
|
|
111
|
+
instruction: getInstruction(identifiers),
|
|
112
|
+
keys: getKeys(identifiers),
|
|
113
|
+
answerFormat: "tex",
|
|
114
|
+
identifiers,
|
|
115
|
+
hint: getHint(identifiers),
|
|
116
|
+
correction: getCorrection(identifiers),
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
export const pgcdFromPrimeDecomposition = {
|
|
120
|
+
id: "pgcdFromPrimeDecomposition",
|
|
121
|
+
connector: "=",
|
|
122
|
+
label: "Déterminer un PGCD en utilisant la décomposition en produit de facteurs premiers",
|
|
123
|
+
isSingleStep: true,
|
|
124
|
+
generator: (nb, opts) => getDistinctQuestions(() => getPgcdFromPrimeDecompositionQuestion(opts), nb),
|
|
125
|
+
qcmTimer: 60,
|
|
126
|
+
freeTimer: 60,
|
|
127
|
+
getPropositions,
|
|
128
|
+
isAnswerValid,
|
|
129
|
+
subject: "Mathématiques",
|
|
130
|
+
getInstruction,
|
|
131
|
+
getHint,
|
|
132
|
+
getCorrection,
|
|
133
|
+
getAnswer,
|
|
134
|
+
getQuestionFromIdentifiers,
|
|
135
|
+
hasHintAndCorrection: true,
|
|
136
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgcdHomogenuity.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/arithmetic/pgcdHomogenuity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA4GF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAkBjD,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, propWhile, tryToAddWrongProp, } from "../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { numberVEA } from "../../../exercises/vea/numberVEA.js";
|
|
4
|
+
import { gcd } from "../../../math/utils/arithmetic/gcd.js";
|
|
5
|
+
import { randint } from "../../../math/utils/random/randint.js";
|
|
6
|
+
import { randTupleInt } from "../../../math/utils/random/randTupleInt.js";
|
|
7
|
+
import { random } from "../../../utils/alea/random.js";
|
|
8
|
+
import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
|
|
9
|
+
import { alignTex } from "../../../utils/latex/alignTex.js";
|
|
10
|
+
const getPropositions = (n, { answer }) => {
|
|
11
|
+
const propositions = [];
|
|
12
|
+
addValidProp(propositions, answer);
|
|
13
|
+
propWhile(propositions, n, () => {
|
|
14
|
+
tryToAddWrongProp(propositions, randint(1, 50).frenchify());
|
|
15
|
+
});
|
|
16
|
+
return shuffleProps(propositions, n);
|
|
17
|
+
};
|
|
18
|
+
const getAnswer = (identifiers) => {
|
|
19
|
+
const { a, b } = identifiers;
|
|
20
|
+
return gcd(a, b).frenchify();
|
|
21
|
+
};
|
|
22
|
+
const getInstruction = (identifiers) => {
|
|
23
|
+
const { a, b } = identifiers;
|
|
24
|
+
return `En utilisant l'homogénéité du PGCD, calculer :
|
|
25
|
+
|
|
26
|
+
$$
|
|
27
|
+
\\text{PGCD}(${a} ; ${b})
|
|
28
|
+
$$`;
|
|
29
|
+
};
|
|
30
|
+
const getHint = () => {
|
|
31
|
+
return `Le PGCD est homogène : c'est à dire que, pour tout entier naturel $k$ non nul, et tous entiers relatifs $a$ et $b$ non nuls, on a
|
|
32
|
+
|
|
33
|
+
$$
|
|
34
|
+
\\text{PGCD}(ka ; kb) = k\\text{PGCD}(a ; b)
|
|
35
|
+
$$
|
|
36
|
+
|
|
37
|
+
Sers toi de cette propriété pour simplifier le calcul du PGCD demandé.`;
|
|
38
|
+
};
|
|
39
|
+
const getCorrection = (identifiers) => {
|
|
40
|
+
const { a, b } = identifiers;
|
|
41
|
+
const absA = Math.abs(a);
|
|
42
|
+
const absB = Math.abs(b);
|
|
43
|
+
const pgcd = gcd(absA, absB);
|
|
44
|
+
const simpA = absA / pgcd;
|
|
45
|
+
const simpB = absB / pgcd;
|
|
46
|
+
const lines = [];
|
|
47
|
+
if (a < 0 || b < 0) {
|
|
48
|
+
lines.push([
|
|
49
|
+
`\\text{PGCD}(${a}; ${b})`,
|
|
50
|
+
"=",
|
|
51
|
+
`\\text{PGCD}(${absA}; ${absB})`,
|
|
52
|
+
]);
|
|
53
|
+
lines.push(["", "=", `${pgcd}\\times \\text{PGCD}(${simpA}; ${simpB})`]);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
lines.push([
|
|
57
|
+
`\\text{PGCD}(${a}; ${b})`,
|
|
58
|
+
"=",
|
|
59
|
+
`${pgcd}\\times \\text{PGCD}(${simpA}; ${simpB})`,
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
return `Puisque le PGCD est homogène, on a :
|
|
63
|
+
|
|
64
|
+
${alignTex(lines)}
|
|
65
|
+
|
|
66
|
+
Or, $\\text{PGCD}(${simpA}, ${simpB}) = 1$ ; donc :
|
|
67
|
+
|
|
68
|
+
$$
|
|
69
|
+
\\text{PGCD}(${a}; ${b}) = ${pgcd}
|
|
70
|
+
$$`;
|
|
71
|
+
};
|
|
72
|
+
const getKeys = () => {
|
|
73
|
+
return [];
|
|
74
|
+
};
|
|
75
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
76
|
+
try {
|
|
77
|
+
return numberVEA(ans, answer);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
return handleVEAError(err);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const getPgcdHomogenuityQuestion = () => {
|
|
84
|
+
const [u, v] = randTupleInt(2, {
|
|
85
|
+
from: -10,
|
|
86
|
+
to: 11,
|
|
87
|
+
elExcludes: [-1, 0, 1],
|
|
88
|
+
allDifferent: true,
|
|
89
|
+
});
|
|
90
|
+
const k = random([2, 3, 4, 5]) * random([2, 3, 4, 5]);
|
|
91
|
+
const a = k * u;
|
|
92
|
+
const b = k * v;
|
|
93
|
+
const identifiers = { a, b };
|
|
94
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
95
|
+
};
|
|
96
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
97
|
+
return {
|
|
98
|
+
answer: getAnswer(identifiers),
|
|
99
|
+
instruction: getInstruction(identifiers),
|
|
100
|
+
keys: getKeys(identifiers),
|
|
101
|
+
answerFormat: "tex",
|
|
102
|
+
identifiers,
|
|
103
|
+
hint: getHint(identifiers),
|
|
104
|
+
correction: getCorrection(identifiers),
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export const pgcdHomogenuity = {
|
|
108
|
+
id: "pgcdHomogenuity",
|
|
109
|
+
connector: "=",
|
|
110
|
+
label: "Calculer un PGCD en utilisant son homogénéité",
|
|
111
|
+
isSingleStep: true,
|
|
112
|
+
generator: (nb, opts) => getDistinctQuestions(() => getPgcdHomogenuityQuestion(opts), nb),
|
|
113
|
+
qcmTimer: 60,
|
|
114
|
+
freeTimer: 60,
|
|
115
|
+
getPropositions,
|
|
116
|
+
isAnswerValid,
|
|
117
|
+
subject: "Mathématiques",
|
|
118
|
+
getInstruction,
|
|
119
|
+
getHint,
|
|
120
|
+
getCorrection,
|
|
121
|
+
getAnswer,
|
|
122
|
+
getQuestionFromIdentifiers,
|
|
123
|
+
hasHintAndCorrection: true,
|
|
124
|
+
};
|
|
@@ -183,10 +183,10 @@ ${isPositive ? `` : `-`}\\frac{${2 * a}}{10} = ${strEv}`;
|
|
|
183
183
|
},
|
|
184
184
|
];
|
|
185
185
|
const invalidItems = permute(ascOrderedQuestionParams.map((questionParam) => opts.isUseABC ? questionParam.letter : questionParam.tex))
|
|
186
|
-
.filter(([D, E, F]) =>
|
|
186
|
+
.filter(([D, E, F]) => `${D}>${E}>${F}` !== validItems[0].tex)
|
|
187
187
|
.map(([D, E, F]) => {
|
|
188
188
|
return {
|
|
189
|
-
tex:
|
|
189
|
+
tex: `${D}>${E}>${F}`,
|
|
190
190
|
isValidAnswer: false,
|
|
191
191
|
};
|
|
192
192
|
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Exercise } from "../../../exercises/exercise.js";
|
|
2
|
+
import { NodeIdentifiers } from "../../../tree/nodes/nodeConstructor.js";
|
|
2
3
|
type Identifiers = {
|
|
3
4
|
arg: number;
|
|
4
5
|
zTex: string;
|
|
6
|
+
reIds: NodeIdentifiers;
|
|
7
|
+
imIds: NodeIdentifiers;
|
|
5
8
|
};
|
|
6
9
|
export declare const argumentFromAlgebraicComplex: Exercise<Identifiers>;
|
|
7
10
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argumentFromAlgebraicComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/argumentFromAlgebraicComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"argumentFromAlgebraicComplex.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/complex/argumentFromAlgebraicComplex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAS7C,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAoJF,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,WAAW,CAc9D,CAAC"}
|