math-exercises 2.2.59 → 2.2.61

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 (94) hide show
  1. package/lib/exercises/exercise.d.ts +6 -0
  2. package/lib/exercises/exercise.d.ts.map +1 -1
  3. package/lib/exercises/math/calcul/fractions/fractionAndIntegerDivision.d.ts +1 -1
  4. package/lib/exercises/math/calcul/fractions/fractionAndIntegerDivision.d.ts.map +1 -1
  5. package/lib/exercises/math/calcul/fractions/fractionAndIntegerDivision.js +75 -37
  6. package/lib/exercises/math/calcul/fractions/fractionAndIntegerProduct.d.ts +6 -2
  7. package/lib/exercises/math/calcul/fractions/fractionAndIntegerProduct.d.ts.map +1 -1
  8. package/lib/exercises/math/calcul/fractions/fractionAndIntegerProduct.js +88 -40
  9. package/lib/exercises/math/calcul/fractions/fractionAndIntegerSum.d.ts +4 -1
  10. package/lib/exercises/math/calcul/fractions/fractionAndIntegerSum.d.ts.map +1 -1
  11. package/lib/exercises/math/calcul/fractions/fractionAndIntegerSum.js +23 -5
  12. package/lib/exercises/math/calcul/fractions/fractionsDivision.d.ts.map +1 -1
  13. package/lib/exercises/math/calcul/fractions/fractionsDivision.js +24 -6
  14. package/lib/exercises/math/calcul/fractions/fractionsProduct.d.ts +4 -1
  15. package/lib/exercises/math/calcul/fractions/fractionsProduct.d.ts.map +1 -1
  16. package/lib/exercises/math/calcul/fractions/fractionsProduct.js +24 -6
  17. package/lib/exercises/math/calcul/fractions/fractionsSum.d.ts +2 -2
  18. package/lib/exercises/math/calcul/fractions/fractionsSum.d.ts.map +1 -1
  19. package/lib/exercises/math/calcul/fractions/fractionsSum.js +20 -11
  20. package/lib/exercises/math/calcul/fractions/fractionsSumsMultiplesDenominators.js +1 -1
  21. package/lib/exercises/math/calcul/fractions/fractionsSumsPrimeDenominators.js +1 -1
  22. package/lib/exercises/math/calcul/fractions/fractionsSumsSameDenominators.d.ts.map +1 -1
  23. package/lib/exercises/math/calcul/fractions/fractionsSumsSameDenominators.js +2 -2
  24. package/lib/exercises/math/calcul/proportionality/findCoeffInProportionalTableNonIntegers.d.ts +7 -2
  25. package/lib/exercises/math/calcul/proportionality/findCoeffInProportionalTableNonIntegers.d.ts.map +1 -1
  26. package/lib/exercises/math/calcul/proportionality/findCoeffInProportionalTableNonIntegers.js +52 -44
  27. package/lib/exercises/math/calcul/proportionality/isTableProportionalNonInteger.d.ts +7 -2
  28. package/lib/exercises/math/calcul/proportionality/isTableProportionalNonInteger.d.ts.map +1 -1
  29. package/lib/exercises/math/calcul/proportionality/isTableProportionalNonInteger.js +55 -40
  30. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.d.ts.map +1 -1
  31. package/lib/exercises/math/calculLitteral/systems/basicSystemResolution.js +5 -2
  32. package/lib/exercises/math/functions/affines/signFunction.js +1 -1
  33. package/lib/exercises/math/functions/trinoms/factorizedFormFromRoots.d.ts.map +1 -1
  34. package/lib/exercises/math/functions/trinoms/factorizedFormFromRoots.js +1 -0
  35. package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts.map +1 -1
  36. package/lib/exercises/math/geometry/thales/thalesCalcul.js +6 -0
  37. package/lib/exercises/math/powers/powersDivision.d.ts.map +1 -1
  38. package/lib/exercises/math/powers/powersDivision.js +19 -11
  39. package/lib/exercises/math/powers/powersPower.d.ts.map +1 -1
  40. package/lib/exercises/math/powers/powersPower.js +19 -11
  41. package/lib/exercises/math/powers/powersProduct.d.ts +4 -1
  42. package/lib/exercises/math/powers/powersProduct.d.ts.map +1 -1
  43. package/lib/exercises/math/powers/powersProduct.js +84 -35
  44. package/lib/exercises/math/probaStat/binomial/binomialInequation.d.ts.map +1 -1
  45. package/lib/exercises/math/probaStat/binomial/binomialInequation.js +6 -0
  46. package/lib/exercises/math/probaStat/probaFromTableNoContext.d.ts.map +1 -1
  47. package/lib/exercises/math/probaStat/probaFromTableNoContext.js +5 -1
  48. package/lib/exercises/math/probaStat/probaFromTableWithContext.d.ts.map +1 -1
  49. package/lib/exercises/math/probaStat/probaFromTableWithContext.js +19 -3
  50. package/lib/exercises/math/spaceGeometry/lineAndPlaneRelativePosition.d.ts +1 -0
  51. package/lib/exercises/math/spaceGeometry/lineAndPlaneRelativePosition.d.ts.map +1 -0
  52. package/lib/exercises/math/spaceGeometry/lineAndPlaneRelativePosition.js +84 -0
  53. package/lib/exercises/math/squareRoots/index.d.ts +2 -0
  54. package/lib/exercises/math/squareRoots/index.d.ts.map +1 -1
  55. package/lib/exercises/math/squareRoots/index.js +2 -0
  56. package/lib/exercises/math/squareRoots/squareRootsFractions.d.ts +10 -0
  57. package/lib/exercises/math/squareRoots/squareRootsFractions.d.ts.map +1 -0
  58. package/lib/exercises/math/squareRoots/squareRootsFractions.js +93 -0
  59. package/lib/exercises/math/squareRoots/squareRootsToSquare.d.ts +10 -0
  60. package/lib/exercises/math/squareRoots/squareRootsToSquare.d.ts.map +1 -0
  61. package/lib/exercises/math/squareRoots/squareRootsToSquare.js +116 -0
  62. package/lib/exercises/math/trigonometry/mainAngleMeasure.js +13 -13
  63. package/lib/index.d.ts +41 -11
  64. package/lib/index.d.ts.map +1 -1
  65. package/lib/math/geometry/line.d.ts.map +1 -1
  66. package/lib/math/geometry/line.js +3 -1
  67. package/lib/math/geometry/vector.d.ts.map +1 -1
  68. package/lib/math/geometry/vector.js +1 -7
  69. package/lib/math/numbers/rationals/rational.d.ts +1 -1
  70. package/lib/math/numbers/rationals/rational.d.ts.map +1 -1
  71. package/lib/math/numbers/rationals/rational.js +18 -6
  72. package/lib/math/numbers/reals/extendedRingElement.d.ts +1 -1
  73. package/lib/playground.d.ts.map +1 -1
  74. package/lib/playground.js +6 -1
  75. package/lib/tree/nodes/functions/absNode.d.ts +1 -1
  76. package/lib/tree/nodes/functions/absNode.d.ts.map +1 -1
  77. package/lib/tree/nodes/functions/absNode.js +9 -1
  78. package/lib/tree/nodes/functions/sqrtNode.d.ts.map +1 -1
  79. package/lib/tree/nodes/functions/sqrtNode.js +9 -0
  80. package/lib/tree/nodes/operators/operatorNode.d.ts +2 -1
  81. package/lib/tree/nodes/operators/operatorNode.d.ts.map +1 -1
  82. package/lib/tree/nodes/operators/operatorNode.js +1 -0
  83. package/lib/tree/nodes/operators/powerNode.d.ts +2 -0
  84. package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
  85. package/lib/tree/nodes/operators/powerNode.js +21 -83
  86. package/lib/tree/parsers/powerParser.d.ts +2 -0
  87. package/lib/tree/parsers/powerParser.d.ts.map +1 -0
  88. package/lib/tree/parsers/powerParser.js +26 -0
  89. package/lib/tree/parsers/rationalParser.d.ts +1 -1
  90. package/lib/tree/parsers/rationalParser.d.ts.map +1 -1
  91. package/lib/tree/parsers/rationalParser.js +14 -9
  92. package/lib/tree/parsers/spacePointParser.d.ts.map +1 -1
  93. package/lib/tree/parsers/spaceVectorParser.d.ts.map +1 -1
  94. package/package.json +1 -1
@@ -2,11 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fractionsProduct = void 0;
4
4
  const exercise_1 = require("../../../../exercises/exercise");
5
+ const allowNonIrreductibleFractions_1 = require("../../../../exercises/options/allowNonIrreductibleFractions");
5
6
  const getDistinctQuestions_1 = require("../../../../exercises/utils/getDistinctQuestions");
6
7
  const rational_1 = require("../../../../math/numbers/rationals/rational");
7
8
  const multiplyNode_1 = require("../../../../tree/nodes/operators/multiplyNode");
9
+ const rationalParser_1 = require("../../../../tree/parsers/rationalParser");
8
10
  const shuffle_1 = require("../../../../utils/alea/shuffle");
9
- const getFractionsProduct = () => {
11
+ const getFractionsProduct = (opts) => {
10
12
  const rational = rational_1.RationalConstructor.randomIrreductible();
11
13
  const rational2 = rational_1.RationalConstructor.randomIrreductible();
12
14
  const statementTree = new multiplyNode_1.MultiplyNode(rational.toTree(), rational2.toTree());
@@ -14,7 +16,13 @@ const getFractionsProduct = () => {
14
16
  const answer = answerTree.toTex();
15
17
  const beforeSimplification = new rational_1.Rational(rational.num * rational2.num, rational.denum * rational2.denum);
16
18
  const question = {
17
- instruction: `Calculer et donner le résultat sous la forme d'une fraction irréductible : $${statementTree.toTex()}$`,
19
+ instruction: `Calculer ${opts?.allowNonIrreductible
20
+ ? ""
21
+ : "et donner le résultat sous la forme la plus simplifiée possible"} :
22
+
23
+ $$
24
+ ${statementTree.toTex()}
25
+ $$`,
18
26
  startStatement: statementTree.toTex(),
19
27
  answer,
20
28
  keys: [],
@@ -36,7 +44,7 @@ ${!beforeSimplification.isIrreductible()
36
44
  $$
37
45
  ${beforeSimplification.toTree().toTex()} = ${answer}
38
46
  $$`
39
- : "Cette fraction est déjà sous forme irréductible."}
47
+ : "Cette fraction est déjà simplifiée."}
40
48
 
41
49
  Ainsi, le résultat attendu est $${answer}$.
42
50
  `,
@@ -54,15 +62,24 @@ const getPropositions = (n, { answer, rationalNum, rationalDenum }) => {
54
62
  }
55
63
  return (0, shuffle_1.shuffle)(propositions);
56
64
  };
57
- const isAnswerValid = (ans, { rationalDenum, rationalNum }) => {
65
+ const isAnswerValid = (ans, { rationalDenum, rationalNum }, opts) => {
58
66
  const rational = new rational_1.Rational(rationalNum[0], rationalNum[1]);
59
67
  const rational2 = new rational_1.Rational(rationalDenum[0], rationalDenum[1]);
60
68
  const answerTree = rational
61
69
  .multiply(rational2)
62
70
  .toTree({ allowFractionToDecimal: true });
63
71
  const texs = answerTree.toAllValidTexs();
64
- return texs.includes(ans);
72
+ if (opts?.allowNonIrreductible) {
73
+ const parsed = (0, rationalParser_1.rationalParser)(ans);
74
+ if (!parsed)
75
+ return false;
76
+ return texs.includes(parsed.simplify().toTex());
77
+ }
78
+ else {
79
+ return texs.includes(ans);
80
+ }
65
81
  };
82
+ const options = [allowNonIrreductibleFractions_1.allowNonIrreductibleOption];
66
83
  exports.fractionsProduct = {
67
84
  id: "fractionsProduct",
68
85
  connector: "=",
@@ -70,11 +87,12 @@ exports.fractionsProduct = {
70
87
  levels: ["4ème", "3ème", "2nde", "CAP", "2ndPro", "1rePro"],
71
88
  sections: ["Fractions"],
72
89
  isSingleStep: false,
73
- generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionsProduct, nb),
90
+ generator: (nb, opts) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getFractionsProduct(opts), nb),
74
91
  qcmTimer: 60,
75
92
  freeTimer: 60,
76
93
  getPropositions,
77
94
  isAnswerValid,
78
95
  subject: "Mathématiques",
79
96
  hasHintAndCorrection: true,
97
+ options,
80
98
  };
@@ -1,7 +1,7 @@
1
1
  import { Exercise } from "../../../../exercises/exercise";
2
2
  type Identifiers = {
3
- rational: [number, number];
4
- rational2: [number, number];
3
+ rational: number[];
4
+ rational2: number[];
5
5
  };
6
6
  type Options = {
7
7
  allowNonIrreductible?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fractionsSum.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/fractions/fractionsSum.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,0BAA0B,CAAC;AAWlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAyFF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAevD,CAAC"}
1
+ {"version":3,"file":"fractionsSum.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/fractions/fractionsSum.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAYT,MAAM,0BAA0B,CAAC;AAWlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAyGF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAgBvD,CAAC"}
@@ -7,28 +7,36 @@ const rational_1 = require("../../../../math/numbers/rationals/rational");
7
7
  const addNode_1 = require("../../../../tree/nodes/operators/addNode");
8
8
  const rationalParser_1 = require("../../../../tree/parsers/rationalParser");
9
9
  const shuffle_1 = require("../../../../utils/alea/shuffle");
10
+ const getInstruction = (identifiers, opts) => {
11
+ const { rational, rational2 } = identifiers;
12
+ const rationalObj = new rational_1.Rational(rational[0], rational[1]);
13
+ const rationalObj2 = new rational_1.Rational(rational2[0], rational2[1]);
14
+ const statementTree = new addNode_1.AddNode(rationalObj.toTree(), rationalObj2.toTree());
15
+ return `Calculer ${opts?.allowNonIrreductible
16
+ ? ""
17
+ : "et donner le résultat sous la forme la plus simplifiée possible"} :
18
+
19
+ $$
20
+ ${statementTree.toTex()}
21
+ $$`;
22
+ };
10
23
  const getFractionsSum = (opts) => {
11
24
  const rational = rational_1.RationalConstructor.randomIrreductible();
12
25
  const rational2 = rational_1.RationalConstructor.randomIrreductible();
13
26
  const statementTree = new addNode_1.AddNode(rational.toTree(), rational2.toTree());
14
27
  const answerTree = rational.add(rational2).toTree();
15
28
  const answer = answerTree.toTex();
29
+ const identifiers = {
30
+ rational: [rational.num, rational.denum],
31
+ rational2: [rational2.num, rational2.denum],
32
+ };
16
33
  const question = {
17
- instruction: `Calculer ${opts?.allowNonIrreductible
18
- ? ""
19
- : "et donner le résultat sous la forme d'une fraction irréductible"} :
20
-
21
- $$
22
- ${statementTree.toTex()}
23
- $$`,
34
+ instruction: getInstruction(identifiers, opts),
24
35
  startStatement: statementTree.toTex(),
25
36
  answer,
26
37
  keys: [],
27
38
  answerFormat: "tex",
28
- identifiers: {
29
- rational: [rational.num, rational.denum],
30
- rational2: [rational2.num, rational2.denum],
31
- },
39
+ identifiers,
32
40
  };
33
41
  return question;
34
42
  };
@@ -86,4 +94,5 @@ exports.fractionsSum = {
86
94
  isAnswerValid,
87
95
  subject: "Mathématiques",
88
96
  options,
97
+ getInstruction,
89
98
  };
@@ -23,7 +23,7 @@ const getFractionsSumsMultiplesDenominatorsQuestion = (opts) => {
23
23
  answer,
24
24
  instruction: `Calculer ${opts?.allowNonIrreductible
25
25
  ? ""
26
- : "et donner le résultat sous la forme d'une fraction irréductible"} :
26
+ : "et donner le résultat sous la forme la plus simplifiée possible"} :
27
27
 
28
28
  $$
29
29
  ${statement}
@@ -24,7 +24,7 @@ const getFractionsSumsPrimeDenominatorsQuestion = (opts) => {
24
24
  answer,
25
25
  instruction: `Calculer ${opts?.allowNonIrreductible
26
26
  ? ""
27
- : "et donner le résultat sous la forme d'une fraction irréductible"} :
27
+ : "et donner le résultat sous la forme la plus simplifiée possible"} :
28
28
 
29
29
  $$
30
30
  ${statement}
@@ -1 +1 @@
1
- {"version":3,"file":"fractionsSumsSameDenominators.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/fractions/fractionsSumsSameDenominators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,0BAA0B,CAAC;AAiBlC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAgIF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAmB/D,CAAC"}
1
+ {"version":3,"file":"fractionsSumsSameDenominators.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/fractions/fractionsSumsSameDenominators.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,0BAA0B,CAAC;AAelC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAgIF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAmB/D,CAAC"}
@@ -25,7 +25,7 @@ const getFractionsSumsSameDenominatorsQuestion = (opts) => {
25
25
  answer,
26
26
  instruction: `Calculer ${opts?.allowNonIrreductible
27
27
  ? ""
28
- : "et donner le résultat sous la forme d'une fraction irréductible"} :
28
+ : "et donner le résultat sous la forme la plus simplifiée possible"} :
29
29
 
30
30
  $$
31
31
  ${statement}
@@ -44,7 +44,7 @@ ${(0, alignTex_1.alignTex)([
44
44
  ])}
45
45
 
46
46
  ${answerRatio.isSimplified && answerRatio.denum !== 1
47
- ? "Cette fraction est bien irréductible."
47
+ ? "Cette fraction est bien simplifiée."
48
48
  : `Puis, on simplifie la fraction :
49
49
 
50
50
  ${(0, alignTex_1.alignTex)([
@@ -3,8 +3,13 @@ type Identifiers = {
3
3
  coeffIds: any;
4
4
  xValues: any[];
5
5
  yValues: any[];
6
- type: number;
6
+ coeffType: string;
7
+ valuesType: string;
7
8
  };
8
- export declare const findCoeffInProportionalTableNonIntegers: Exercise<Identifiers>;
9
+ type Options = {
10
+ coeffNumberTypes: string[];
11
+ valuesNumberTypes: string[];
12
+ };
13
+ export declare const findCoeffInProportionalTableNonIntegers: Exercise<Identifiers, Options>;
9
14
  export {};
10
15
  //# sourceMappingURL=findCoeffInProportionalTableNonIntegers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findCoeffInProportionalTableNonIntegers.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/proportionality/findCoeffInProportionalTableNonIntegers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,0BAA0B,CAAC;AAiBlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAkIF,eAAO,MAAM,uCAAuC,EAAE,QAAQ,CAAC,WAAW,CAoBzE,CAAC"}
1
+ {"version":3,"file":"findCoeffInProportionalTableNonIntegers.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/proportionality/findCoeffInProportionalTableNonIntegers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAiBT,MAAM,0BAA0B,CAAC;AAiBlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAqHF,KAAK,OAAO,GAAG;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAoBF,eAAO,MAAM,uCAAuC,EAAE,QAAQ,CAC5D,WAAW,EACX,OAAO,CAsBR,CAAC"}
@@ -9,22 +9,22 @@ const randint_1 = require("../../../../math/utils/random/randint");
9
9
  const nodeConstructor_1 = require("../../../../tree/nodes/nodeConstructor");
10
10
  const multiplyNode_1 = require("../../../../tree/nodes/operators/multiplyNode");
11
11
  const latexParser_1 = require("../../../../tree/parsers/latexParser");
12
- const coinFlip_1 = require("../../../../utils/alea/coinFlip");
12
+ const random_1 = require("../../../../utils/alea/random");
13
13
  const doWhile_1 = require("../../../../utils/doWhile");
14
14
  const dollarize_1 = require("../../../../utils/latex/dollarize");
15
15
  const mdTable_1 = require("../../../../utils/markdown/mdTable");
16
- const getPropositions = (n, { answer, type }) => {
16
+ const getPropositions = (n, { answer, coeffType }) => {
17
17
  const propositions = [];
18
18
  (0, exercise_1.addValidProp)(propositions, answer);
19
19
  while (propositions.length < n) {
20
- switch (type) {
21
- case 1:
20
+ switch (coeffType) {
21
+ case "Entier":
22
22
  (0, exercise_1.tryToAddWrongProp)(propositions, (0, randint_1.randint)(1, 10) + "");
23
23
  break;
24
- case 2:
24
+ case "Décimal":
25
25
  (0, exercise_1.tryToAddWrongProp)(propositions, (0, randfloat_1.randfloat)(1, 10, 1).frenchify());
26
26
  break;
27
- case 3:
27
+ case "Fraction":
28
28
  (0, exercise_1.tryToAddWrongProp)(propositions, rational_1.RationalConstructor.randomIrreductible().toTree().toTex());
29
29
  break;
30
30
  }
@@ -56,51 +56,40 @@ const isAnswerValid = (ans, { answer }) => {
56
56
  return false;
57
57
  return parsed.simplify().toTex() === answer;
58
58
  };
59
- const getFindCoeffInProportionalTableNonIntegersQuestion = () => {
60
- const type = (0, randint_1.randint)(1, 4);
59
+ const getFindCoeffInProportionalTableNonIntegersQuestion = (opts) => {
61
60
  let coeff;
62
61
  let xValues = [];
63
- switch (type) {
64
- case 1:
65
- //coeff entier, valeurs décimal/frac
66
- coeff = (0, randint_1.randint)(2, 10).toTree();
67
- for (let i = 0; i < 3; i++) {
68
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
69
- ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
70
- : rational_1.RationalConstructor.randomIrreductible().toTree(), (y) => xValues.some((x) => x.equals(y)));
71
- xValues.push(x);
72
- }
73
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
74
- break;
75
- case 2:
76
- //coeff décimal, valeurs entieres/décimal
77
- coeff = (0, randfloat_1.randfloat)(1.1, 10, 1).toTree();
78
- for (let i = 0; i < 3; i++) {
79
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
80
- ? (0, randint_1.randint)(1, 10).toTree()
81
- : (0, randfloat_1.randfloat)(1.1, 10, 1).toTree(), (y) => xValues.some((x) => x.equals(y)));
82
- xValues.push(x);
83
- }
84
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
85
- break;
86
- case 3:
87
- //coeff frac, valeurs frac / entieres
88
- default:
89
- coeff = rational_1.RationalConstructor.randomPureRational().toTree();
90
- for (let i = 0; i < 3; i++) {
91
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
92
- ? (0, randint_1.randint)(1, 10).toTree()
93
- : rational_1.RationalConstructor.randomIrreductible().toTree(), (y) => xValues.some((x) => x.equals(y)));
94
- xValues.push(x);
95
- }
96
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
62
+ const coeffType = (0, random_1.random)(opts?.coeffNumberTypes ?? ["Entier", "Décimal", "Fraction"]);
63
+ if (!coeffType)
64
+ throw Error("No Coeff Type");
65
+ const valuesType = (0, random_1.random)(opts?.valuesNumberTypes ?? ["Entières", "Décimales", "Fractions"]);
66
+ if (!valuesType)
67
+ throw Error("No value type");
68
+ coeff =
69
+ coeffType === "Entier"
70
+ ? (0, randint_1.randint)(2, 10).toTree()
71
+ : coeffType === "Décimal"
72
+ ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
73
+ : rational_1.RationalConstructor.randomPureRational(10).toTree();
74
+ const getX = () => {
75
+ return valuesType === "Entières"
76
+ ? (0, randint_1.randint)(1, 10).toTree()
77
+ : valuesType === "Décimales"
78
+ ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
79
+ : rational_1.RationalConstructor.randomIrreductible().toTree();
80
+ };
81
+ for (let i = 0; i < 3; i++) {
82
+ let x = (0, doWhile_1.doWhile)(getX, (y) => xValues.some((x) => x.equals(y)));
83
+ xValues.push(x);
97
84
  }
85
+ xValues.sort((a, b) => a.evaluate() - b.evaluate());
98
86
  const yValues = xValues.map((x) => (0, multiplyNode_1.multiply)(x, coeff).simplify());
99
87
  const identifiers = {
100
88
  coeffIds: coeff.toIdentifiers(),
101
89
  xValues: xValues.map((e) => e.toIdentifiers()),
102
90
  yValues: yValues.map((e) => e.toIdentifiers()),
103
- type,
91
+ coeffType,
92
+ valuesType,
104
93
  };
105
94
  const question = {
106
95
  answer: getAnswer(identifiers),
@@ -116,12 +105,30 @@ const getFindCoeffInProportionalTableNonIntegersQuestion = () => {
116
105
  };
117
106
  return question;
118
107
  };
108
+ const options = [
109
+ {
110
+ id: "coeffNumberTypes",
111
+ label: "Type du coefficient",
112
+ type: exercise_1.GeneratorOptionType.multiselect,
113
+ target: exercise_1.GeneratorOptionTarget.generation,
114
+ values: ["Entier", "Décimal", "Fraction"],
115
+ defaultValue: ["Entier", "Décimal", "Fraction"],
116
+ },
117
+ {
118
+ id: "valuesNumberTypes",
119
+ label: "Type des valeurs",
120
+ type: exercise_1.GeneratorOptionType.multiselect,
121
+ target: exercise_1.GeneratorOptionTarget.generation,
122
+ values: ["Entières", "Décimales", "Fractions"],
123
+ defaultValue: ["Entier", "Décimal", "Fraction"],
124
+ },
125
+ ];
119
126
  exports.findCoeffInProportionalTableNonIntegers = {
120
127
  id: "findCoeffInProportionalTableNonIntegers",
121
128
  connector: "=",
122
129
  label: "Calculer un coefficient de proportionnalité à partir d'un tableau (valeurs non entières)",
123
130
  isSingleStep: true,
124
- generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFindCoeffInProportionalTableNonIntegersQuestion, nb),
131
+ generator: (nb, opts) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getFindCoeffInProportionalTableNonIntegersQuestion(opts), nb),
125
132
  qcmTimer: 60,
126
133
  freeTimer: 60,
127
134
  getPropositions,
@@ -131,4 +138,5 @@ exports.findCoeffInProportionalTableNonIntegers = {
131
138
  // getCorrection,
132
139
  getAnswer,
133
140
  answerType: "QCU",
141
+ options,
134
142
  };
@@ -4,8 +4,13 @@ type Identifiers = {
4
4
  xValues: any[];
5
5
  yValues: any[];
6
6
  isProportionnal: boolean;
7
- type: number;
7
+ coeffType: string;
8
+ valuesType: string;
8
9
  };
9
- export declare const isTableProportionalNonInteger: Exercise<Identifiers>;
10
+ type Options = {
11
+ coeffNumberTypes: string[];
12
+ valuesNumberTypes: string[];
13
+ };
14
+ export declare const isTableProportionalNonInteger: Exercise<Identifiers, Options>;
10
15
  export {};
11
16
  //# sourceMappingURL=isTableProportionalNonInteger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isTableProportionalNonInteger.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/proportionality/isTableProportionalNonInteger.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA0HF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAgB/D,CAAC"}
1
+ {"version":3,"file":"isTableProportionalNonInteger.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calcul/proportionality/isTableProportionalNonInteger.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAkBT,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAqCF,KAAK,OAAO,GAAG;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AA8FF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAoBxE,CAAC"}
@@ -43,59 +43,50 @@ const getKeys = (identifiers) => {
43
43
  const isAnswerValid = (ans, { answer }) => {
44
44
  throw Error("VEA not implemented");
45
45
  };
46
- const getIsTableProportionalNonIntegerQuestion = () => {
47
- const type = (0, randint_1.randint)(1, 4);
46
+ // ["Entier", "Décimal", "Fraction"],
47
+ // ["Entières", "Décimales", "Fractions"],
48
+ const getIsTableProportionalNonIntegerQuestion = (opts) => {
49
+ const coeffType = (0, random_1.random)(opts?.coeffNumberTypes ?? ["Entier", "Décimal", "Fraction"]);
50
+ if (!coeffType)
51
+ throw Error("No Coeff Type");
52
+ const valuesType = (0, random_1.random)(opts?.valuesNumberTypes ?? ["Entières", "Décimales", "Fractions"]);
53
+ if (!valuesType)
54
+ throw Error("No value type");
48
55
  let coeff;
49
56
  let xValues = [];
50
57
  const isProportionnal = (0, coinFlip_1.coinFlip)();
51
- switch (type) {
52
- case 1:
53
- //coeff entier, valeurs décimal/frac
54
- coeff = (0, randint_1.randint)(2, 10).toTree();
55
- for (let i = 0; i < 3; i++) {
56
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
57
- ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
58
- : rational_1.RationalConstructor.randomIrreductible().toTree(), (y) => xValues.some((x) => x.equals(y)));
59
- xValues.push(x);
60
- }
61
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
62
- break;
63
- case 2:
64
- //coeff décimal, valeurs entieres/décimal
65
- coeff = (0, randfloat_1.randfloat)(1.1, 10, 1).toTree();
66
- for (let i = 0; i < 3; i++) {
67
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
68
- ? (0, randint_1.randint)(1, 10).toTree()
69
- : (0, randfloat_1.randfloat)(1.1, 10, 1).toTree(), (y) => xValues.some((x) => x.equals(y)));
70
- xValues.push(x);
71
- }
72
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
73
- break;
74
- case 3:
75
- //coeff frac, valeurs frac / entieres
76
- default:
77
- coeff = rational_1.RationalConstructor.randomPureRational().toTree();
78
- for (let i = 0; i < 3; i++) {
79
- let x = (0, doWhile_1.doWhile)(() => (0, coinFlip_1.coinFlip)()
80
- ? (0, randint_1.randint)(1, 10).toTree()
81
- : rational_1.RationalConstructor.randomIrreductible().toTree(), (y) => xValues.some((x) => x.equals(y)));
82
- xValues.push(x);
83
- }
84
- xValues.sort((a, b) => a.evaluate() - b.evaluate());
58
+ coeff =
59
+ coeffType === "Entier"
60
+ ? (0, randint_1.randint)(2, 10).toTree()
61
+ : coeffType === "Décimal"
62
+ ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
63
+ : rational_1.RationalConstructor.randomPureRational(10).toTree();
64
+ const getX = () => {
65
+ return valuesType === "Entières"
66
+ ? (0, randint_1.randint)(1, 10).toTree()
67
+ : valuesType === "Décimales"
68
+ ? (0, randfloat_1.randfloat)(1.1, 10, 1).toTree()
69
+ : rational_1.RationalConstructor.randomIrreductible().toTree();
70
+ };
71
+ for (let i = 0; i < 3; i++) {
72
+ let x = (0, doWhile_1.doWhile)(getX, (y) => xValues.some((x) => x.equals(y)));
73
+ xValues.push(x);
85
74
  }
75
+ xValues.sort((a, b) => a.evaluate() - b.evaluate());
86
76
  const yValues = isProportionnal
87
77
  ? xValues.map((x) => (0, multiplyNode_1.multiply)(x, coeff).simplify())
88
- : xValues.map((x) => (0, multiplyNode_1.multiply)((0, addNode_1.add)(x, (0, random_1.random)([-1, 1])), coeff).simplify());
78
+ : xValues.map((x) => (0, multiplyNode_1.multiply)((0, addNode_1.add)(x, 1), coeff).simplify());
89
79
  const identifiers = {
90
80
  coeffIds: coeff.toIdentifiers(),
91
81
  xValues: xValues.map((e) => e.toIdentifiers()),
92
82
  yValues: yValues.map((e) => e.toIdentifiers()),
93
83
  isProportionnal: isProportionnal,
94
- type,
84
+ valuesType,
85
+ coeffType,
95
86
  };
96
87
  const question = {
97
88
  answer: getAnswer(identifiers),
98
- instruction: getInstruction(identifiers),
89
+ instruction: getInstruction(identifiers, opts),
99
90
  keys: getKeys(identifiers),
100
91
  answerFormat: "raw",
101
92
  identifiers,
@@ -107,12 +98,35 @@ const getIsTableProportionalNonIntegerQuestion = () => {
107
98
  };
108
99
  return question;
109
100
  };
101
+ // const validateOptions : ValidateOptions<Options> = (opts) => {
102
+ // if(!opts.coeffNumberTypes)
103
+ // return {
104
+ // valid: !!opts?.coeffNumberTypes,
105
+ // message: "Veuillez choisir un type de consigne.",
106
+ // };
107
+ // },
108
+ const options = [
109
+ {
110
+ id: "coeffNumberTypes",
111
+ label: "Type du coefficient",
112
+ type: exercise_1.GeneratorOptionType.multiselect,
113
+ target: exercise_1.GeneratorOptionTarget.generation,
114
+ values: ["Entier", "Décimal", "Fraction"],
115
+ },
116
+ {
117
+ id: "valuesNumberTypes",
118
+ label: "Type des valeurs",
119
+ type: exercise_1.GeneratorOptionType.multiselect,
120
+ target: exercise_1.GeneratorOptionTarget.generation,
121
+ values: ["Entières", "Décimales", "Fractions"],
122
+ },
123
+ ];
110
124
  exports.isTableProportionalNonInteger = {
111
125
  id: "isTableProportionalNonInteger",
112
126
  connector: "=",
113
127
  label: "Reconnaître un tableau de proportionnalité (valeurs non entières)",
114
128
  isSingleStep: true,
115
- generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getIsTableProportionalNonIntegerQuestion, nb),
129
+ generator: (nb, opts) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getIsTableProportionalNonIntegerQuestion(opts), nb),
116
130
  qcmTimer: 60,
117
131
  freeTimer: 60,
118
132
  getPropositions,
@@ -122,4 +136,5 @@ exports.isTableProportionalNonInteger = {
122
136
  // getCorrection,
123
137
  getAnswer,
124
138
  answerType: "QCU",
139
+ options,
125
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"basicSystemResolution.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/systems/basicSystemResolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAMlC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AA0DF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,WAAW,CAcvD,CAAC"}
1
+ {"version":3,"file":"basicSystemResolution.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/systems/basicSystemResolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAMlC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AA8DF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,WAAW,CAcvD,CAAC"}
@@ -14,16 +14,19 @@ const getBasicSystemResolutionQuestion = () => {
14
14
  const isXAsked = (0, coinFlip_1.coinFlip)();
15
15
  const variable = isXAsked ? "x" : "y";
16
16
  const answer = isXAsked ? x.toTex() : y.toTex();
17
+ const identifiers = { coeffs: sys.coeffs, isXAsked };
17
18
  const question = {
18
19
  answer,
19
20
  instruction: `Soit le système d'équations suivant :
20
21
 
21
- $${sys.toTex()}$
22
+ $$
23
+ ${sys.toTex()}
24
+ $$
22
25
 
23
26
  Que vaut $${variable}$ ?`,
24
27
  keys: [],
25
28
  answerFormat: "tex",
26
- identifiers: { coeffs: sys.coeffs, isXAsked },
29
+ identifiers,
27
30
  };
28
31
  return question;
29
32
  };
@@ -33,7 +33,7 @@ const getSignFunction = () => {
33
33
  instruction,
34
34
  startStatement: "S",
35
35
  answer,
36
- keys: ["S", "equal", "lbracket", "rbracket", "semicolon", "infty"],
36
+ keys: ["lbracket", "semicolon", "rbracket", "infty"],
37
37
  answerFormat: "tex",
38
38
  identifiers: { a, askingPositive, b },
39
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"factorizedFormFromRoots.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/trinoms/factorizedFormFromRoots.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA+EF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAczD,CAAC"}
1
+ {"version":3,"file":"factorizedFormFromRoots.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/trinoms/factorizedFormFromRoots.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAgBlC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA+EF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
@@ -71,4 +71,5 @@ exports.factorizedFormFromRoots = {
71
71
  getPropositions,
72
72
  isAnswerValid,
73
73
  subject: "Mathématiques",
74
+ getInstruction,
74
75
  };
@@ -1 +1 @@
1
- {"version":3,"file":"thalesCalcul.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/thales/thalesCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAqBT,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAoB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAGL,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAUtC,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uBAAuB,EAAE,gBAAgB,EAAE,CAAC;IAC5C,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAsKF,KAAK,OAAO,GAAG;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAiEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAkBvD,CAAC"}
1
+ {"version":3,"file":"thalesCalcul.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/geometry/thales/thalesCalcul.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAqBT,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAoB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAGL,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAUtC,KAAK,WAAW,GAAG;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uBAAuB,EAAE,gBAAgB,EAAE,CAAC;IAC5C,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAsKF,KAAK,OAAO,GAAG;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAiEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAwBvD,CAAC"}
@@ -196,4 +196,10 @@ exports.thalesCalcul = {
196
196
  getGGBOptions,
197
197
  options,
198
198
  hasGeogebra: true,
199
+ validateOptions: (opts) => {
200
+ return {
201
+ valid: !!opts?.configurationType,
202
+ message: "Veuillez choisir un type de figure.",
203
+ };
204
+ },
199
205
  };
@@ -1 +1 @@
1
- {"version":3,"file":"powersDivision.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/powers/powersDivision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EACL,QAAQ,EAQT,MAAM,gBAAgB,CAAC;AAGxB,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAyFF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CA6BhD,CAAC;AACF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAkBrD,CAAC"}
1
+ {"version":3,"file":"powersDivision.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/powers/powersDivision.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EACL,QAAQ,EAQT,MAAM,gBAAgB,CAAC;AAKxB,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA8FF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CA6BhD,CAAC;AACF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAkBrD,CAAC"}