math-exercises 1.0.1 → 1.1.1

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 (99) hide show
  1. package/nodemon.json +1 -2
  2. package/package.json +2 -2
  3. package/src/exercises/calcul/addAndSub.js +34 -0
  4. package/src/exercises/calcul/addAndSub.ts +32 -0
  5. package/src/exercises/calcul/priority.ts +33 -0
  6. package/src/exercises/calculLitteral/distributivity/allIdentities.js +26 -0
  7. package/src/exercises/calculLitteral/distributivity/allIdentities.ts +25 -0
  8. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.js +30 -0
  9. package/src/exercises/calculLitteral/distributivity/doubleDistributivity.ts +32 -0
  10. package/src/exercises/calculLitteral/distributivity/firstIdentity.js +31 -0
  11. package/src/exercises/calculLitteral/distributivity/firstIdentity.ts +32 -0
  12. package/src/exercises/calculLitteral/distributivity/secondIdentity.js +32 -0
  13. package/src/exercises/calculLitteral/distributivity/secondIdentity.ts +34 -0
  14. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.js +32 -0
  15. package/src/exercises/calculLitteral/distributivity/simpleDistributivity.ts +32 -0
  16. package/src/exercises/calculLitteral/distributivity/thirdIdentity.js +31 -0
  17. package/src/exercises/calculLitteral/distributivity/thirdIdentity.ts +33 -0
  18. package/src/exercises/calculLitteral/equation/equationType1Exercise.js +37 -0
  19. package/src/exercises/calculLitteral/equation/equationType1Exercise.ts +37 -0
  20. package/src/exercises/calculLitteral/equation/equationType2Exercise.js +40 -0
  21. package/src/exercises/calculLitteral/equation/equationType2Exercise.ts +40 -0
  22. package/src/exercises/calculLitteral/equation/equationType3Exercise.js +41 -0
  23. package/src/exercises/calculLitteral/equation/equationType3Exercise.ts +42 -0
  24. package/src/exercises/calculLitteral/equation/equationType4Exercise.js +43 -0
  25. package/src/exercises/calculLitteral/equation/equationType4Exercise.ts +45 -0
  26. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.js +27 -23
  27. package/src/exercises/calculLitteral/factorisation/factoType1Exercise.ts +37 -22
  28. package/src/exercises/exercise.js +5 -0
  29. package/src/exercises/exercise.ts +10 -1
  30. package/src/exercises/exercises.js +29 -0
  31. package/src/exercises/exercises.ts +27 -0
  32. package/src/exercises/squareRoots/simpifySquareRoot.js +27 -0
  33. package/src/exercises/squareRoots/simpifySquareRoot.ts +26 -0
  34. package/src/expression/expression.js +3 -1
  35. package/src/expression/expression.ts +4 -0
  36. package/src/index.js +3 -6
  37. package/src/index.ts +18 -6
  38. package/src/mathutils/arithmetic/isSquare.js +7 -0
  39. package/src/mathutils/arithmetic/primeFactors.js +22 -0
  40. package/src/numbers/integer/integer.js +15 -0
  41. package/src/numbers/integer/integer.ts +20 -2
  42. package/src/numbers/nombre.js +9 -0
  43. package/src/numbers/nombre.ts +13 -0
  44. package/src/{latex/monome.ts → numbers/rationals/division.ts} +0 -0
  45. package/src/numbers/rationals/rational.js +23 -1
  46. package/src/numbers/rationals/rational.ts +37 -3
  47. package/src/numbers/reals/real.js +15 -0
  48. package/src/numbers/reals/real.ts +15 -1
  49. package/src/numbers/reals/squareRoot.js +85 -0
  50. package/src/numbers/reals/squareRoot.ts +44 -21
  51. package/src/polynomials/affine.js +5 -4
  52. package/src/polynomials/affine.ts +16 -21
  53. package/src/polynomials/polynomial.js +47 -11
  54. package/src/polynomials/polynomial.ts +57 -17
  55. package/src/sets/discreteSet.js +4 -4
  56. package/src/sets/discreteSet.ts +10 -9
  57. package/src/sets/emptySet.ts +5 -5
  58. package/src/sets/intervals/intervals.js +33 -9
  59. package/src/sets/intervals/intervals.ts +41 -12
  60. package/src/sets/mathSet.ts +5 -3
  61. package/src/sets/mathSetInterface.ts +4 -2
  62. package/src/tree/latexParser/latexParse.js +76 -0
  63. package/src/tree/latexParser/latexParse.ts +82 -0
  64. package/src/tree/nodes/functions/sqrtNode.js +18 -0
  65. package/src/tree/nodes/functions/sqrtNode.ts +16 -0
  66. package/src/tree/nodes/node.js +10 -0
  67. package/src/tree/nodes/node.ts +14 -0
  68. package/src/tree/nodes/numbers/numberNode.js +19 -0
  69. package/src/tree/nodes/numbers/numberNode.ts +19 -0
  70. package/src/tree/nodes/operators/addNode.js +18 -0
  71. package/src/tree/nodes/operators/addNode.ts +17 -0
  72. package/src/tree/nodes/operators/divideNode.js +22 -0
  73. package/src/tree/nodes/operators/divideNode.ts +23 -0
  74. package/src/tree/nodes/operators/equalNode.js +18 -0
  75. package/src/tree/nodes/operators/equalNode.ts +17 -0
  76. package/src/tree/nodes/operators/multiplyNode.js +18 -0
  77. package/src/tree/nodes/operators/multiplyNode.ts +18 -0
  78. package/src/{operations/operation.js → tree/nodes/operators/operatorNode.js} +0 -0
  79. package/src/tree/nodes/operators/operatorNode.ts +3 -0
  80. package/src/tree/nodes/operators/oppositeNode.js +18 -0
  81. package/src/tree/nodes/operators/oppositeNode.ts +17 -0
  82. package/src/tree/nodes/operators/powerNode.js +18 -0
  83. package/src/tree/nodes/operators/powerNode.ts +17 -0
  84. package/src/tree/nodes/operators/substractNode.js +18 -0
  85. package/src/tree/nodes/operators/substractNode.ts +17 -0
  86. package/src/tree/nodes/variables/variableNode.js +20 -0
  87. package/src/tree/nodes/variables/variableNode.ts +18 -0
  88. package/src/equations/equations.ts +0 -16
  89. package/src/exercises/calculLitteral/factorisation/factorisation.js +0 -39
  90. package/src/latex/add.js +0 -7
  91. package/src/latex/latex.js +0 -37
  92. package/src/latex/latex.ts +0 -35
  93. package/src/latex/multiply.ts +0 -5
  94. package/src/numbers/number.ts +0 -4
  95. package/src/operations/add.js +0 -9
  96. package/src/operations/add.ts +0 -9
  97. package/src/operations/operation.ts +0 -6
  98. package/src/operations/substract.js +0 -9
  99. package/src/operations/substract.ts +0 -9
@@ -0,0 +1,40 @@
1
+ import { Integer } from "../../../numbers/integer/integer";
2
+ import { Rational } from "../../../numbers/rationals/rational";
3
+ import { Affine } from "../../../polynomials/affine";
4
+ import { DiscreteSet } from "../../../sets/discreteSet";
5
+ import { Interval } from "../../../sets/intervals/intervals";
6
+ import { latexParse } from "../../../tree/latexParser/latexParse";
7
+ import { EqualNode } from "../../../tree/nodes/operators/equalNode";
8
+ import { VariableNode } from "../../../tree/nodes/variables/variableNode";
9
+ import { Exercise, Question } from "../../exercise";
10
+ import { getDistinctQuestions } from "../../utils/getDistinctQuestions";
11
+
12
+ /**
13
+ * type ax=b
14
+ */
15
+ export const equationType2Exercise: Exercise = {
16
+ id: "equa2",
17
+
18
+ connector: "\\iff",
19
+ instruction: "Résoudre : ",
20
+ label: "Equations $ax=b$",
21
+ levels: ["4", "3", "2"],
22
+ section: "Calcul littéral",
23
+ generator: (nb: number) => getDistinctQuestions(getEquationType2ExerciseQuestion, nb),
24
+ };
25
+
26
+ export function getEquationType2ExerciseQuestion(): Question {
27
+ const interval = new Interval("[[-10; 10]]");
28
+ const intervalStar = new Interval("[[-10; 10]]").difference(new DiscreteSet([new Integer(0)]));
29
+ const b = interval.getRandomElement();
30
+ const a = intervalStar.getRandomElement();
31
+ const solution = new Rational(b.value, a.value).simplify();
32
+ const affine = new Affine(a.value, 0).toTree();
33
+ const tree = new EqualNode(affine, b.toTree());
34
+ const answer = new EqualNode(new VariableNode("x"), solution.toTree());
35
+ const question: Question = {
36
+ statement: latexParse(tree),
37
+ answer: latexParse(answer),
38
+ };
39
+ return question;
40
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.getEquationType3ExerciseQuestion = exports.equationType3Exercise = void 0;
4
+ var integer_1 = require("../../../numbers/integer/integer");
5
+ var rational_1 = require("../../../numbers/rationals/rational");
6
+ var affine_1 = require("../../../polynomials/affine");
7
+ var discreteSet_1 = require("../../../sets/discreteSet");
8
+ var intervals_1 = require("../../../sets/intervals/intervals");
9
+ var latexParse_1 = require("../../../tree/latexParser/latexParse");
10
+ var equalNode_1 = require("../../../tree/nodes/operators/equalNode");
11
+ var variableNode_1 = require("../../../tree/nodes/variables/variableNode");
12
+ var getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
13
+ /**
14
+ * type ax+b=c
15
+ */
16
+ exports.equationType3Exercise = {
17
+ id: "equa3",
18
+ connector: "\\iff",
19
+ instruction: "Résoudre : ",
20
+ label: "Equations $ax+b=c$",
21
+ levels: ["4", "3", "2"],
22
+ section: "Calcul littéral",
23
+ generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getEquationType3ExerciseQuestion, nb); }
24
+ };
25
+ function getEquationType3ExerciseQuestion() {
26
+ var interval = new intervals_1.Interval("[[-10; 10]]");
27
+ var intervalStar = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)]));
28
+ var b = intervalStar.getRandomElement();
29
+ var a = intervalStar.getRandomElement();
30
+ var c = interval.getRandomElement();
31
+ var affine = new affine_1.Affine(a.value, b.value).toTree();
32
+ var solution = new rational_1.Rational(c.value - b.value, a.value).simplify();
33
+ var statementTree = new equalNode_1.EqualNode(affine, c.toTree());
34
+ var answerTree = new equalNode_1.EqualNode(new variableNode_1.VariableNode("x"), solution.toTree());
35
+ var question = {
36
+ statement: (0, latexParse_1.latexParse)(statementTree),
37
+ answer: (0, latexParse_1.latexParse)(answerTree)
38
+ };
39
+ return question;
40
+ }
41
+ exports.getEquationType3ExerciseQuestion = getEquationType3ExerciseQuestion;
@@ -0,0 +1,42 @@
1
+ import { Integer } from "../../../numbers/integer/integer";
2
+ import { Rational } from "../../../numbers/rationals/rational";
3
+ import { Affine } from "../../../polynomials/affine";
4
+ import { DiscreteSet } from "../../../sets/discreteSet";
5
+ import { Interval } from "../../../sets/intervals/intervals";
6
+ import { latexParse } from "../../../tree/latexParser/latexParse";
7
+ import { EqualNode } from "../../../tree/nodes/operators/equalNode";
8
+ import { VariableNode } from "../../../tree/nodes/variables/variableNode";
9
+ import { Exercise, Question } from "../../exercise";
10
+ import { getDistinctQuestions } from "../../utils/getDistinctQuestions";
11
+
12
+ /**
13
+ * type ax+b=c
14
+ */
15
+ export const equationType3Exercise: Exercise = {
16
+ id: "equa3",
17
+
18
+ connector: "\\iff",
19
+ instruction: "Résoudre : ",
20
+ label: "Equations $ax+b=c$",
21
+ levels: ["4", "3", "2"],
22
+ section: "Calcul littéral",
23
+ generator: (nb: number) => getDistinctQuestions(getEquationType3ExerciseQuestion, nb),
24
+ };
25
+
26
+ export function getEquationType3ExerciseQuestion(): Question {
27
+ const interval = new Interval("[[-10; 10]]");
28
+ const intervalStar = new Interval("[[-10; 10]]").difference(new DiscreteSet([new Integer(0)]));
29
+ const b = intervalStar.getRandomElement();
30
+ const a = intervalStar.getRandomElement();
31
+ const c = interval.getRandomElement();
32
+
33
+ const affine = new Affine(a.value, b.value).toTree();
34
+ const solution = new Rational(c.value - b.value, a.value).simplify();
35
+ const statementTree = new EqualNode(affine, c.toTree());
36
+ const answerTree = new EqualNode(new VariableNode("x"), solution.toTree());
37
+ const question: Question = {
38
+ statement: latexParse(statementTree),
39
+ answer: latexParse(answerTree),
40
+ };
41
+ return question;
42
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.getEquationType4ExerciseQuestion = exports.equationType4Exercise = void 0;
4
+ var integer_1 = require("../../../numbers/integer/integer");
5
+ var rational_1 = require("../../../numbers/rationals/rational");
6
+ var affine_1 = require("../../../polynomials/affine");
7
+ var discreteSet_1 = require("../../../sets/discreteSet");
8
+ var intervals_1 = require("../../../sets/intervals/intervals");
9
+ var latexParse_1 = require("../../../tree/latexParser/latexParse");
10
+ var equalNode_1 = require("../../../tree/nodes/operators/equalNode");
11
+ var variableNode_1 = require("../../../tree/nodes/variables/variableNode");
12
+ var getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
13
+ /**
14
+ * type ax+b=cx+d
15
+ */
16
+ exports.equationType4Exercise = {
17
+ id: "equa4",
18
+ connector: "\\iff",
19
+ instruction: "Résoudre : ",
20
+ label: "Equations $ax+b=cx+d$",
21
+ levels: ["4", "3", "2"],
22
+ section: "Calcul littéral",
23
+ generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getEquationType4ExerciseQuestion, nb); }
24
+ };
25
+ function getEquationType4ExerciseQuestion() {
26
+ var interval = new intervals_1.Interval("[[-10; 10]]");
27
+ var intervalStar = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)]));
28
+ var a = intervalStar.getRandomElement();
29
+ var b = interval.getRandomElement();
30
+ var intervalC = new intervals_1.Interval("[[-10; 10]]").difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0), new integer_1.Integer(a.value)]));
31
+ var c = intervalC.getRandomElement();
32
+ var d = interval.getRandomElement();
33
+ var affines = [new affine_1.Affine(a.value, b.value), new affine_1.Affine(c.value, d.value)];
34
+ var solution = new rational_1.Rational(d.value - b.value, a.value - c.value).simplify();
35
+ var statementTree = new equalNode_1.EqualNode(affines[0].toTree(), affines[1].toTree());
36
+ var answerTree = new equalNode_1.EqualNode(new variableNode_1.VariableNode("x"), solution.toTree());
37
+ var question = {
38
+ statement: (0, latexParse_1.latexParse)(statementTree),
39
+ answer: (0, latexParse_1.latexParse)(answerTree)
40
+ };
41
+ return question;
42
+ }
43
+ exports.getEquationType4ExerciseQuestion = getEquationType4ExerciseQuestion;
@@ -0,0 +1,45 @@
1
+ import { Integer } from "../../../numbers/integer/integer";
2
+ import { Rational } from "../../../numbers/rationals/rational";
3
+ import { Affine } from "../../../polynomials/affine";
4
+ import { DiscreteSet } from "../../../sets/discreteSet";
5
+ import { Interval } from "../../../sets/intervals/intervals";
6
+ import { latexParse } from "../../../tree/latexParser/latexParse";
7
+ import { EqualNode } from "../../../tree/nodes/operators/equalNode";
8
+ import { VariableNode } from "../../../tree/nodes/variables/variableNode";
9
+ import { Exercise, Question } from "../../exercise";
10
+ import { getDistinctQuestions } from "../../utils/getDistinctQuestions";
11
+
12
+ /**
13
+ * type ax+b=cx+d
14
+ */
15
+ export const equationType4Exercise: Exercise = {
16
+ id: "equa4",
17
+
18
+ connector: "\\iff",
19
+ instruction: "Résoudre : ",
20
+ label: "Equations $ax+b=cx+d$",
21
+ levels: ["4", "3", "2"],
22
+ section: "Calcul littéral",
23
+ generator: (nb: number) => getDistinctQuestions(getEquationType4ExerciseQuestion, nb),
24
+ };
25
+
26
+ export function getEquationType4ExerciseQuestion(): Question {
27
+ const interval = new Interval("[[-10; 10]]");
28
+ const intervalStar = new Interval("[[-10; 10]]").difference(new DiscreteSet([new Integer(0)]));
29
+ const a = intervalStar.getRandomElement();
30
+ const b = interval.getRandomElement();
31
+ const intervalC = new Interval("[[-10; 10]]").difference(new DiscreteSet([new Integer(0), new Integer(a.value)]));
32
+ const c = intervalC.getRandomElement();
33
+ const d = interval.getRandomElement();
34
+
35
+ const affines = [new Affine(a.value, b.value), new Affine(c.value, d.value)];
36
+ const solution = new Rational(d.value - b.value, a.value - c.value).simplify();
37
+
38
+ const statementTree = new EqualNode(affines[0].toTree(), affines[1].toTree());
39
+ const answerTree = new EqualNode(new VariableNode("x"), solution.toTree());
40
+ const question: Question = {
41
+ statement: latexParse(statementTree),
42
+ answer: latexParse(answerTree),
43
+ };
44
+ return question;
45
+ }
@@ -1,29 +1,27 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
- exports.getFactoType1Question = exports.FactoType1Exercise = void 0;
4
- var add_1 = require("../../../operations/add");
5
- var substract_1 = require("../../../operations/substract");
3
+ exports.getFactoType1Question = exports.factoType1Exercise = void 0;
6
4
  var affine_1 = require("../../../polynomials/affine");
5
+ var latexParse_1 = require("../../../tree/latexParser/latexParse");
6
+ var addNode_1 = require("../../../tree/nodes/operators/addNode");
7
+ var multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
8
+ var substractNode_1 = require("../../../tree/nodes/operators/substractNode");
7
9
  var random_1 = require("../../../utils/random");
8
10
  var shuffle_1 = require("../../../utils/shuffle");
9
11
  var getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
10
12
  /**
11
- *
12
- * @returns type (ax+b)(cx+d) +- (ax+b)(ex+f)
13
+ * type (ax+b)(cx+d) ± (ax+b)(ex+f)
13
14
  */
14
- var FactoType1Exercise = /** @class */ (function () {
15
- function FactoType1Exercise(nbOfQuestions) {
16
- this.connector = "=";
17
- this.instruction = "Factoriser :";
18
- this.label = "Factorisation du type $(ax+b)(cx+d) \\pm (ax+b)(ex+f)$";
19
- this.levels = ["3", "2"];
20
- this.section = "Calcul Littéral";
21
- this.questions = (0, getDistinctQuestions_1.getDistinctQuestions)(exports.getFactoType1Question, nbOfQuestions);
22
- }
23
- return FactoType1Exercise;
24
- }());
25
- exports.FactoType1Exercise = FactoType1Exercise;
26
- var getFactoType1Question = function () {
15
+ exports.factoType1Exercise = {
16
+ id: "facto1",
17
+ connector: "=",
18
+ instruction: "Factoriser :",
19
+ label: "Factorisation du type $(ax+b)(cx+d) \\pm (ax+b)(ex+f)$",
20
+ levels: ["3", "2"],
21
+ section: "Calcul Littéral",
22
+ generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getFactoType1Question, nb); }
23
+ };
24
+ function getFactoType1Question() {
27
25
  var affines = affine_1.AffineConstructor.differentRandoms(3);
28
26
  var permut = [
29
27
  [affines[0], affines[1]],
@@ -31,9 +29,15 @@ var getFactoType1Question = function () {
31
29
  ];
32
30
  (0, shuffle_1.shuffle)(permut[0]);
33
31
  (0, shuffle_1.shuffle)(permut[1]);
34
- var operation = (0, random_1.random)([add_1.add, substract_1.substract]);
35
- var statement = "(".concat(permut[0][0], ")(").concat(permut[0][1], ") ").concat(operation.tex, " (").concat(permut[1][0], ")(").concat(permut[1][1], ")");
36
- var answer = "(".concat(affines[0], ")(").concat(operation.apply(affines[1], affines[2]), ")");
37
- return { statement: statement, answer: answer };
38
- };
32
+ var operation = (0, random_1.random)(["add", "substract"]);
33
+ var statementTree = operation === "add"
34
+ ? 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()))
35
+ : new substractNode_1.SubstractNode(new multiplyNode_1.MultiplyNode(permut[0][0].toTree(), permut[0][1].toTree()), new multiplyNode_1.MultiplyNode(permut[1][0].toTree(), permut[1][1].toTree()));
36
+ var answerTree = new multiplyNode_1.MultiplyNode(affines[0].toTree(), affines[1].add(operation === "add" ? affines[2] : affines[2].opposite()).toTree());
37
+ var question = {
38
+ statement: (0, latexParse_1.latexParse)(statementTree),
39
+ answer: (0, latexParse_1.latexParse)(answerTree)
40
+ };
41
+ return question;
42
+ }
39
43
  exports.getFactoType1Question = getFactoType1Question;
@@ -1,30 +1,28 @@
1
- import { Expression } from "../../../expression/expression";
2
- import { add } from "../../../operations/add";
3
- import { substract } from "../../../operations/substract";
4
1
  import { Affine, AffineConstructor } from "../../../polynomials/affine";
2
+ import { latexParse } from "../../../tree/latexParser/latexParse";
3
+ import { AddNode } from "../../../tree/nodes/operators/addNode";
4
+ import { MultiplyNode } from "../../../tree/nodes/operators/multiplyNode";
5
+ import { SubstractNode } from "../../../tree/nodes/operators/substractNode";
5
6
  import { random } from "../../../utils/random";
6
7
  import { shuffle } from "../../../utils/shuffle";
7
8
  import { Exercise, Question } from "../../exercise";
8
9
  import { getDistinctQuestions } from "../../utils/getDistinctQuestions";
9
10
 
10
11
  /**
11
- *
12
- * @returns type (ax+b)(cx+d) +- (ax+b)(ex+f)
12
+ * type (ax+b)(cx+d) ± (ax+b)(ex+f)
13
13
  */
14
14
 
15
- export class FactoType1Exercise implements Exercise {
16
- connector = "=";
17
- instruction = "Factoriser :";
18
- label = "Factorisation du type $(ax+b)(cx+d) \\pm (ax+b)(ex+f)$";
19
- levels = ["3", "2"];
20
- section = "Calcul Littéral";
21
- questions: Question[];
22
- constructor(nbOfQuestions: number) {
23
- this.questions = getDistinctQuestions(getFactoType1Question, nbOfQuestions);
24
- }
25
- }
15
+ export const factoType1Exercise: Exercise = {
16
+ id: "facto1",
17
+ connector: "=",
18
+ instruction: "Factoriser :",
19
+ label: "Factorisation du type $(ax+b)(cx+d) \\pm (ax+b)(ex+f)$",
20
+ levels: ["3", "2"],
21
+ section: "Calcul Littéral",
22
+ generator: (nb: number) => getDistinctQuestions(getFactoType1Question, nb),
23
+ };
26
24
 
27
- export const getFactoType1Question = () => {
25
+ export function getFactoType1Question(): Question {
28
26
  const affines = AffineConstructor.differentRandoms(3);
29
27
 
30
28
  const permut: Affine[][] = [
@@ -34,10 +32,27 @@ export const getFactoType1Question = () => {
34
32
  shuffle(permut[0]);
35
33
  shuffle(permut[1]);
36
34
 
37
- const operation = random([add, substract]);
35
+ const operation = random(["add", "substract"]);
38
36
 
39
- const statement = `(${permut[0][0]})(${permut[0][1]}) ${operation.tex} (${permut[1][0]})(${permut[1][1]})`;
37
+ const statementTree =
38
+ operation === "add"
39
+ ? new AddNode(
40
+ new MultiplyNode(permut[0][0].toTree(), permut[0][1].toTree()),
41
+ new MultiplyNode(permut[1][0].toTree(), permut[1][1].toTree())
42
+ )
43
+ : new SubstractNode(
44
+ new MultiplyNode(permut[0][0].toTree(), permut[0][1].toTree()),
45
+ new MultiplyNode(permut[1][0].toTree(), permut[1][1].toTree())
46
+ );
40
47
 
41
- const answer = `(${affines[0]})(${operation.apply(affines[1], affines[2])})`;
42
- return { statement, answer };
43
- };
48
+ const answerTree = new MultiplyNode(
49
+ affines[0].toTree(),
50
+ affines[1].add(operation === "add" ? affines[2] : affines[2].opposite()).toTree()
51
+ );
52
+
53
+ const question: Question = {
54
+ statement: latexParse(statementTree),
55
+ answer: latexParse(answerTree),
56
+ };
57
+ return question;
58
+ }
@@ -1,2 +1,7 @@
1
1
  "use strict";
2
+ // export enum Connector {
3
+ // equal = "=",
4
+ // equiv = "\\iff",
5
+ // implies = "\\Rightarrow",
6
+ // }
2
7
  exports.__esModule = true;
@@ -1,14 +1,23 @@
1
+ // export enum Connector {
2
+ // equal = "=",
3
+ // equiv = "\\iff",
4
+ // implies = "\\Rightarrow",
5
+ // }
6
+
1
7
  export interface Question {
2
8
  statement: string;
3
9
  answer: string;
4
10
  }
11
+
5
12
  export interface Exercise {
13
+ id: string;
6
14
  instruction: string;
7
15
  label: string;
8
16
  section: string;
9
17
  levels: string[];
10
18
  connector: string;
11
- questions: Question[];
19
+ generator(nb: number): Question[];
20
+ // questions: Question[];
12
21
  // constructor({ generatorType, questionsNumber }: ExerciseParameters) {
13
22
 
14
23
  // }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.exercises = void 0;
4
+ var allIdentities_1 = require("./calculLitteral/distributivity/allIdentities");
5
+ var doubleDistributivity_1 = require("./calculLitteral/distributivity/doubleDistributivity");
6
+ var firstIdentity_1 = require("./calculLitteral/distributivity/firstIdentity");
7
+ var secondIdentity_1 = require("./calculLitteral/distributivity/secondIdentity");
8
+ var simpleDistributivity_1 = require("./calculLitteral/distributivity/simpleDistributivity");
9
+ var thirdIdentity_1 = require("./calculLitteral/distributivity/thirdIdentity");
10
+ var equationType1Exercise_1 = require("./calculLitteral/equation/equationType1Exercise");
11
+ var equationType2Exercise_1 = require("./calculLitteral/equation/equationType2Exercise");
12
+ var equationType3Exercise_1 = require("./calculLitteral/equation/equationType3Exercise");
13
+ var equationType4Exercise_1 = require("./calculLitteral/equation/equationType4Exercise");
14
+ var factoType1Exercise_1 = require("./calculLitteral/factorisation/factoType1Exercise");
15
+ var simpifySquareRoot_1 = require("./squareRoots/simpifySquareRoot");
16
+ exports.exercises = [
17
+ factoType1Exercise_1.factoType1Exercise,
18
+ simpleDistributivity_1.simpleDistributivity,
19
+ doubleDistributivity_1.doubleDistributivity,
20
+ firstIdentity_1.firstIdentity,
21
+ secondIdentity_1.secondIdentity,
22
+ thirdIdentity_1.thirdIdentity,
23
+ allIdentities_1.allIdentities,
24
+ equationType1Exercise_1.equationType1Exercise,
25
+ equationType2Exercise_1.equationType2Exercise,
26
+ equationType3Exercise_1.equationType3Exercise,
27
+ equationType4Exercise_1.equationType4Exercise,
28
+ simpifySquareRoot_1.simplifySquareRoot,
29
+ ];
@@ -0,0 +1,27 @@
1
+ import { allIdentities } from "./calculLitteral/distributivity/allIdentities";
2
+ import { doubleDistributivity } from "./calculLitteral/distributivity/doubleDistributivity";
3
+ import { firstIdentity } from "./calculLitteral/distributivity/firstIdentity";
4
+ import { secondIdentity } from "./calculLitteral/distributivity/secondIdentity";
5
+ import { simpleDistributivity } from "./calculLitteral/distributivity/simpleDistributivity";
6
+ import { thirdIdentity } from "./calculLitteral/distributivity/thirdIdentity";
7
+ import { equationType1Exercise } from "./calculLitteral/equation/equationType1Exercise";
8
+ import { equationType2Exercise } from "./calculLitteral/equation/equationType2Exercise";
9
+ import { equationType3Exercise } from "./calculLitteral/equation/equationType3Exercise";
10
+ import { equationType4Exercise } from "./calculLitteral/equation/equationType4Exercise";
11
+ import { factoType1Exercise } from "./calculLitteral/factorisation/factoType1Exercise";
12
+ import { simplifySquareRoot } from "./squareRoots/simpifySquareRoot";
13
+
14
+ export const exercises = [
15
+ factoType1Exercise,
16
+ simpleDistributivity,
17
+ doubleDistributivity,
18
+ firstIdentity,
19
+ secondIdentity,
20
+ thirdIdentity,
21
+ allIdentities,
22
+ equationType1Exercise,
23
+ equationType2Exercise,
24
+ equationType3Exercise,
25
+ equationType4Exercise,
26
+ simplifySquareRoot,
27
+ ];
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.getSimplifySquareRoot = exports.simplifySquareRoot = void 0;
4
+ var squareRoot_1 = require("../../numbers/reals/squareRoot");
5
+ var latexParse_1 = require("../../tree/latexParser/latexParse");
6
+ var getDistinctQuestions_1 = require("../utils/getDistinctQuestions");
7
+ exports.simplifySquareRoot = {
8
+ id: "simplifySqrt",
9
+ connector: "=",
10
+ instruction: "Simplifier :",
11
+ label: "Simplification de racines carrées",
12
+ levels: ["3", "2", "1"],
13
+ section: "Racines carrées",
14
+ generator: function (nb) { return (0, getDistinctQuestions_1.getDistinctQuestions)(getSimplifySquareRoot, nb); }
15
+ };
16
+ function getSimplifySquareRoot() {
17
+ var squareRoot = squareRoot_1.SquareRootConstructor.randomSimplifiable({
18
+ allowPerfectSquare: false,
19
+ maxSquare: 11
20
+ });
21
+ var question = {
22
+ statement: (0, latexParse_1.latexParse)(squareRoot.toTree()),
23
+ answer: (0, latexParse_1.latexParse)(squareRoot.simplify().toTree())
24
+ };
25
+ return question;
26
+ }
27
+ exports.getSimplifySquareRoot = getSimplifySquareRoot;
@@ -0,0 +1,26 @@
1
+ import { SquareRootConstructor } from "../../numbers/reals/squareRoot";
2
+ import { latexParse } from "../../tree/latexParser/latexParse";
3
+ import { Exercise, Question } from "../exercise";
4
+ import { getDistinctQuestions } from "../utils/getDistinctQuestions";
5
+
6
+ export const simplifySquareRoot: Exercise = {
7
+ id: "simplifySqrt",
8
+ connector: "=",
9
+ instruction: "Simplifier :",
10
+ label: "Simplification de racines carrées",
11
+ levels: ["3", "2", "1"],
12
+ section: "Racines carrées",
13
+ generator: (nb: number) => getDistinctQuestions(getSimplifySquareRoot, nb),
14
+ };
15
+
16
+ export function getSimplifySquareRoot(): Question {
17
+ const squareRoot = SquareRootConstructor.randomSimplifiable({
18
+ allowPerfectSquare: false,
19
+ maxSquare: 11,
20
+ });
21
+ const question: Question = {
22
+ statement: latexParse(squareRoot.toTree()),
23
+ answer: latexParse(squareRoot.simplify().toTree()),
24
+ };
25
+ return question;
26
+ }
@@ -3,5 +3,7 @@ exports.__esModule = true;
3
3
  exports.ExpressionType = void 0;
4
4
  var ExpressionType;
5
5
  (function (ExpressionType) {
6
- ExpressionType[ExpressionType["polynomial"] = 0] = "polynomial";
6
+ ExpressionType[ExpressionType["real"] = 0] = "real";
7
+ ExpressionType[ExpressionType["affine"] = 1] = "affine";
8
+ ExpressionType[ExpressionType["polynomial"] = 2] = "polynomial";
7
9
  })(ExpressionType = exports.ExpressionType || (exports.ExpressionType = {}));
@@ -1,9 +1,13 @@
1
1
  export enum ExpressionType {
2
+ real,
3
+ affine,
2
4
  polynomial,
3
5
  }
4
6
 
5
7
  export interface Expression {
8
+ // type: ExpressionType;
6
9
  add(expression: Expression): Expression;
10
+ multiply(expression: Expression): Expression;
7
11
  opposite(): Expression;
8
12
  toTex(): string;
9
13
  }
package/src/index.js CHANGED
@@ -1,8 +1,5 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
- var factoType1Exercise_1 = require("./exercises/calculLitteral/factorisation/factoType1Exercise");
4
- // exercice = new Exercice(Factorisation.type, nbQuestions, opts)
5
- //exercice = {questions: {statement, answer}, consigne, label, section, levels, connector, }
6
- var exercice = new factoType1Exercise_1.FactoType1Exercise(10);
7
- console.log(exercice.instruction);
8
- console.log(exercice.questions);
3
+ exports.exercises = void 0;
4
+ var exercises_1 = require("./exercises/exercises");
5
+ exports.exercises = exercises_1.exercises;
package/src/index.ts CHANGED
@@ -1,7 +1,19 @@
1
- import { FactoType1Exercise } from "./exercises/calculLitteral/factorisation/factoType1Exercise";
1
+ import { allIdentities } from "./exercises/calculLitteral/distributivity/allIdentities";
2
+ import { doubleDistributivity } from "./exercises/calculLitteral/distributivity/doubleDistributivity";
3
+ import { simpleDistributivity } from "./exercises/calculLitteral/distributivity/simpleDistributivity";
4
+ import { equationType1Exercise } from "./exercises/calculLitteral/equation/equationType1Exercise";
5
+ import { equationType2Exercise } from "./exercises/calculLitteral/equation/equationType2Exercise";
6
+ import { equationType3Exercise } from "./exercises/calculLitteral/equation/equationType3Exercise";
7
+ import { equationType4Exercise } from "./exercises/calculLitteral/equation/equationType4Exercise";
8
+ import { factoType1Exercise } from "./exercises/calculLitteral/factorisation/factoType1Exercise";
9
+ import { exercises } from "./exercises/exercises";
10
+ import { simplifySquareRoot } from "./exercises/squareRoots/simpifySquareRoot";
11
+ import { randint } from "./mathutils/random/randint";
12
+ import { Rational } from "./numbers/rationals/rational";
13
+ import { SquareRoot } from "./numbers/reals/squareRoot";
14
+ import { Affine } from "./polynomials/affine";
15
+ import { Polynomial } from "./polynomials/polynomial";
16
+ import { latexParse } from "./tree/latexParser/latexParse";
17
+ import { VariableNode } from "./tree/nodes/variables/variableNode";
2
18
 
3
- // exercice = new Exercice(Factorisation.type, nbQuestions, opts)
4
- //exercice = {questions: {statement, answer}, consigne, label, section, levels, connector, }
5
- const exercice = new FactoType1Exercise(10);
6
- console.log(exercice.instruction);
7
- console.log(exercice.questions);
19
+ export { exercises };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.isSquare = void 0;
4
+ var isSquare = function (a) {
5
+ return a > 0 && Math.sqrt(a) % 1 === 0;
6
+ };
7
+ exports.isSquare = isSquare;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.primeFactors = void 0;
4
+ /***
5
+ * returns array of prime factors
6
+ * e.g 12 -> [2, 2, 3]
7
+ */
8
+ var primeFactors = function (a) {
9
+ var factors = [];
10
+ var divisor = 2;
11
+ while (a >= 2) {
12
+ if (a % divisor === 0) {
13
+ factors.push(divisor);
14
+ a = a / divisor;
15
+ }
16
+ else {
17
+ divisor++;
18
+ }
19
+ }
20
+ return factors;
21
+ };
22
+ exports.primeFactors = primeFactors;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.Integer = void 0;
4
+ var numberNode_1 = require("../../tree/nodes/numbers/numberNode");
5
+ var Integer = /** @class */ (function () {
6
+ function Integer(value) {
7
+ this.value = value;
8
+ this.tex = value + "";
9
+ }
10
+ Integer.prototype.toTree = function () {
11
+ return new numberNode_1.NumberNode(this.value);
12
+ };
13
+ return Integer;
14
+ }());
15
+ exports.Integer = Integer;