math-exercises 2.2.5 → 2.2.6

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.
@@ -0,0 +1,8 @@
1
+ import { Exercise } from "../../../exercises/exercise";
2
+ type Identifiers = {
3
+ nb: number;
4
+ rankAsked: number;
5
+ };
6
+ export declare const digitDecimalRankNumber: Exercise<Identifiers>;
7
+ export {};
8
+ //# sourceMappingURL=digitDecimalRankNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digitDecimalRankNumber.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/digitDecimalRankNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAYlC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAkDF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAexD,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.digitDecimalRankNumber = void 0;
4
+ const exercise_1 = require("../../../exercises/exercise");
5
+ const getDistinctQuestions_1 = require("../../../exercises/utils/getDistinctQuestions");
6
+ const decimal_1 = require("../../../math/numbers/decimals/decimal");
7
+ const randint_1 = require("../../../math/utils/random/randint");
8
+ const ordinals = ["premier", "deuxième", "troisième", "quatrième"];
9
+ const getDigitRankNumberQuestion = () => {
10
+ const decimalPartSize = (0, randint_1.randint)(2, 5);
11
+ const nb = decimal_1.DecimalConstructor.random(0, 1000, decimalPartSize);
12
+ const rankAsked = (0, randint_1.randint)(0, Math.min(decimalPartSize, 3));
13
+ const rankAskedLabel = decimal_1.decimalDigitRanks[rankAsked];
14
+ const str = nb.tex;
15
+ const answer = str.split(".")[0] + str.split(".")[1].substring(0, rankAsked + 1);
16
+ const question = {
17
+ answer,
18
+ instruction: `Quel est le nombre de ${rankAskedLabel} dans le nombre $${nb
19
+ .toTree()
20
+ .toTex()}$ ?`,
21
+ keys: [],
22
+ // hint: `Attention ! On demande le 'nombre' et non pas le 'chiffre' !`,
23
+ // correction: `Le chiffre des ${rankAskedLabel} est le ${ordinals[rankAsked]} chiffre en partant de la droite. Donc le chiffre des ${rankAskedLabel} est $${answer}$.`,
24
+ answerFormat: "tex",
25
+ identifiers: { nb: nb.value, rankAsked },
26
+ };
27
+ return question;
28
+ };
29
+ const getPropositions = (n, { answer, nb, rankAsked }) => {
30
+ const propositions = [];
31
+ (0, exercise_1.addValidProp)(propositions, answer);
32
+ const str = nb.toString();
33
+ const [intPart, fracPart] = str.split(".");
34
+ (0, exercise_1.tryToAddWrongProp)(propositions, fracPart[rankAsked]);
35
+ for (let i = 0; i < str.length; i++) {
36
+ (0, exercise_1.tryToAddWrongProp)(propositions, intPart + fracPart.substring(0, i + 1));
37
+ }
38
+ while (propositions.length < n) {
39
+ (0, exercise_1.tryToAddWrongProp)(propositions, (0, randint_1.randint)(0, 100) + "");
40
+ }
41
+ return (0, exercise_1.shuffleProps)(propositions, n);
42
+ };
43
+ const isAnswerValid = (ans, { answer }) => {
44
+ return ans === answer;
45
+ };
46
+ exports.digitDecimalRankNumber = {
47
+ id: "digitDecimalRankNumber",
48
+ connector: "=",
49
+ label: "Déterminer le nombre de dixièmes, de centièmes...",
50
+ levels: [],
51
+ isSingleStep: true,
52
+ sections: [],
53
+ generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getDigitRankNumberQuestion, nb),
54
+ qcmTimer: 60,
55
+ freeTimer: 60,
56
+ getPropositions,
57
+ isAnswerValid,
58
+ subject: "Mathématiques",
59
+ // hasHintAndCorrection: true,
60
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"digitRankNumber.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/digitRankNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAQlC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA8CF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAejD,CAAC"}
1
+ {"version":3,"file":"digitRankNumber.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/digitRankNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,0BAA0B,CAAC;AAQlC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA8CF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,WAAW,CAcjD,CAAC"}
@@ -17,8 +17,8 @@ const getDigitRankNumberQuestion = () => {
17
17
  answer,
18
18
  instruction: `Quel est le nombre ${rankAsked === 0 ? "d'" : "de "}${rankAskedLabel} dans le nombre $${nb.toTree().toTex()}$ ?`,
19
19
  keys: [],
20
- hint: `Attention ! On demande le 'nombre' et non pas le 'chiffre' !`,
21
- correction: `Le chiffre des ${rankAskedLabel} est le ${ordinals[rankAsked]} chiffre en partant de la droite. Donc le chiffre des ${rankAskedLabel} est $${answer}$.`,
20
+ // hint: `Attention ! On demande le 'nombre' et non pas le 'chiffre' !`,
21
+ // correction: `Le chiffre des ${rankAskedLabel} est le ${ordinals[rankAsked]} chiffre en partant de la droite. Donc le chiffre des ${rankAskedLabel} est $${answer}$.`,
22
22
  answerFormat: "tex",
23
23
  identifiers: { nb, rankAsked },
24
24
  };
@@ -43,7 +43,7 @@ const isAnswerValid = (ans, { answer }) => {
43
43
  exports.digitRankNumber = {
44
44
  id: "digitRankNumber",
45
45
  connector: "=",
46
- label: "Déterminer le rang d'un chiffre dans un nombre entier",
46
+ label: "Déterminer le nombre d'unités/de dizaines/de centièmes...",
47
47
  levels: [],
48
48
  isSingleStep: true,
49
49
  sections: [],
@@ -53,5 +53,4 @@ exports.digitRankNumber = {
53
53
  getPropositions,
54
54
  isAnswerValid,
55
55
  subject: "Mathématiques",
56
- hasHintAndCorrection: true,
57
56
  };
@@ -9,4 +9,5 @@ export * from "./rounding";
9
9
  export * from "./digitRank";
10
10
  export * from "./digitDecimalRank";
11
11
  export * from "./digitRankNumber";
12
+ export * from "./digitDecimalRankNumber";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC"}
@@ -25,3 +25,4 @@ __exportStar(require("./rounding"), exports);
25
25
  __exportStar(require("./digitRank"), exports);
26
26
  __exportStar(require("./digitDecimalRank"), exports);
27
27
  __exportStar(require("./digitRankNumber"), exports);
28
+ __exportStar(require("./digitDecimalRankNumber"), exports);
@@ -2,6 +2,8 @@ import { Exercise } from "../../../../exercises/exercise";
2
2
  type Identifiers = {
3
3
  xValues: number[];
4
4
  imageValues: number[];
5
+ isAskingImage: boolean;
6
+ value: number;
5
7
  };
6
8
  export declare const inverseImageFunctionTable: Exercise<Identifiers>;
7
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"inverseImageFunctionTable.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/inverseImageFunctionTable.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAOlC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AA8GF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAc3D,CAAC"}
1
+ {"version":3,"file":"inverseImageFunctionTable.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/inverseImageFunctionTable.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAUlC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAgFF,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAc3D,CAAC"}
@@ -3,91 +3,71 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.inverseImageFunctionTable = void 0;
4
4
  const exercise_1 = require("../../../../exercises/exercise");
5
5
  const getDistinctQuestions_1 = require("../../../../exercises/utils/getDistinctQuestions");
6
- const polynomial_1 = require("../../../../math/polynomials/polynomial");
6
+ const randTupleInt_1 = require("../../../../math/utils/random/randTupleInt");
7
7
  const randint_1 = require("../../../../math/utils/random/randint");
8
+ const arrayHasSameElement_1 = require("../../../../utils/arrayHasSameElement");
8
9
  const coinFlip_1 = require("../../../../utils/coinFlip");
9
10
  const random_1 = require("../../../../utils/random");
10
11
  const getInverseImageFunctionTableQuestion = () => {
11
- const exercise = generateExercise();
12
- const instruction = `Ci-dessous est donné le tableau de valeurs d'une fonction $f$. Déterminer ${exercise.isAskingImage ? `l'image de` : `le ou les antécédents de`} $${exercise.questionValue}$ par $f$
13
- ${exercise.exoTable.table}`;
12
+ const xValues = (0, randTupleInt_1.randTupleInt)(5, {
13
+ from: -10,
14
+ to: 10,
15
+ allDifferent: true,
16
+ }).sort((a, b) => a - b);
17
+ const yValues = (0, randTupleInt_1.randTupleInt)(5, { from: -10, to: 10 });
18
+ let indexAsked = (0, randint_1.randint)(0, 5);
19
+ const valueAsked = xValues[indexAsked];
20
+ //on force un meme nombre dans les deux lignes pour complexifier
21
+ if (!yValues.includes(valueAsked) || yValues[indexAsked] === valueAsked) {
22
+ yValues[(0, randint_1.randint)(0, 5, [indexAsked])] = valueAsked;
23
+ }
24
+ const isAskingImage = (0, coinFlip_1.coinFlip)();
25
+ const answer = (isAskingImage
26
+ ? yValues[indexAsked]
27
+ : xValues
28
+ .filter((el, index) => yValues[index] === valueAsked)
29
+ .join("\\text{ et }")) + "";
30
+ const instruction = `Ci-dessous est donné le tableau de valeurs d'une fonction $f$. Déterminer ${isAskingImage ? `l'image de` : `le ou les antécédents de`} $${valueAsked}$ par $f$.
31
+
32
+ |$x$|${xValues.map((value) => `$${value}$`).join("|")}|
33
+ |-|-|-|-|-|-|
34
+ |$f(x)$|${yValues.map((value) => `$${value}$`).join("|")}|
35
+ `;
14
36
  const question = {
15
- answer: `${exercise.answer}`,
37
+ answer,
16
38
  instruction,
17
- keys: ["x", "equal"],
39
+ keys: ["et"],
18
40
  answerFormat: "tex",
19
41
  style: { tableHasNoHeader: true },
20
42
  identifiers: {
21
- xValues: exercise.exoTable.xValues,
22
- imageValues: exercise.exoTable.imageValues,
43
+ xValues,
44
+ imageValues: yValues,
45
+ isAskingImage,
46
+ value: valueAsked,
23
47
  },
24
48
  };
25
49
  return question;
26
50
  };
27
- const getPropositions = (n, { answer, xValues, imageValues }) => {
51
+ const getPropositions = (n, { answer, xValues, imageValues, isAskingImage, value }) => {
28
52
  const propositions = [];
29
53
  (0, exercise_1.addValidProp)(propositions, answer);
30
- generatePropositions(xValues, imageValues, answer).forEach((value) => (0, exercise_1.tryToAddWrongProp)(propositions, value));
54
+ if (isAskingImage) {
55
+ (0, exercise_1.tryToAddWrongProp)(propositions, xValues[imageValues.indexOf(value)] + "");
56
+ }
57
+ else {
58
+ (0, exercise_1.tryToAddWrongProp)(propositions, imageValues[xValues.indexOf(value)] + "");
59
+ }
31
60
  while (propositions.length < n) {
32
- let randProp = (0, randint_1.randint)(+answer - 10, +answer + 11, [+answer]);
33
- (0, exercise_1.tryToAddWrongProp)(propositions, randProp + "");
61
+ (0, exercise_1.tryToAddWrongProp)(propositions, ((0, coinFlip_1.coinFlip)() ? (0, random_1.random)(xValues) : (0, random_1.random)(imageValues)) + "");
34
62
  }
35
63
  return (0, exercise_1.shuffleProps)(propositions, n);
36
64
  };
37
- const isAnswerValid = (ans, { answer }) => {
38
- return [ans, ans.split("=")[1]].includes(answer);
39
- };
40
- const generateTable = (f) => {
41
- const xValues = generateXValues();
42
- const imageValues = xValues.map((value) => f.calculate(value));
43
- return {
44
- xValues,
45
- imageValues,
46
- table: `
47
- |$x$|${xValues
48
- .map((value) => `$${value}$`)
49
- .reduce((prev, curr) => prev + "|" + curr)}|
50
- |-|-|-|-|-|-|
51
- |$f(x)$|${imageValues
52
- .map((value) => `$${value}$`)
53
- .reduce((prev, curr) => prev + "|" + curr)}|
54
- `,
55
- };
56
- };
57
- const generateXValues = () => {
58
- const xValues = [];
59
- for (let i = 0; i < 5; i++) {
60
- let value;
61
- do {
62
- value = (0, randint_1.randint)(-11, 11);
63
- } while (xValues.includes(value));
64
- xValues.push(value);
65
- }
66
- xValues.sort((a, b) => {
67
- return a - b;
68
- });
69
- return xValues;
70
- };
71
- const generateExercise = () => {
72
- const polynom = new polynomial_1.Polynomial([(0, randint_1.randint)(-9, 10), (0, randint_1.randint)(-5, 6, [0])]);
73
- const exoTable = generateTable(polynom);
74
- const isAskingImage = (0, coinFlip_1.coinFlip)();
75
- const questionValue = isAskingImage
76
- ? (0, random_1.random)(exoTable.xValues)
77
- : (0, random_1.random)(exoTable.imageValues);
78
- const answer = isAskingImage
79
- ? polynom.calculate(questionValue)
80
- : exoTable.xValues.find((value, index) => exoTable.imageValues[index] === questionValue);
81
- return { polynom, exoTable, isAskingImage, questionValue, answer };
82
- };
83
- const generatePropositions = (xValues, imageValues, answer) => {
84
- const filteredXValues = xValues.filter((value) => value !== +answer);
85
- const firstProp = (0, random_1.random)(filteredXValues);
86
- const secondProp = (0, random_1.random)(filteredXValues
87
- .concat(imageValues)
88
- .filter((value) => ![firstProp, +answer].includes(value)));
89
- const thirdProp = (0, random_1.random)(imageValues.filter((value) => value !== secondProp));
90
- return [firstProp + "", secondProp + "", thirdProp + ""];
65
+ const isAnswerValid = (ans, { answer, xValues, imageValues, isAskingImage, value }) => {
66
+ const numbers = ans.split("\\text{ et }").map((el) => Number(el));
67
+ if (numbers.some((n) => isNaN(n)))
68
+ return false;
69
+ const answerNumbers = answer.split("\\text{ et }").map((el) => Number(el));
70
+ return ans === answer || (0, arrayHasSameElement_1.arrayHasSameElements)(numbers, answerNumbers);
91
71
  };
92
72
  exports.inverseImageFunctionTable = {
93
73
  id: "inverseImageFunctionTable",
@@ -1 +1 @@
1
- {"version":3,"file":"probaFromTableNoContext.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/probaStat/probaFromTableNoContext.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAOlC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAkHF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
1
+ {"version":3,"file":"probaFromTableNoContext.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/probaStat/probaFromTableNoContext.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAST,MAAM,0BAA0B,CAAC;AAOlC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAmHF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
@@ -62,10 +62,11 @@ const getProbaFromTableNoContextQuestion = () => {
62
62
  answer,
63
63
  instruction: `On considère deux événements $A$ et $B$. Le tableau suivant donne le nombre d'issues pour chacun des événements $A\\cap B$, $\\overline A\\cap B$, $A\\cap \\overline B$ et $\\overline A \\cap \\overline B$. Calculer la probabilité $${event}$.
64
64
 
65
- | | $B$ | $\\overline{B}$|
66
- |-|-|-|
67
- |$A$|${aCapB}|${aCapBBarre}|
68
- |$\\overline{A}$|${aBarreCapB}|${aBarreCapBBarre}|
65
+ | | $B$ | $\\overline{B}$| Total
66
+ |-|-|-|-|
67
+ |$A$|${aCapB}|${aCapBBarre}|${aTotal}|
68
+ |$\\overline{A}$|${aBarreCapB}|${aBarreCapBBarre}|${aBarreTotal}|
69
+ |Total|${bTotal}|${bBarreTotal}|${total}|
69
70
 
70
71
  `,
71
72
  keys: [],
package/lib/index.d.ts CHANGED
@@ -148,6 +148,9 @@ declare const mathExercises: (import("./exercises/exercise").Exercise<{
148
148
  }> | import("./exercises/exercise").Exercise<{
149
149
  nb: number;
150
150
  rankAsked: number;
151
+ }> | import("./exercises/exercise").Exercise<{
152
+ nb: number;
153
+ rankAsked: number;
151
154
  }> | import("./exercises/exercise").Exercise<{
152
155
  a: number;
153
156
  b: number;
@@ -597,6 +600,8 @@ declare const mathExercises: (import("./exercises/exercise").Exercise<{
597
600
  }> | import("./exercises/exercise").Exercise<{
598
601
  xValues: number[];
599
602
  imageValues: number[];
603
+ isAskingImage: boolean;
604
+ value: number;
600
605
  }> | import("./exercises/exercise").Exercise<{
601
606
  k: number;
602
607
  }> | import("./exercises/exercise").Exercise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ interface randTupleIntOptions {
2
2
  from: number;
3
3
  to?: number;
4
4
  excludes?: number[];
5
+ allDifferent?: boolean;
5
6
  }
6
7
  /**
7
8
  * @param size tuple length
@@ -1 +1 @@
1
- {"version":3,"file":"randTupleInt.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randTupleInt.ts"],"names":[],"mappings":"AAGA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,SAAU,MAAM,WAAW,mBAAmB,KAAG,MAAM,EAM/E,CAAC;AAEF,eAAO,MAAM,oBAAoB,OAAQ,MAAM,QAAQ,MAAM,WAAW,mBAAmB,KAAG,MAAM,EAAE,EAUrG,CAAC"}
1
+ {"version":3,"file":"randTupleInt.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randTupleInt.ts"],"names":[],"mappings":"AAGA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,SACjB,MAAM,WACH,mBAAmB,KAC3B,MAAM,EAUR,CAAC;AAEF,eAAO,MAAM,oBAAoB,OAC3B,MAAM,QACJ,MAAM,WACH,mBAAmB,KAC3B,MAAM,EAAE,EAUV,CAAC"}
@@ -11,7 +11,11 @@ const randint_1 = require("./randint");
11
11
  const randTupleInt = (size, options) => {
12
12
  const res = [];
13
13
  for (let i = 0; i < size; i++) {
14
- res.push((0, randint_1.randint)(options.from, options.to, options.excludes));
14
+ let x;
15
+ do {
16
+ x = (0, randint_1.randint)(options.from, options.to, options.excludes);
17
+ } while (options.allDifferent && res.includes(x));
18
+ res.push(x);
15
19
  }
16
20
  return res;
17
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,YAgBtB,CAAC"}
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,YAgBtB,CAAC"}
package/lib/playground.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.playground = void 0;
4
4
  const affine_1 = require("./math/polynomials/affine");
5
+ const randTupleInt_1 = require("./math/utils/random/randTupleInt");
5
6
  const addNode_1 = require("./tree/nodes/operators/addNode");
6
7
  const multiplyNode_1 = require("./tree/nodes/operators/multiplyNode");
7
8
  const random_1 = require("./utils/random");
@@ -14,6 +15,6 @@ const playground = () => {
14
15
  ];
15
16
  const operation = (0, random_1.random)(["add", "substract"]);
16
17
  const statementTree = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(permut[0][0].toTree(), permut[0][1].toTree()), new multiplyNode_1.MultiplyNode(permut[1][0].toTree(), permut[1][1].toTree()));
17
- console.log(statementTree.simplify().toTex());
18
+ console.log((0, randTupleInt_1.distinctRandTupleInt)(3, 2, { from: 1, to: 10 }));
18
19
  };
19
20
  exports.playground = playground;
package/lib/server.js CHANGED
@@ -37,6 +37,7 @@ const numberNode_1 = require("./tree/nodes/numbers/numberNode");
37
37
  const infiniteNode_1 = require("./tree/nodes/numbers/infiniteNode");
38
38
  const toScientific_1 = require("./utils/numberPrototype/toScientific");
39
39
  const variableNode_1 = require("./tree/nodes/variables/variableNode");
40
+ const playground_1 = require("./playground");
40
41
  const jsonParser = body_parser_1.default.json();
41
42
  const mathExercises = Object.values(MathExercises);
42
43
  const pcExercises = Object.values(PCExercises);
@@ -65,7 +66,7 @@ const runServer = () => {
65
66
  console.log("math exos", mathExercises.length);
66
67
  console.log("math hints", mathExercises.filter((exo) => exo.hasHintAndCorrection).length);
67
68
  console.log("pc exos", pcExercises.length);
68
- // playground();
69
+ (0, playground_1.playground)();
69
70
  app.get("/", (req, res) => {
70
71
  res.json(allExercises);
71
72
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "math-exercises",
3
- "version": "2.2.5",
3
+ "version": "2.2.6",
4
4
  "description": "Math exercises generator for middle school and high school",
5
5
  "main": "lib/index.js",
6
6
  "files": [