math-exercises 1.2.11 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/lib/exercises/calcul/addAndSub.js +8 -9
- package/lib/exercises/calcul/fractions/fractionAndIntegerDivision.js +7 -8
- package/lib/exercises/calcul/fractions/fractionAndIntegerProduct.js +9 -9
- package/lib/exercises/calcul/fractions/fractionAndIntegerSum.js +7 -8
- package/lib/exercises/calcul/fractions/fractionsDivision.js +8 -9
- package/lib/exercises/calcul/fractions/fractionsProduct.js +8 -9
- package/lib/exercises/calcul/fractions/fractionsSum.js +8 -9
- package/lib/exercises/calcul/fractions/simplifyFraction.js +2 -3
- package/lib/exercises/calcul/operations/operationsPriorities.js +25 -15
- package/lib/exercises/calcul/rounding/rounding.js +33 -34
- package/lib/exercises/calculLitteral/distributivity/doubleDistributivity.js +9 -10
- package/lib/exercises/calculLitteral/distributivity/firstIdentity.js +9 -10
- package/lib/exercises/calculLitteral/distributivity/secondIdentity.js +10 -11
- package/lib/exercises/calculLitteral/distributivity/simpleDistributivity.js +9 -10
- package/lib/exercises/calculLitteral/distributivity/thirdIdentity.js +9 -10
- package/lib/exercises/calculLitteral/equation/equationType1Exercise.js +9 -10
- package/lib/exercises/calculLitteral/equation/equationType2Exercise.js +11 -12
- package/lib/exercises/calculLitteral/equation/equationType3Exercise.js +11 -12
- package/lib/exercises/calculLitteral/equation/equationType4Exercise.js +12 -13
- package/lib/exercises/calculLitteral/factorisation/factoType1Exercise.js +11 -12
- package/lib/exercises/geometry/cartesian/midpoint.js +1 -1
- package/lib/exercises/geometry/vectors/scalarProductViaCoords.js +9 -10
- package/lib/exercises/powers/powersDivision.js +14 -15
- package/lib/exercises/powers/powersOfTenToDecimal.js +6 -7
- package/lib/exercises/powers/powersPower.js +12 -13
- package/lib/exercises/powers/powersProduct.js +14 -15
- package/lib/exercises/powers/scientificToDecimal.js +8 -9
- package/lib/exercises/squareRoots/simpifySquareRoot.js +8 -9
- package/lib/exercises/utils/getDistinctQuestions.js +1 -2
- package/lib/geometry/point.js +4 -4
- package/lib/geometry/vector.js +3 -3
- package/lib/index.js +4 -5
- package/lib/tree/nodes/functions/oppositeNode.js +16 -3
- package/lib/tree/nodes/functions/sqrtNode.js +6 -3
- package/lib/tree/nodes/numbers/numberNode.js +1 -1
- package/lib/tree/nodes/operators/addNode.js +7 -3
- package/lib/tree/nodes/operators/divideNode.js +20 -3
- package/lib/tree/nodes/operators/equalNode.js +6 -3
- package/lib/tree/nodes/operators/fractionNode.js +6 -3
- package/lib/tree/nodes/operators/multiplyNode.js +26 -3
- package/lib/tree/nodes/operators/operatorNode.js +3 -3
- package/lib/tree/nodes/operators/powerNode.js +23 -3
- package/lib/tree/nodes/operators/substractNode.js +14 -3
- package/lib/tree/nodes/variables/variableNode.js +9 -6
- package/lib/tree/parsers/derivateParser.js +61 -59
- package/lib/tree/parsers/latexParser.js +109 -116
- package/lib/tree/parsers/simplify.js +51 -0
- package/package.json +5 -2
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# math-exercises
|
|
2
|
+
|
|
3
|
+
This is a generator of Math exercises for middle school and high school.
|
|
4
|
+
|
|
5
|
+
So far, exercises are written in French, but any translation is welcome !
|
|
6
|
+
|
|
7
|
+
This library is used by [Mathlive.fr](https://www.mathlive.fr) for collaborative quizzes.
|
|
8
|
+
|
|
9
|
+
## 🚧 Work in progress !
|
|
10
|
+
|
|
11
|
+
This library is still in beta and the architecture may very well completely change in the future.
|
|
12
|
+
|
|
13
|
+
Incoming improvements :
|
|
14
|
+
|
|
15
|
+
- Random images generation using tikZ
|
|
16
|
+
|
|
17
|
+
- Steps within answers
|
|
18
|
+
|
|
19
|
+
- Coverage of all topics up to 12th grade
|
|
20
|
+
|
|
21
|
+
- Better classification of exercises
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## Exercises format
|
|
25
|
+
|
|
26
|
+
Each exercise has a `generator` that will return distinct questions for this exercises.
|
|
27
|
+
|
|
28
|
+
The Question in itself has an `instruction`, a `startStatement` and an `answer` (which are all tex strings).
|
|
29
|
+
|
|
30
|
+
## How to use
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Example with (ax+b)^2 questions :
|
|
34
|
+
```
|
|
35
|
+
import { firstIdentity } from exercises/calculLitteral/distributivity/firstIdentity
|
|
36
|
+
|
|
37
|
+
console.log(firstIdentity.instruction);
|
|
38
|
+
const question = firstIdentity.generator(1)
|
|
39
|
+
console.log(question.startStatement)
|
|
40
|
+
console.log(question.answer)
|
|
41
|
+
|
|
42
|
+
//output :
|
|
43
|
+
// Développer et réduire :
|
|
44
|
+
// (2x+3)^2
|
|
45
|
+
// 4x^2 + 12x + 9
|
|
46
|
+
```
|
|
47
|
+
Beware, some exercises do not have instructions, because the instruction is directly in the question itself.
|
|
48
|
+
|
|
49
|
+
## Expression tree and latex parser
|
|
50
|
+
|
|
51
|
+
Math expressions are implemented via a tree of Nodes that you'll find inside `tree/nodes`.
|
|
52
|
+
|
|
53
|
+
The `latexParser` function will parse the tree into a TeX string that is using a valid mathemtical syntax.
|
|
54
|
+
|
|
55
|
+
## Minimal dependencies
|
|
56
|
+
|
|
57
|
+
We're trying to keep to our dependencies to a minimum. So far we're only using mathjs as an external library, to evaluate and simplify expression trees. We would love to have our own way of simplifying expressions in the future.
|
|
58
|
+
|
|
59
|
+
## How to contribute
|
|
60
|
+
|
|
61
|
+
Any contribution is welcomed.
|
|
62
|
+
|
|
63
|
+
There are a ton of exercises left to implement !
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAddAndSubQuestions = exports.addAndSubExercise = void 0;
|
|
4
4
|
const randint_1 = require("../../mathutils/random/randint");
|
|
5
|
-
const latexParser_1 = require("../../tree/parsers/latexParser");
|
|
6
5
|
const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
|
|
7
6
|
const addNode_1 = require("../../tree/nodes/operators/addNode");
|
|
8
7
|
const getDistinctQuestions_1 = require("../utils/getDistinctQuestions");
|
|
@@ -10,12 +9,12 @@ const getDistinctQuestions_1 = require("../utils/getDistinctQuestions");
|
|
|
10
9
|
* a±b±c±d
|
|
11
10
|
*/
|
|
12
11
|
exports.addAndSubExercise = {
|
|
13
|
-
id:
|
|
14
|
-
connector:
|
|
15
|
-
instruction:
|
|
16
|
-
label:
|
|
17
|
-
levels: [
|
|
18
|
-
section:
|
|
12
|
+
id: 'addAndSub',
|
|
13
|
+
connector: '=',
|
|
14
|
+
instruction: 'Calculer :',
|
|
15
|
+
label: 'Additions et soustractions',
|
|
16
|
+
levels: ['6', '5'],
|
|
17
|
+
section: 'Calculs',
|
|
19
18
|
isSingleStep: true,
|
|
20
19
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getAddAndSubQuestions, nb),
|
|
21
20
|
};
|
|
@@ -30,9 +29,9 @@ function getAddAndSubQuestions() {
|
|
|
30
29
|
for (let i = 2; i < allNumbersNodes.length; i++) {
|
|
31
30
|
statementTree = new addNode_1.AddNode(statementTree, allNumbersNodes[i]);
|
|
32
31
|
}
|
|
33
|
-
const answer = numbers.reduce((a, b) => a + b) +
|
|
32
|
+
const answer = numbers.reduce((a, b) => a + b) + '';
|
|
34
33
|
const question = {
|
|
35
|
-
startStatement:
|
|
34
|
+
startStatement: statementTree.toTex(),
|
|
36
35
|
answer: answer,
|
|
37
36
|
};
|
|
38
37
|
return question;
|
|
@@ -4,18 +4,17 @@ exports.getFractionAndIntegerDivision = exports.fractionAndIntegerDivision = voi
|
|
|
4
4
|
const randint_1 = require("../../../mathutils/random/randint");
|
|
5
5
|
const integer_1 = require("../../../numbers/integer/integer");
|
|
6
6
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
7
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
8
7
|
const divideNode_1 = require("../../../tree/nodes/operators/divideNode");
|
|
9
8
|
const random_1 = require("../../../utils/random");
|
|
10
9
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
11
10
|
exports.fractionAndIntegerDivision = {
|
|
12
|
-
id:
|
|
13
|
-
connector:
|
|
14
|
-
instruction:
|
|
11
|
+
id: 'fractionAndIntegerDivision',
|
|
12
|
+
connector: '=',
|
|
13
|
+
instruction: 'Calculer la forme irréductible :',
|
|
15
14
|
label: "Division d'un entier et d'une fraction",
|
|
16
|
-
levels: [
|
|
15
|
+
levels: ['4', '3', '2', '1'],
|
|
17
16
|
isSingleStep: false,
|
|
18
|
-
section:
|
|
17
|
+
section: 'Fractions',
|
|
19
18
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionAndIntegerDivision, nb),
|
|
20
19
|
};
|
|
21
20
|
function getFractionAndIntegerDivision() {
|
|
@@ -27,8 +26,8 @@ function getFractionAndIntegerDivision() {
|
|
|
27
26
|
: new divideNode_1.DivideNode(rational.toTree(), integer.toTree());
|
|
28
27
|
const answerTree = integerFirst ? integer.divide(rational).toTree() : rational.divide(integer).toTree();
|
|
29
28
|
const question = {
|
|
30
|
-
startStatement:
|
|
31
|
-
answer:
|
|
29
|
+
startStatement: statementTree.toTex(),
|
|
30
|
+
answer: answerTree.toTex(),
|
|
32
31
|
};
|
|
33
32
|
return question;
|
|
34
33
|
}
|
|
@@ -4,27 +4,27 @@ exports.getFractionAndIntegerProduct = exports.fractionAndIntegerProduct = void
|
|
|
4
4
|
const randint_1 = require("../../../mathutils/random/randint");
|
|
5
5
|
const integer_1 = require("../../../numbers/integer/integer");
|
|
6
6
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
7
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
8
7
|
const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
|
|
9
8
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
10
9
|
exports.fractionAndIntegerProduct = {
|
|
11
|
-
id:
|
|
12
|
-
connector:
|
|
13
|
-
instruction:
|
|
10
|
+
id: 'fractionAndIntegerProduct',
|
|
11
|
+
connector: '=',
|
|
12
|
+
instruction: 'Calculer la forme irréductible :',
|
|
14
13
|
label: "Produit d'un entier et d'une fraction",
|
|
15
|
-
levels: [
|
|
14
|
+
levels: ['4', '3', '2', '1'],
|
|
16
15
|
isSingleStep: false,
|
|
17
|
-
section:
|
|
16
|
+
section: 'Fractions',
|
|
18
17
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionAndIntegerProduct, nb),
|
|
19
18
|
};
|
|
20
19
|
function getFractionAndIntegerProduct() {
|
|
21
20
|
const rational = rational_1.RationalConstructor.randomIrreductible();
|
|
22
21
|
const integer = new integer_1.Integer((0, randint_1.randint)(-10, 11, [0]));
|
|
23
|
-
const statementTree = new multiplyNode_1.MultiplyNode(rational.toTree(), integer.toTree())
|
|
22
|
+
const statementTree = new multiplyNode_1.MultiplyNode(rational.toTree(), integer.toTree());
|
|
23
|
+
statementTree.shuffle();
|
|
24
24
|
const answerTree = rational.multiply(integer).toTree();
|
|
25
25
|
const question = {
|
|
26
|
-
startStatement:
|
|
27
|
-
answer:
|
|
26
|
+
startStatement: statementTree.toTex(),
|
|
27
|
+
answer: answerTree.toTex(),
|
|
28
28
|
};
|
|
29
29
|
return question;
|
|
30
30
|
}
|
|
@@ -4,17 +4,16 @@ exports.getFractionAndIntegerSum = exports.fractionAndIntegerSum = void 0;
|
|
|
4
4
|
const randint_1 = require("../../../mathutils/random/randint");
|
|
5
5
|
const integer_1 = require("../../../numbers/integer/integer");
|
|
6
6
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
7
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
8
7
|
const addNode_1 = require("../../../tree/nodes/operators/addNode");
|
|
9
8
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
10
9
|
exports.fractionAndIntegerSum = {
|
|
11
|
-
id:
|
|
12
|
-
connector:
|
|
13
|
-
instruction:
|
|
10
|
+
id: 'fractionAndIntegerSum',
|
|
11
|
+
connector: '=',
|
|
12
|
+
instruction: 'Calculer la forme irréductible :',
|
|
14
13
|
label: "Somme d'un entier et d'une fraction",
|
|
15
|
-
levels: [
|
|
14
|
+
levels: ['4', '3', '2', '1'],
|
|
16
15
|
isSingleStep: false,
|
|
17
|
-
section:
|
|
16
|
+
section: 'Fractions',
|
|
18
17
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionAndIntegerSum, nb),
|
|
19
18
|
};
|
|
20
19
|
function getFractionAndIntegerSum() {
|
|
@@ -24,8 +23,8 @@ function getFractionAndIntegerSum() {
|
|
|
24
23
|
statementTree.shuffle();
|
|
25
24
|
const answerTree = rational.add(integer).toTree();
|
|
26
25
|
const question = {
|
|
27
|
-
startStatement:
|
|
28
|
-
answer:
|
|
26
|
+
startStatement: statementTree.toTex(),
|
|
27
|
+
answer: answerTree.toTex(),
|
|
29
28
|
};
|
|
30
29
|
return question;
|
|
31
30
|
}
|
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getFractionsDivision = exports.fractionsDivision = void 0;
|
|
4
4
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
5
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
6
5
|
const divideNode_1 = require("../../../tree/nodes/operators/divideNode");
|
|
7
6
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
8
7
|
exports.fractionsDivision = {
|
|
9
|
-
id:
|
|
10
|
-
connector:
|
|
11
|
-
instruction:
|
|
12
|
-
label:
|
|
13
|
-
levels: [
|
|
14
|
-
section:
|
|
8
|
+
id: 'fractionsDivision',
|
|
9
|
+
connector: '=',
|
|
10
|
+
instruction: 'Calculer la forme irréductible :',
|
|
11
|
+
label: 'Divisions de fractions',
|
|
12
|
+
levels: ['4', '3', '2', '1'],
|
|
13
|
+
section: 'Fractions',
|
|
15
14
|
isSingleStep: false,
|
|
16
15
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionsDivision, nb),
|
|
17
16
|
};
|
|
@@ -21,8 +20,8 @@ function getFractionsDivision() {
|
|
|
21
20
|
const statementTree = new divideNode_1.DivideNode(rational.toTree(), rational2.toTree());
|
|
22
21
|
const answerTree = rational.divide(rational2).toTree();
|
|
23
22
|
const question = {
|
|
24
|
-
startStatement:
|
|
25
|
-
answer:
|
|
23
|
+
startStatement: statementTree.toTex(),
|
|
24
|
+
answer: answerTree.toTex(),
|
|
26
25
|
};
|
|
27
26
|
return question;
|
|
28
27
|
}
|
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getFractionsProduct = exports.fractionsProduct = void 0;
|
|
4
4
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
5
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
6
5
|
const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
|
|
7
6
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
8
7
|
exports.fractionsProduct = {
|
|
9
|
-
id:
|
|
10
|
-
connector:
|
|
11
|
-
instruction:
|
|
12
|
-
label:
|
|
13
|
-
levels: [
|
|
14
|
-
section:
|
|
8
|
+
id: 'fractionsProduct',
|
|
9
|
+
connector: '=',
|
|
10
|
+
instruction: 'Calculer la forme irréductible :',
|
|
11
|
+
label: 'Produits de fractions',
|
|
12
|
+
levels: ['4', '3', '2', '1'],
|
|
13
|
+
section: 'Fractions',
|
|
15
14
|
isSingleStep: false,
|
|
16
15
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionsProduct, nb),
|
|
17
16
|
};
|
|
@@ -21,8 +20,8 @@ function getFractionsProduct() {
|
|
|
21
20
|
const statementTree = new multiplyNode_1.MultiplyNode(rational.toTree(), rational2.toTree());
|
|
22
21
|
const answerTree = rational.multiply(rational2).toTree();
|
|
23
22
|
const question = {
|
|
24
|
-
startStatement:
|
|
25
|
-
answer:
|
|
23
|
+
startStatement: statementTree.toTex(),
|
|
24
|
+
answer: answerTree.toTex(),
|
|
26
25
|
};
|
|
27
26
|
return question;
|
|
28
27
|
}
|
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getFractionsSum = exports.fractionsSum = void 0;
|
|
4
4
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
5
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
6
5
|
const addNode_1 = require("../../../tree/nodes/operators/addNode");
|
|
7
6
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
8
7
|
exports.fractionsSum = {
|
|
9
|
-
id:
|
|
10
|
-
connector:
|
|
11
|
-
instruction:
|
|
12
|
-
label:
|
|
13
|
-
levels: [
|
|
14
|
-
section:
|
|
8
|
+
id: 'fractionsSum',
|
|
9
|
+
connector: '=',
|
|
10
|
+
instruction: 'Calculer la forme irréductible :',
|
|
11
|
+
label: 'Sommes de fractions',
|
|
12
|
+
levels: ['4', '3', '2', '1'],
|
|
13
|
+
section: 'Fractions',
|
|
15
14
|
isSingleStep: false,
|
|
16
15
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFractionsSum, nb),
|
|
17
16
|
};
|
|
@@ -21,8 +20,8 @@ function getFractionsSum() {
|
|
|
21
20
|
const statementTree = new addNode_1.AddNode(rational.toTree(), rational2.toTree());
|
|
22
21
|
const answerTree = rational.add(rational2).toTree();
|
|
23
22
|
const question = {
|
|
24
|
-
startStatement:
|
|
25
|
-
answer:
|
|
23
|
+
startStatement: statementTree.toTex(),
|
|
24
|
+
answer: answerTree.toTex(),
|
|
26
25
|
};
|
|
27
26
|
return question;
|
|
28
27
|
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getSimplifyFraction = exports.simplifyFraction = void 0;
|
|
4
4
|
const rational_1 = require("../../../numbers/rationals/rational");
|
|
5
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
6
5
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
7
6
|
exports.simplifyFraction = {
|
|
8
7
|
id: 'simplifyFrac',
|
|
@@ -17,8 +16,8 @@ exports.simplifyFraction = {
|
|
|
17
16
|
function getSimplifyFraction() {
|
|
18
17
|
const rational = rational_1.RationalConstructor.randomSimplifiable(10);
|
|
19
18
|
const question = {
|
|
20
|
-
startStatement:
|
|
21
|
-
answer:
|
|
19
|
+
startStatement: rational.toTree().toTex(),
|
|
20
|
+
answer: rational.simplify().toTree().toTex(),
|
|
22
21
|
};
|
|
23
22
|
return question;
|
|
24
23
|
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getPriorityQuestions = exports.operationsPriorities = void 0;
|
|
4
4
|
const randint_1 = require("../../../mathutils/random/randint");
|
|
5
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
6
5
|
const numberNode_1 = require("../../../tree/nodes/numbers/numberNode");
|
|
7
6
|
const addNode_1 = require("../../../tree/nodes/operators/addNode");
|
|
8
7
|
const divideNode_1 = require("../../../tree/nodes/operators/divideNode");
|
|
@@ -17,29 +16,32 @@ const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
|
17
16
|
* a/b ± c*d
|
|
18
17
|
*/
|
|
19
18
|
exports.operationsPriorities = {
|
|
20
|
-
id:
|
|
21
|
-
connector:
|
|
22
|
-
instruction:
|
|
23
|
-
label:
|
|
24
|
-
levels: [
|
|
25
|
-
section:
|
|
19
|
+
id: 'operationsPriorities',
|
|
20
|
+
connector: '=',
|
|
21
|
+
instruction: 'Calculer :',
|
|
22
|
+
label: 'Priorités opératoires',
|
|
23
|
+
levels: ['6', '5', '4'],
|
|
24
|
+
section: 'Calculs',
|
|
26
25
|
isSingleStep: true,
|
|
27
26
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getPriorityQuestions, nb),
|
|
28
27
|
};
|
|
29
28
|
function getPriorityQuestions() {
|
|
30
29
|
const type = (0, randint_1.randint)(1, 6);
|
|
31
|
-
let
|
|
32
|
-
let answer =
|
|
30
|
+
let startStatement = '';
|
|
31
|
+
let answer = '';
|
|
33
32
|
let a, b, c, d;
|
|
33
|
+
let statement;
|
|
34
34
|
switch (type) {
|
|
35
35
|
case 1: // a*b ±c±d
|
|
36
36
|
[c, d] = [1, 2, 3, 4].map((el) => (0, randint_1.randint)(-10, 11, [0]));
|
|
37
37
|
[a, b] = [1, 2].map((el) => (0, randint_1.randint)(-10, 11));
|
|
38
38
|
statement = (0, coin_1.coin)()
|
|
39
39
|
? //a*b first ou last
|
|
40
|
-
new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new addNode_1.AddNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)))
|
|
40
|
+
new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new addNode_1.AddNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)))
|
|
41
41
|
: //a*b middle
|
|
42
42
|
new addNode_1.AddNode(new addNode_1.AddNode(new numberNode_1.NumberNode(c), new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b))), new numberNode_1.NumberNode(d));
|
|
43
|
+
statement.shuffle();
|
|
44
|
+
startStatement = statement.toTex();
|
|
43
45
|
answer = (a * b + c + d).toString();
|
|
44
46
|
break;
|
|
45
47
|
case 2: // a/b ±c±d
|
|
@@ -47,21 +49,26 @@ function getPriorityQuestions() {
|
|
|
47
49
|
a = b * (0, randint_1.randint)(0, 11);
|
|
48
50
|
statement = (0, coin_1.coin)()
|
|
49
51
|
? //a/b first ou last
|
|
50
|
-
new addNode_1.AddNode(new divideNode_1.DivideNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new addNode_1.AddNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)))
|
|
52
|
+
new addNode_1.AddNode(new divideNode_1.DivideNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new addNode_1.AddNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)))
|
|
51
53
|
: //a/b middle
|
|
52
54
|
new addNode_1.AddNode(new addNode_1.AddNode(new numberNode_1.NumberNode(c), new divideNode_1.DivideNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b))), new numberNode_1.NumberNode(d));
|
|
55
|
+
statement.shuffle();
|
|
56
|
+
startStatement = statement.toTex();
|
|
53
57
|
answer = (a / b + c + d).toString();
|
|
54
58
|
break;
|
|
55
59
|
case 3: // a*b ± c*d
|
|
56
60
|
[a, b, c, d] = [1, 2, 3, 4].map((el) => (0, randint_1.randint)(-10, 11));
|
|
57
61
|
statement = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)));
|
|
62
|
+
startStatement = statement.toTex();
|
|
58
63
|
answer = (a * b + c * d).toString();
|
|
59
64
|
break;
|
|
60
65
|
case 4: // a*b ± c/d
|
|
61
66
|
[a, b] = [1, 2].map((el) => (0, randint_1.randint)(-10, 11));
|
|
62
67
|
d = (0, randint_1.randint)(-10, 11, [0]);
|
|
63
68
|
c = d * (0, randint_1.randint)(0, 11);
|
|
64
|
-
statement = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new divideNode_1.DivideNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)))
|
|
69
|
+
statement = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new divideNode_1.DivideNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)));
|
|
70
|
+
statement.shuffle();
|
|
71
|
+
startStatement = statement.toTex();
|
|
65
72
|
answer = (a * b + c / d).toString();
|
|
66
73
|
break;
|
|
67
74
|
case 5: // a/b ± c/d
|
|
@@ -69,19 +76,22 @@ function getPriorityQuestions() {
|
|
|
69
76
|
a = b * (0, randint_1.randint)(0, 11);
|
|
70
77
|
c = d * (0, randint_1.randint)(0, 11);
|
|
71
78
|
statement = new addNode_1.AddNode(new divideNode_1.DivideNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new divideNode_1.DivideNode(new numberNode_1.NumberNode(c), new numberNode_1.NumberNode(d)));
|
|
79
|
+
startStatement = statement.toTex();
|
|
72
80
|
answer = (a / b + c / d).toString();
|
|
73
81
|
break;
|
|
74
82
|
case 5: // a*b*c ± d
|
|
75
83
|
[b, d] = [1, 2].map((el) => (0, randint_1.randint)(-10, 11, [0]));
|
|
76
84
|
a = b * (0, randint_1.randint)(0, 11);
|
|
77
85
|
c = d * (0, randint_1.randint)(0, 11);
|
|
78
|
-
statement = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new numberNode_1.NumberNode(c)), new numberNode_1.NumberNode(d))
|
|
86
|
+
statement = new addNode_1.AddNode(new multiplyNode_1.MultiplyNode(new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(a), new numberNode_1.NumberNode(b)), new numberNode_1.NumberNode(c)), new numberNode_1.NumberNode(d));
|
|
87
|
+
statement.shuffle();
|
|
88
|
+
startStatement = statement.toTex();
|
|
79
89
|
answer = (a * b * c + d).toString();
|
|
80
90
|
break;
|
|
81
91
|
}
|
|
82
92
|
const question = {
|
|
83
|
-
startStatement
|
|
84
|
-
answer
|
|
93
|
+
startStatement,
|
|
94
|
+
answer,
|
|
85
95
|
};
|
|
86
96
|
return question;
|
|
87
97
|
}
|
|
@@ -3,18 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getRoundQuestions = exports.allRoundings = exports.roundToMillieme = exports.roundToCentieme = exports.roundToDixieme = exports.roundToUnit = void 0;
|
|
4
4
|
const randint_1 = require("../../../mathutils/random/randint");
|
|
5
5
|
const decimal_1 = require("../../../numbers/decimals/decimal");
|
|
6
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
7
6
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
8
7
|
/**
|
|
9
8
|
* arrondi à l'unité
|
|
10
9
|
*/
|
|
11
10
|
exports.roundToUnit = {
|
|
12
|
-
id:
|
|
13
|
-
connector:
|
|
11
|
+
id: 'roundToUnit',
|
|
12
|
+
connector: '\\approx',
|
|
14
13
|
instruction: "Arrondir à l'unité :",
|
|
15
14
|
label: "Arrondir à l'unité",
|
|
16
|
-
levels: [
|
|
17
|
-
section:
|
|
15
|
+
levels: ['6', '5'],
|
|
16
|
+
section: 'Calculs',
|
|
18
17
|
isSingleStep: true,
|
|
19
18
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getRoundQuestions(0), nb),
|
|
20
19
|
};
|
|
@@ -22,12 +21,12 @@ exports.roundToUnit = {
|
|
|
22
21
|
* arrondi à l'unité
|
|
23
22
|
*/
|
|
24
23
|
exports.roundToDixieme = {
|
|
25
|
-
id:
|
|
26
|
-
connector:
|
|
27
|
-
instruction:
|
|
28
|
-
label:
|
|
29
|
-
levels: [
|
|
30
|
-
section:
|
|
24
|
+
id: 'roundToDixieme',
|
|
25
|
+
connector: '\\approx',
|
|
26
|
+
instruction: 'Arrondir au dixième :',
|
|
27
|
+
label: 'Arrondir au dixième',
|
|
28
|
+
levels: ['6', '5'],
|
|
29
|
+
section: 'Calculs',
|
|
31
30
|
isSingleStep: true,
|
|
32
31
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getRoundQuestions(1), nb),
|
|
33
32
|
};
|
|
@@ -35,12 +34,12 @@ exports.roundToDixieme = {
|
|
|
35
34
|
* arrondi à l'unité
|
|
36
35
|
*/
|
|
37
36
|
exports.roundToCentieme = {
|
|
38
|
-
id:
|
|
39
|
-
connector:
|
|
40
|
-
instruction:
|
|
41
|
-
label:
|
|
42
|
-
levels: [
|
|
43
|
-
section:
|
|
37
|
+
id: 'roundToCentieme',
|
|
38
|
+
connector: '\\approx',
|
|
39
|
+
instruction: 'Arrondir au centième :',
|
|
40
|
+
label: 'Arrondir au centième',
|
|
41
|
+
levels: ['6', '5'],
|
|
42
|
+
section: 'Calculs',
|
|
44
43
|
isSingleStep: true,
|
|
45
44
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getRoundQuestions(2), nb),
|
|
46
45
|
};
|
|
@@ -48,38 +47,38 @@ exports.roundToCentieme = {
|
|
|
48
47
|
* arrondi à l'unité
|
|
49
48
|
*/
|
|
50
49
|
exports.roundToMillieme = {
|
|
51
|
-
id:
|
|
52
|
-
connector:
|
|
53
|
-
instruction:
|
|
54
|
-
label:
|
|
55
|
-
levels: [
|
|
56
|
-
section:
|
|
50
|
+
id: 'roundToMillieme',
|
|
51
|
+
connector: '\\approx',
|
|
52
|
+
instruction: 'Arrondir au millième :',
|
|
53
|
+
label: 'Arrondir au millième',
|
|
54
|
+
levels: ['6', '5'],
|
|
55
|
+
section: 'Calculs',
|
|
57
56
|
isSingleStep: true,
|
|
58
57
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getRoundQuestions(3), nb),
|
|
59
58
|
};
|
|
60
59
|
exports.allRoundings = {
|
|
61
|
-
id:
|
|
62
|
-
connector:
|
|
63
|
-
instruction:
|
|
64
|
-
label:
|
|
65
|
-
levels: [
|
|
66
|
-
section:
|
|
60
|
+
id: 'allRoundings',
|
|
61
|
+
connector: '\\approx',
|
|
62
|
+
instruction: '',
|
|
63
|
+
label: 'Arrondir un nombre décimal',
|
|
64
|
+
levels: ['6', '5'],
|
|
65
|
+
section: 'Calculs',
|
|
67
66
|
isSingleStep: true,
|
|
68
67
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(() => getRoundQuestions((0, randint_1.randint)(0, 4)), nb),
|
|
69
68
|
};
|
|
70
69
|
const instructions = [
|
|
71
70
|
"Arrondir à l'unité :",
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
'Arrondir au dixième :',
|
|
72
|
+
'Arrondir au centième :',
|
|
73
|
+
'Arrondir au millième :',
|
|
75
74
|
];
|
|
76
75
|
function getRoundQuestions(precisionAsked = 0) {
|
|
77
76
|
const precision = (0, randint_1.randint)(precisionAsked + 1, precisionAsked + 5);
|
|
78
77
|
const dec = decimal_1.DecimalConstructor.random(0, 1000, precision);
|
|
79
78
|
const question = {
|
|
80
79
|
instruction: instructions[precisionAsked],
|
|
81
|
-
startStatement:
|
|
82
|
-
answer:
|
|
80
|
+
startStatement: dec.toTree().toTex(),
|
|
81
|
+
answer: dec.round(precisionAsked).toTree().toTex(),
|
|
83
82
|
};
|
|
84
83
|
return question;
|
|
85
84
|
}
|
|
@@ -5,27 +5,26 @@ const integer_1 = require("../../../numbers/integer/integer");
|
|
|
5
5
|
const affine_1 = require("../../../polynomials/affine");
|
|
6
6
|
const discreteSet_1 = require("../../../sets/discreteSet");
|
|
7
7
|
const intervals_1 = require("../../../sets/intervals/intervals");
|
|
8
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
9
8
|
const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
|
|
10
9
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
11
10
|
exports.doubleDistributivity = {
|
|
12
|
-
id:
|
|
13
|
-
connector:
|
|
14
|
-
instruction:
|
|
15
|
-
label:
|
|
16
|
-
levels: [
|
|
11
|
+
id: 'doubleDistri',
|
|
12
|
+
connector: '=',
|
|
13
|
+
instruction: 'Développer et réduire :',
|
|
14
|
+
label: 'Distributivité double',
|
|
15
|
+
levels: ['3', '2'],
|
|
17
16
|
isSingleStep: false,
|
|
18
|
-
section:
|
|
17
|
+
section: 'Calcul littéral',
|
|
19
18
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getDoubleDistributivityQuestion, nb),
|
|
20
19
|
};
|
|
21
20
|
function getDoubleDistributivityQuestion() {
|
|
22
|
-
const interval = new intervals_1.Interval(
|
|
21
|
+
const interval = new intervals_1.Interval('[[-10; 10]]').difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)]));
|
|
23
22
|
const affines = affine_1.AffineConstructor.differentRandoms(2, interval, interval);
|
|
24
23
|
const statementTree = new multiplyNode_1.MultiplyNode(affines[0].toTree(), affines[1].toTree());
|
|
25
24
|
const answerTree = affines[0].multiply(affines[1]).toTree();
|
|
26
25
|
return {
|
|
27
|
-
startStatement:
|
|
28
|
-
answer:
|
|
26
|
+
startStatement: statementTree.toTex(),
|
|
27
|
+
answer: answerTree.toTex(),
|
|
29
28
|
};
|
|
30
29
|
}
|
|
31
30
|
exports.getDoubleDistributivityQuestion = getDoubleDistributivityQuestion;
|
|
@@ -5,28 +5,27 @@ const integer_1 = require("../../../numbers/integer/integer");
|
|
|
5
5
|
const affine_1 = require("../../../polynomials/affine");
|
|
6
6
|
const discreteSet_1 = require("../../../sets/discreteSet");
|
|
7
7
|
const intervals_1 = require("../../../sets/intervals/intervals");
|
|
8
|
-
const latexParser_1 = require("../../../tree/parsers/latexParser");
|
|
9
8
|
const numberNode_1 = require("../../../tree/nodes/numbers/numberNode");
|
|
10
9
|
const powerNode_1 = require("../../../tree/nodes/operators/powerNode");
|
|
11
10
|
const getDistinctQuestions_1 = require("../../utils/getDistinctQuestions");
|
|
12
11
|
exports.firstIdentity = {
|
|
13
|
-
id:
|
|
14
|
-
connector:
|
|
15
|
-
instruction:
|
|
16
|
-
label:
|
|
17
|
-
levels: [
|
|
12
|
+
id: 'idRmq1',
|
|
13
|
+
connector: '=',
|
|
14
|
+
instruction: 'Développer et réduire :',
|
|
15
|
+
label: 'Identité remarquable $(a+b)^2$',
|
|
16
|
+
levels: ['3', '2'],
|
|
18
17
|
isSingleStep: false,
|
|
19
|
-
section:
|
|
18
|
+
section: 'Calcul littéral',
|
|
20
19
|
generator: (nb) => (0, getDistinctQuestions_1.getDistinctQuestions)(getFirstIdentityQuestion, nb),
|
|
21
20
|
};
|
|
22
21
|
function getFirstIdentityQuestion() {
|
|
23
|
-
const interval = new intervals_1.Interval(
|
|
22
|
+
const interval = new intervals_1.Interval('[[1; 10]]').difference(new discreteSet_1.DiscreteSet([new integer_1.Integer(0)]));
|
|
24
23
|
const affine = affine_1.AffineConstructor.random(interval, interval);
|
|
25
24
|
const statementTree = new powerNode_1.PowerNode(affine.toTree(), new numberNode_1.NumberNode(2));
|
|
26
25
|
const answerTree = affine.multiply(affine).toTree();
|
|
27
26
|
return {
|
|
28
|
-
startStatement:
|
|
29
|
-
answer:
|
|
27
|
+
startStatement: statementTree.toTex(),
|
|
28
|
+
answer: answerTree.toTex(),
|
|
30
29
|
};
|
|
31
30
|
}
|
|
32
31
|
exports.getFirstIdentityQuestion = getFirstIdentityQuestion;
|