math-exercises 3.0.215 → 3.0.217

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 (128) hide show
  1. package/lib/exercises/math/arithmetic/whichDayInXDays.d.ts.map +1 -1
  2. package/lib/exercises/math/arithmetic/whichDayInXDays.js +2 -1
  3. package/lib/exercises/math/calculLitteral/equation/exp/expOfFEqualsExpOfGEquation.d.ts.map +1 -1
  4. package/lib/exercises/math/calculLitteral/equation/exp/expOfFEqualsExpOfGEquation.js +19 -32
  5. package/lib/exercises/math/complex/unitRoots/giveOneSolutionToComplexPowNEqualsOne.js +1 -1
  6. package/lib/exercises/math/conversion/clock/index.d.ts +0 -1
  7. package/lib/exercises/math/conversion/clock/index.d.ts.map +1 -1
  8. package/lib/exercises/math/conversion/clock/index.js +1 -1
  9. package/lib/exercises/math/derivation/derivative/trigo/sinCosDerivativeRewriteUsingCos2PlusSin2Equals1.js +2 -2
  10. package/lib/exercises/math/graphs/adjacentMatrixPath.d.ts +10 -0
  11. package/lib/exercises/math/graphs/adjacentMatrixPath.d.ts.map +1 -0
  12. package/lib/exercises/math/graphs/adjacentMatrixPath.js +89 -0
  13. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.d.ts +7 -0
  14. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.d.ts.map +1 -0
  15. package/lib/exercises/math/graphs/edgesNumberFromSummitsDegrees.js +98 -0
  16. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.d.ts +8 -0
  17. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.d.ts.map +1 -0
  18. package/lib/exercises/math/graphs/eulerianChainFromAdjacentMatrix.js +96 -0
  19. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.d.ts +15 -0
  20. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.d.ts.map +1 -0
  21. package/lib/exercises/math/graphs/graphsChainOrPathOfLengthN.js +262 -0
  22. package/lib/exercises/math/graphs/graphsCheckIsConnectedGraph.d.ts +11 -0
  23. package/lib/exercises/math/graphs/graphsCheckIsConnectedGraph.d.ts.map +1 -0
  24. package/lib/exercises/math/graphs/graphsCheckIsConnectedGraph.js +178 -0
  25. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.d.ts +11 -0
  26. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.d.ts.map +1 -0
  27. package/lib/exercises/math/graphs/graphsCheckIsConnectedUndirectedGraph.js +178 -0
  28. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.d.ts +19 -0
  29. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.d.ts.map +1 -0
  30. package/lib/exercises/math/graphs/graphsCheckIsSameGraph.js +301 -0
  31. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.d.ts +16 -0
  32. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.d.ts.map +1 -0
  33. package/lib/exercises/math/graphs/graphsCheckIsVerticesAdjacent.js +207 -0
  34. package/lib/exercises/math/graphs/graphsDegreeOfVertex.d.ts +15 -0
  35. package/lib/exercises/math/graphs/graphsDegreeOfVertex.d.ts.map +1 -0
  36. package/lib/exercises/math/graphs/graphsDegreeOfVertex.js +232 -0
  37. package/lib/exercises/math/graphs/graphsOrderOfGraph.d.ts +14 -0
  38. package/lib/exercises/math/graphs/graphsOrderOfGraph.d.ts.map +1 -0
  39. package/lib/exercises/math/graphs/graphsOrderOfGraph.js +222 -0
  40. package/lib/exercises/math/graphs/index.d.ts +10 -0
  41. package/lib/exercises/math/graphs/index.d.ts.map +1 -0
  42. package/lib/exercises/math/graphs/index.js +9 -0
  43. package/lib/exercises/math/index.d.ts +1 -0
  44. package/lib/exercises/math/index.d.ts.map +1 -1
  45. package/lib/exercises/math/index.js +1 -0
  46. package/lib/exercises/math/integration/fromExpr/integralFromExpr.d.ts.map +1 -1
  47. package/lib/exercises/math/integration/fromExpr/integralFromExpr.js +2 -0
  48. package/lib/exercises/math/matrices/areMatricesInverse.d.ts +9 -0
  49. package/lib/exercises/math/matrices/areMatricesInverse.d.ts.map +1 -0
  50. package/lib/exercises/math/matrices/areMatricesInverse.js +106 -0
  51. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.d.ts +9 -0
  52. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.d.ts.map +1 -0
  53. package/lib/exercises/math/matrices/computeFixedMatrixInRecurrenceSequence.js +144 -0
  54. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.d.ts +8 -0
  55. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.d.ts.map +1 -0
  56. package/lib/exercises/math/matrices/findInversedMatrixFromSystem.js +148 -0
  57. package/lib/exercises/math/matrices/index.d.ts +12 -0
  58. package/lib/exercises/math/matrices/index.d.ts.map +1 -1
  59. package/lib/exercises/math/matrices/index.js +12 -0
  60. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.d.ts +8 -0
  61. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.d.ts.map +1 -0
  62. package/lib/exercises/math/matrices/isMatrixTransitionMatrix.js +132 -0
  63. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.d.ts +8 -0
  64. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.d.ts.map +1 -0
  65. package/lib/exercises/math/matrices/matrixBuildMatrixFromCoefficients.js +152 -0
  66. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.d.ts +8 -0
  67. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.d.ts.map +1 -0
  68. package/lib/exercises/math/matrices/matrixCheckIsSymmetrical.js +155 -0
  69. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.d.ts +8 -0
  70. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.d.ts.map +1 -0
  71. package/lib/exercises/math/matrices/matrixComputeDetOfMat2.js +142 -0
  72. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.d.ts +8 -0
  73. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.d.ts.map +1 -0
  74. package/lib/exercises/math/matrices/matrixComputeInverseOfMat2.js +237 -0
  75. package/lib/exercises/math/matrices/matrixComputeLinearCombination.d.ts +15 -0
  76. package/lib/exercises/math/matrices/matrixComputeLinearCombination.d.ts.map +1 -0
  77. package/lib/exercises/math/matrices/matrixComputeLinearCombination.js +232 -0
  78. package/lib/exercises/math/matrices/matrixComputePower.d.ts +12 -0
  79. package/lib/exercises/math/matrices/matrixComputePower.d.ts.map +1 -0
  80. package/lib/exercises/math/matrices/matrixComputePower.js +230 -0
  81. package/lib/exercises/math/matrices/matrixComputeProduct.d.ts +9 -0
  82. package/lib/exercises/math/matrices/matrixComputeProduct.d.ts.map +1 -0
  83. package/lib/exercises/math/matrices/matrixComputeProduct.js +178 -0
  84. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.d.ts +8 -0
  85. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.d.ts.map +1 -0
  86. package/lib/exercises/math/matrices/writeMatrixAssociatedToSystem.js +105 -0
  87. package/lib/exercises/math/spaceGeometry/parametricLine/lineLineRelativePositionsFromParametricLines.d.ts.map +1 -1
  88. package/lib/exercises/math/spaceGeometry/parametricLine/lineLineRelativePositionsFromParametricLines.js +56 -3
  89. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlaneEquation.d.ts.map +1 -1
  90. package/lib/exercises/math/spaceGeometry/planes/findNormalVectorFromPlaneEquation.js +6 -0
  91. package/lib/exercises/vea/matrixVEA.d.ts +2 -0
  92. package/lib/exercises/vea/matrixVEA.d.ts.map +1 -0
  93. package/lib/exercises/vea/matrixVEA.js +1 -0
  94. package/lib/exercises/vea/treeTableVEA.d.ts.map +1 -1
  95. package/lib/exercises/vea/treeTableVEA.js +2 -0
  96. package/lib/index.d.ts +86 -13
  97. package/lib/index.d.ts.map +1 -1
  98. package/lib/math/geometry/point.d.ts.map +1 -1
  99. package/lib/math/geometry/point.js +3 -1
  100. package/lib/math/graphs/graph.d.ts +43 -0
  101. package/lib/math/graphs/graph.d.ts.map +1 -0
  102. package/lib/math/graphs/graph.js +447 -0
  103. package/lib/math/matrices/matrix.d.ts +42 -3
  104. package/lib/math/matrices/matrix.d.ts.map +1 -1
  105. package/lib/math/matrices/matrix.js +173 -7
  106. package/lib/math/matrices/parseMatrix.d.ts +3 -0
  107. package/lib/math/matrices/parseMatrix.d.ts.map +1 -0
  108. package/lib/math/matrices/parseMatrix.js +22 -0
  109. package/lib/math/systems/generalSystem.d.ts +2 -0
  110. package/lib/math/systems/generalSystem.d.ts.map +1 -1
  111. package/lib/math/systems/generalSystem.js +5 -0
  112. package/lib/math/utils/graphs/graphRenderer.d.ts +25 -0
  113. package/lib/math/utils/graphs/graphRenderer.d.ts.map +1 -0
  114. package/lib/math/utils/graphs/graphRenderer.js +123 -0
  115. package/lib/playground.d.ts +6 -1
  116. package/lib/playground.d.ts.map +1 -1
  117. package/lib/playground.js +6 -5
  118. package/lib/tree/parsers/latexParser.d.ts +1 -1
  119. package/lib/tree/utilities/nodeSimplifier.d.ts +1 -1
  120. package/lib/types/keyIds.d.ts +2 -0
  121. package/lib/types/keyIds.d.ts.map +1 -1
  122. package/lib/utils/arrays/arrayChunks.d.ts +9 -0
  123. package/lib/utils/arrays/arrayChunks.d.ts.map +1 -0
  124. package/lib/utils/arrays/arrayChunks.js +34 -0
  125. package/lib/utils/strings/ordinalSuffixed.d.ts +2 -0
  126. package/lib/utils/strings/ordinalSuffixed.d.ts.map +1 -0
  127. package/lib/utils/strings/ordinalSuffixed.js +5 -0
  128. package/package.json +7 -1
@@ -0,0 +1,155 @@
1
+ import { addValidProp, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { Matrix, MatrixConstructor, } from "../../../math/matrices/matrix.js";
4
+ import { randint } from "../../../math/utils/random/randint.js";
5
+ import { NodeComparator } from "../../../tree/utilities/nodeComparator.js";
6
+ import { random } from "../../../utils/alea/random.js";
7
+ import { zip } from "../../../utils/arrays/arrayZip.js";
8
+ const _isMatrixSymH = (mat) => {
9
+ return zip(mat.elements, mat.elements.toReversed()).every(([row1, row2]) => zip(row1, row2).every(([node1, node2]) => NodeComparator.isEqualViaSub(node1, node2)));
10
+ };
11
+ const _isMatrixSymV = (mat) => {
12
+ return _isMatrixSymV(mat.transposed());
13
+ };
14
+ const isMatrixSymMat = (mat) => {
15
+ return mat.equals(mat.transposed());
16
+ };
17
+ const getHydrated = (identifiers) => {
18
+ const { matIdsA } = identifiers;
19
+ const [matA] = [matIdsA].map((matIds) => MatrixConstructor.fromIdentifiers(matIds));
20
+ return {
21
+ matA,
22
+ };
23
+ };
24
+ const getInstruction = (identifiers) => {
25
+ const { matA } = getHydrated(identifiers);
26
+ return `Soit :
27
+
28
+ $$
29
+ A = ${matA.toTex()}
30
+ $$
31
+
32
+ La matrice $A$ est-elle symétrique ?`;
33
+ };
34
+ const getAnswer = (identifiers) => {
35
+ const { matA } = getHydrated(identifiers);
36
+ return isMatrixSymMat(matA) ? "Oui" : "Non";
37
+ };
38
+ const getHint = () => {
39
+ return `Une matrice est symétrique si elle est égale à sa transposée.
40
+ Les symétries axiales n'ont rien à voir avec cette qualification.`;
41
+ };
42
+ const getCorrection = (identifiers) => {
43
+ const { matA } = getHydrated(identifiers);
44
+ return `On a :
45
+
46
+ $$
47
+ {}^{t}A = ${matA.transposed().toTex()}
48
+ $$
49
+
50
+ ${(() => {
51
+ if (isMatrixSymMat(matA)) {
52
+ return `On a $A = {}^{t}A$. La matrice est donc symétrique.`;
53
+ }
54
+ else {
55
+ return `On a $A \\neq {}^{t}A$. La matrice n'est donc pas symétrique.`;
56
+ }
57
+ })()}
58
+
59
+ `;
60
+ };
61
+ const getPropositions = (_, { answer }) => {
62
+ const propositions = [];
63
+ ["Oui", "Non"].forEach((str) => {
64
+ if (str === answer) {
65
+ addValidProp(propositions, str, "raw");
66
+ }
67
+ else {
68
+ tryToAddWrongProp(propositions, str, "raw");
69
+ }
70
+ });
71
+ return propositions;
72
+ };
73
+ const createRandomIdentifiers = () => {
74
+ const createMatWithSymH = (nbRows, nbCols) => {
75
+ const nbRowsTop = Math.floor(nbRows / 2);
76
+ const nbRowsCenter = nbRows - 2 * nbRowsTop;
77
+ const elementsTop = MatrixConstructor.random(nbRowsTop, nbCols).elements;
78
+ const elementsCenter = nbRowsCenter > 0
79
+ ? MatrixConstructor.random(nbRowsCenter, nbCols).elements
80
+ : [];
81
+ const elements = [
82
+ ...elementsTop,
83
+ ...elementsCenter,
84
+ ...elementsTop.toReversed(),
85
+ ];
86
+ const mat = new Matrix(elements);
87
+ return mat;
88
+ };
89
+ const matA = (() => {
90
+ const typeSym = random([
91
+ "symH",
92
+ "symV",
93
+ "symMat",
94
+ "square",
95
+ ]);
96
+ switch (typeSym) {
97
+ case "symH": {
98
+ const nbRows = randint(3, 6);
99
+ const nbCols = randint(3, 6);
100
+ return createMatWithSymH(nbRows, nbCols);
101
+ }
102
+ case "symV": {
103
+ const nbRows = randint(3, 6);
104
+ const nbCols = randint(3, 6);
105
+ return createMatWithSymH(nbRows, nbCols).transposed();
106
+ }
107
+ case "symMat": {
108
+ const dim = randint(3, 6);
109
+ const matRandom = MatrixConstructor.random(dim, dim);
110
+ return matRandom
111
+ .add(matRandom.transposed())
112
+ .simplify({ towardsDistribute: true });
113
+ }
114
+ case "square": {
115
+ const dim = randint(3, 6);
116
+ const matRandom = MatrixConstructor.random(dim, dim);
117
+ return matRandom.simplify({ towardsDistribute: true });
118
+ }
119
+ }
120
+ })();
121
+ const identifiers = {
122
+ matIdsA: matA.toIdentifiers(),
123
+ };
124
+ return identifiers;
125
+ };
126
+ const getMatrixCheckIsSymmetricalQuestion = () => {
127
+ const identifiers = createRandomIdentifiers();
128
+ return getQuestionFromIdentifiers(identifiers);
129
+ };
130
+ const getQuestionFromIdentifiers = (identifiers, optsIn) => {
131
+ const question = {
132
+ answer: getAnswer(identifiers),
133
+ instruction: getInstruction(identifiers),
134
+ answerFormat: "raw",
135
+ identifiers,
136
+ hint: getHint(identifiers),
137
+ correction: getCorrection(identifiers),
138
+ options: optsIn,
139
+ };
140
+ return question;
141
+ };
142
+ export const matrixCheckIsSymmetrical = {
143
+ id: "matrixCheckIsSymmetrical",
144
+ connector: "=",
145
+ label: "Déterminer si une matrice est symétrique",
146
+ isSingleStep: true,
147
+ generator: (nb, opts) => getDistinctQuestions(() => getMatrixCheckIsSymmetricalQuestion(opts), nb),
148
+ qcmTimer: 60,
149
+ freeTimer: 60,
150
+ getPropositions,
151
+ subject: "Mathématiques",
152
+ getQuestionFromIdentifiers,
153
+ hasHintAndCorrection: true,
154
+ answerType: "QCU",
155
+ };
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../exercises/exercise.js";
2
+ import { MatrixIdentifiers } from "../../../math/matrices/matrix.js";
3
+ type Identifiers = {
4
+ matIdsA: MatrixIdentifiers;
5
+ };
6
+ export declare const matrixComputeDetOfMat2: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=matrixComputeDetOfMat2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrixComputeDetOfMat2.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/matrices/matrixComputeDetOfMat2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAQvC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AA0JF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { Matrix, MatrixConstructor, } from "../../../math/matrices/matrix.js";
4
+ import { add } from "../../../tree/nodes/operators/addNode.js";
5
+ import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
6
+ import { parseAlgebraic } from "../../../tree/parsers/latexParser.js";
7
+ import { NodeComparator } from "../../../tree/utilities/nodeComparator.js";
8
+ import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
9
+ import { alignTex } from "../../../utils/latex/alignTex.js";
10
+ const getHydrated = (identifiers) => {
11
+ const { matIdsA } = identifiers;
12
+ const [matA] = [matIdsA].map((matIds) => MatrixConstructor.fromIdentifiers(matIds));
13
+ return {
14
+ matA,
15
+ };
16
+ };
17
+ const getInstruction = (identifiers) => {
18
+ const { matA } = getHydrated(identifiers);
19
+ return `Soit :
20
+
21
+ $$
22
+ A = ${matA.toTex()}
23
+ $$
24
+
25
+ Calculer le déterminant de $A$.`;
26
+ };
27
+ const getAnswerNode = (identifiers) => {
28
+ const { matA } = getHydrated(identifiers);
29
+ return matA.determinant();
30
+ };
31
+ const getAnswer = (identifiers) => {
32
+ return getAnswerNode(identifiers)
33
+ .simplify({ towardsDistribute: true })
34
+ .toTex();
35
+ };
36
+ const getHint = () => {
37
+ const matA = new Matrix([
38
+ ["a".toTree(), "b".toTree()],
39
+ ["c".toTree(), "d".toTree()],
40
+ ]);
41
+ return `Soient $A$ une matrice à $2$ lignes et $2$ colonnes à coefficients réels.
42
+
43
+ $$
44
+ A = ${matA.toTex()}
45
+ $$
46
+
47
+ $$
48
+ \\text{det}(A) = \\begin{vmatrix} a & b \\\\ c & d \\end{vmatrix} = ${matA
49
+ .determinant()
50
+ .toTex()}
51
+ $$
52
+
53
+ `;
54
+ };
55
+ const getCorrection = (identifiers) => {
56
+ const { matA } = getHydrated(identifiers);
57
+ return `${alignTex([
58
+ ["\\text{det}(A)", "=", matA.toTex().replaceAll("pmatrix", "vmatrix")],
59
+ [
60
+ "",
61
+ "=",
62
+ matA
63
+ .determinant()
64
+ .toTex({ forceNoSimplification: true, forceTimesSign: true }),
65
+ ],
66
+ ["", "=", matA.determinant().simplify({ towardsDistribute: true }).toTex()],
67
+ ])}`;
68
+ };
69
+ const getPropositions = (n, { answer, ...identifiers }) => {
70
+ const propositions = [];
71
+ addValidProp(propositions, answer);
72
+ const { matA } = getHydrated(identifiers);
73
+ //student ad-cb -> ad+cb
74
+ {
75
+ const [[a, b], [c, d]] = matA.elements;
76
+ const detWrong = add(multiply(a, d), multiply(b, c)).simplify({
77
+ towardsDistribute: true,
78
+ });
79
+ tryToAddWrongProp(propositions, detWrong.toTex());
80
+ }
81
+ //filler
82
+ {
83
+ propWhile(propositions, n, () => {
84
+ const identifiersWrong = createRandomIdentifiers();
85
+ tryToAddWrongProp(propositions, getAnswer(identifiersWrong));
86
+ });
87
+ }
88
+ return shuffleProps(propositions, n);
89
+ };
90
+ const getKeys = () => {
91
+ return [];
92
+ };
93
+ const isAnswerValid = (ans, { answer }) => {
94
+ try {
95
+ const nodeAns = parseAlgebraic(ans);
96
+ const nodeAnswer = parseAlgebraic(answer);
97
+ return (NodeComparator.isEqualViaSub(nodeAns, nodeAnswer) ||
98
+ NodeComparator.isEqualViaFrac(nodeAns, nodeAnswer));
99
+ }
100
+ catch (e) {
101
+ handleVEAError(e);
102
+ return false;
103
+ }
104
+ };
105
+ const createRandomIdentifiers = () => {
106
+ const matA = MatrixConstructor.random(2, 2);
107
+ const identifiers = {
108
+ matIdsA: matA.toIdentifiers(),
109
+ };
110
+ return identifiers;
111
+ };
112
+ const getMatrixComputeDetOfMat2Question = () => {
113
+ const identifiers = createRandomIdentifiers();
114
+ return getQuestionFromIdentifiers(identifiers);
115
+ };
116
+ const getQuestionFromIdentifiers = (identifiers, optsIn) => {
117
+ const question = {
118
+ answer: getAnswer(identifiers),
119
+ instruction: getInstruction(identifiers),
120
+ keys: getKeys(identifiers),
121
+ answerFormat: "tex",
122
+ identifiers,
123
+ hint: getHint(identifiers),
124
+ correction: getCorrection(identifiers),
125
+ options: optsIn,
126
+ };
127
+ return question;
128
+ };
129
+ export const matrixComputeDetOfMat2 = {
130
+ id: "matrixComputeDetOfMat2",
131
+ connector: "=",
132
+ label: "Calculer le déterminant d'une matrice carrée d'ordre $2$",
133
+ isSingleStep: true,
134
+ generator: (nb, opts) => getDistinctQuestions(() => getMatrixComputeDetOfMat2Question(opts), nb),
135
+ qcmTimer: 60,
136
+ freeTimer: 60,
137
+ getPropositions,
138
+ isAnswerValid,
139
+ subject: "Mathématiques",
140
+ getQuestionFromIdentifiers,
141
+ hasHintAndCorrection: true,
142
+ };
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../exercises/exercise.js";
2
+ import { MatrixIdentifiers } from "../../../math/matrices/matrix.js";
3
+ type Identifiers = {
4
+ matIdsA: MatrixIdentifiers;
5
+ };
6
+ export declare const matrixComputeInverseOfMat2: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=matrixComputeInverseOfMat2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrixComputeInverseOfMat2.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/matrices/matrixComputeInverseOfMat2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAWvC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAwPF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAc5D,CAAC"}
@@ -0,0 +1,237 @@
1
+ import { addValidProp, propWhile, shuffleProps, tryToAddWrongProp, } from "../../../exercises/exercise.js";
2
+ import { getDistinctQuestions } from "../../../exercises/utils/getDistinctQuestions.js";
3
+ import { Matrix, MatrixConstructor, } from "../../../math/matrices/matrix.js";
4
+ import { parseMatrix } from "../../../math/matrices/parseMatrix.js";
5
+ import { opposite } from "../../../tree/nodes/functions/oppositeNode.js";
6
+ import { add } from "../../../tree/nodes/operators/addNode.js";
7
+ import { frac } from "../../../tree/nodes/operators/fractionNode.js";
8
+ import { multiply } from "../../../tree/nodes/operators/multiplyNode.js";
9
+ import { NodeComparator } from "../../../tree/utilities/nodeComparator.js";
10
+ import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
11
+ import { alignTex } from "../../../utils/latex/alignTex.js";
12
+ const getHydrated = (identifiers) => {
13
+ const { matIdsA } = identifiers;
14
+ const [matA] = [matIdsA].map((matIds) => MatrixConstructor.fromIdentifiers(matIds));
15
+ return {
16
+ matA,
17
+ };
18
+ };
19
+ const getInstruction = (identifiers) => {
20
+ const { matA } = getHydrated(identifiers);
21
+ return `Soit :
22
+
23
+ $$
24
+ A = ${matA.toTex()}
25
+ $$
26
+
27
+ Déterminer l'inverse de $A$.`;
28
+ };
29
+ const getAnswer = (identifiers) => {
30
+ const { matA } = getHydrated(identifiers);
31
+ const matInverse = matA.inverse();
32
+ return matInverse
33
+ ? matInverse.simplify({ towardsDistribute: true }).toTex()
34
+ : "A\\text{ n'est pas inversible}";
35
+ };
36
+ const getHint = () => {
37
+ const matA = new Matrix([
38
+ ["a".toTree(), "b".toTree()],
39
+ ["c".toTree(), "d".toTree()],
40
+ ]);
41
+ return `Soient $A$ une matrice à $2$ lignes et $2$ colonnes à coefficients réels.
42
+
43
+ $$
44
+ A = ${matA.toTex()}
45
+ $$
46
+
47
+ $$
48
+ \\text{det}(A) = \\begin{vmatrix} a & b \\\\ c & d \\end{vmatrix} = ${matA
49
+ .determinant()
50
+ .toTex()}
51
+ $$
52
+
53
+ Si $\\text{det}(A) \\neq 0$ alors $A$ est inversible et
54
+
55
+ $$
56
+ A^{-1} = \\frac{1}{\\text{det}(A)} \\begin{pmatrix} d & -b \\\\ -c & a \\end{pmatrix}
57
+ $$
58
+
59
+ Sinon, $A$ n'a pas d'inverse.
60
+
61
+ `;
62
+ };
63
+ const getCorrection = (identifiers) => {
64
+ const { matA } = getHydrated(identifiers);
65
+ const [[a, b], [c, d]] = matA.elements;
66
+ const nodeDet = matA.determinant();
67
+ const matAForFormula = new Matrix([
68
+ ["a".toTree(), "b".toTree()],
69
+ ["c".toTree(), "d".toTree()],
70
+ ]);
71
+ return `On commence par calculer le déterminant de $A$ :
72
+
73
+ ${alignTex([
74
+ ["\\text{det}(A)", "=", matA.toTex().replaceAll("pmatrix", "vmatrix")],
75
+ [
76
+ "",
77
+ "=",
78
+ nodeDet.toTex({ forceNoSimplification: true, forceTimesSign: true }),
79
+ ],
80
+ ["", "=", nodeDet.simplify({ towardsDistribute: true }).toTex()],
81
+ ])}
82
+
83
+ ${(() => {
84
+ if (NodeComparator.isEqualViaSub(nodeDet, (0).toTree())) {
85
+ return `Le déterminant vaut $0$ : La matrice $A$ n'est donc pas inversible.`;
86
+ }
87
+ else {
88
+ return `Le déterminant n'est pas nul : La matrice $A$ est donc inversible.
89
+
90
+ Pour une matrice carrée d'ordre $2$, il existe une formule pour calculer l'inverse.
91
+
92
+ En posant:
93
+
94
+ $$
95
+ A = ${matAForFormula.toTex()}
96
+ $$
97
+
98
+ ${alignTex([
99
+ [
100
+ "A^{-1}",
101
+ "=",
102
+ "\\frac{1}{\\text{det}(A)} \\begin{pmatrix} d & -b \\\\ -c & a \\end{pmatrix}",
103
+ ],
104
+ ])}
105
+
106
+ Ici, on a donc :
107
+
108
+ ${alignTex([
109
+ [
110
+ "A^{-1}",
111
+ "=",
112
+ `\\frac{1}{${nodeDet
113
+ .simplify({
114
+ towardsDistribute: true,
115
+ })
116
+ .toTex()}} \\begin{pmatrix} ${d.toTex()} & ${opposite(b)
117
+ .simplify()
118
+ .toTex()} \\\\ ${opposite(c)
119
+ .simplify()
120
+ .toTex()} & ${a.toTex()} \\end{pmatrix}`,
121
+ ],
122
+ ["", "=", matA.inverse().simplify({ towardsDistribute: true }).toTex()],
123
+ ])}
124
+
125
+ `;
126
+ }
127
+ })()}
128
+
129
+ `;
130
+ };
131
+ const getPropositions = (n, { answer, ...identifiers }) => {
132
+ const propositions = [];
133
+ addValidProp(propositions, answer);
134
+ //impossible
135
+ {
136
+ const texImpossible = "A\\text{ n'est pas inversible}";
137
+ tryToAddWrongProp(propositions, texImpossible);
138
+ }
139
+ const { matA } = getHydrated(identifiers);
140
+ //student A^{-1} -> tA
141
+ {
142
+ const matWrong = matA.transposed();
143
+ tryToAddWrongProp(propositions, matWrong.toTex());
144
+ }
145
+ //student ad-cb -> ad+cb
146
+ {
147
+ const [[a, b], [c, d]] = matA.elements;
148
+ const detWrong = add(multiply(a, d), multiply(b, c)).simplify({
149
+ towardsDistribute: true,
150
+ });
151
+ if (NodeComparator.isEqualViaSub(detWrong, (0).toTree())) {
152
+ //ignore
153
+ }
154
+ else {
155
+ const matWrong = new Matrix([
156
+ [d, opposite(b)],
157
+ [opposite(c), a],
158
+ ]).times(frac(1, detWrong));
159
+ tryToAddWrongProp(propositions, matWrong.simplify({ towardsDistribute: true }).toTex());
160
+ }
161
+ }
162
+ //filler
163
+ {
164
+ propWhile(propositions, n, () => {
165
+ const identifiersWrong = createRandomIdentifiers();
166
+ tryToAddWrongProp(propositions, getAnswer(identifiersWrong));
167
+ });
168
+ }
169
+ return shuffleProps(propositions, n);
170
+ };
171
+ const getKeys = () => {
172
+ return [
173
+ {
174
+ id: "custom",
175
+ label: "A\\text{ n'est pas inversible}",
176
+ labelType: "tex",
177
+ mathfieldInstructions: {
178
+ content: "A\\text{ n'est pas inversible}",
179
+ method: "write",
180
+ },
181
+ },
182
+ ];
183
+ };
184
+ const isAnswerValid = (ans, { answer }) => {
185
+ if (answer === "A\\text{ n'est pas inversible}") {
186
+ return ans === answer;
187
+ }
188
+ else {
189
+ try {
190
+ const matAns = parseMatrix(ans);
191
+ const matAnswer = parseMatrix(answer);
192
+ return matAns.equals(matAnswer);
193
+ }
194
+ catch (e) {
195
+ handleVEAError(e);
196
+ return false;
197
+ }
198
+ }
199
+ };
200
+ const createRandomIdentifiers = () => {
201
+ const matA = MatrixConstructor.random(2, 2);
202
+ const identifiers = {
203
+ matIdsA: matA.toIdentifiers(),
204
+ };
205
+ return identifiers;
206
+ };
207
+ const getMatrixComputeInverseOfMat2Question = () => {
208
+ const identifiers = createRandomIdentifiers();
209
+ return getQuestionFromIdentifiers(identifiers);
210
+ };
211
+ const getQuestionFromIdentifiers = (identifiers, optsIn) => {
212
+ const question = {
213
+ answer: getAnswer(identifiers),
214
+ instruction: getInstruction(identifiers),
215
+ keys: getKeys(identifiers),
216
+ answerFormat: "tex",
217
+ identifiers,
218
+ hint: getHint(identifiers),
219
+ correction: getCorrection(identifiers),
220
+ options: optsIn,
221
+ };
222
+ return question;
223
+ };
224
+ export const matrixComputeInverseOfMat2 = {
225
+ id: "matrixComputeInverseOfMat2",
226
+ connector: "=",
227
+ label: "Calculer l'inverse d'une matrice carrée d'ordre $2$",
228
+ isSingleStep: true,
229
+ generator: (nb, opts) => getDistinctQuestions(() => getMatrixComputeInverseOfMat2Question(opts), nb),
230
+ qcmTimer: 60,
231
+ freeTimer: 60,
232
+ getPropositions,
233
+ isAnswerValid,
234
+ subject: "Mathématiques",
235
+ getQuestionFromIdentifiers,
236
+ hasHintAndCorrection: true,
237
+ };
@@ -0,0 +1,15 @@
1
+ import { Exercise } from "../../../exercises/exercise.js";
2
+ import { MatrixIdentifiers } from "../../../math/matrices/matrix.js";
3
+ import { NodeIdentifiers } from "../../../tree/nodes/nodeConstructor.js";
4
+ type Identifiers = {
5
+ matIdsA: MatrixIdentifiers;
6
+ matIdsB: MatrixIdentifiers;
7
+ nodeIdsKA: NodeIdentifiers;
8
+ nodeIdsKB: NodeIdentifiers;
9
+ };
10
+ type Options = {
11
+ typeLinComb: string;
12
+ };
13
+ export declare const matrixComputeLinearCombination: Exercise<Identifiers, Options>;
14
+ export {};
15
+ //# sourceMappingURL=matrixComputeLinearCombination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrixComputeLinearCombination.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/matrices/matrixComputeLinearCombination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAmBT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAEL,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAU7C,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AA8PF,KAAK,OAAO,GAAG;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAgBF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAkBzE,CAAC"}