math-exercises 2.2.70 → 2.2.72
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/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
- package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -2
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts +12 -0
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.js +128 -0
- package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.d.ts +10 -0
- package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.js +138 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +2 -0
- package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/distributivity/index.js +2 -0
- package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
- package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -0
- package/lib/exercises/math/geometry/angles/index.js +17 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +11 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -0
- package/lib/exercises/math/geometry/angles/recognizeAngleType.js +272 -0
- package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +1 -1
- package/lib/exercises/math/geometry/index.d.ts +1 -0
- package/lib/exercises/math/geometry/index.d.ts.map +1 -1
- package/lib/exercises/math/geometry/index.js +1 -0
- package/lib/exercises/math/geometry/volumes/parallelepipedVolume.d.ts.map +1 -1
- package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +0 -1
- package/lib/exercises/math/probaStat/stats1var/index.d.ts +6 -0
- package/lib/exercises/math/probaStat/stats1var/index.d.ts.map +1 -1
- package/lib/exercises/math/probaStat/stats1var/index.js +6 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesList.js +93 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/interquartilesTable.js +98 -0
- package/lib/exercises/math/probaStat/stats1var/quartilesList.js +1 -1
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationList.js +131 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.js +144 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts +7 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/varianceList.js +121 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts +8 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts.map +1 -0
- package/lib/exercises/math/probaStat/stats1var/varianceTable.js +133 -0
- package/lib/exercises/vea/sqrtVEA.d.ts +2 -1
- package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -1
- package/lib/exercises/vea/sqrtVEA.js +6 -3
- package/lib/index.d.ts +30 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/math/geometry/angle.d.ts +22 -1
- package/lib/math/geometry/angle.d.ts.map +1 -1
- package/lib/math/geometry/angle.js +138 -1
- package/lib/math/geometry/line.d.ts +2 -0
- package/lib/math/geometry/line.d.ts.map +1 -1
- package/lib/math/geometry/line.js +16 -0
- package/lib/math/geometry/point.d.ts +1 -0
- package/lib/math/geometry/point.d.ts.map +1 -1
- package/lib/math/geometry/point.js +4 -0
- package/lib/math/geometry/vector.d.ts +3 -0
- package/lib/math/geometry/vector.d.ts.map +1 -1
- package/lib/math/geometry/vector.js +9 -0
- package/lib/math/polynomials/generalAffine.d.ts +3 -0
- package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
- package/lib/math/polynomials/generalAffine.js +4 -0
- package/lib/math/utils/quartiles.d.ts +3 -0
- package/lib/math/utils/quartiles.d.ts.map +1 -0
- package/lib/math/utils/quartiles.js +47 -0
- package/lib/math/utils/standardDeviation.d.ts +3 -0
- package/lib/math/utils/standardDeviation.d.ts.map +1 -0
- package/lib/math/utils/standardDeviation.js +13 -0
- package/lib/math/utils/variance.d.ts +1 -0
- package/lib/math/utils/variance.d.ts.map +1 -1
- package/lib/math/utils/variance.js +9 -1
- package/lib/playground.d.ts.map +1 -1
- package/lib/tree/nodes/node.d.ts +4 -2
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/node.js +2 -0
- package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
- package/lib/tree/nodes/nodeConstructor.js +4 -0
- package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/addNode.js +123 -90
- package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/multiplyNode.js +8 -0
- package/lib/tree/nodes/polynomials/monomNode.d.ts +47 -0
- package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -0
- package/lib/tree/nodes/polynomials/monomNode.js +216 -0
- package/lib/tree/parsers/affineParser.js +1 -1
- package/lib/tree/parsers/monomParser.d.ts +2 -2
- package/lib/tree/parsers/monomParser.d.ts.map +1 -1
- package/lib/tree/parsers/monomParser.js +84 -6
- package/lib/tree/parsers/polynomialParser.d.ts +3 -0
- package/lib/tree/parsers/polynomialParser.d.ts.map +1 -0
- package/lib/tree/parsers/polynomialParser.js +50 -0
- package/lib/tree/parsers/powerParser.d.ts +1 -1
- package/lib/tree/parsers/trinomParser.js +1 -1
- package/lib/utils/average.d.ts +1 -0
- package/lib/utils/average.d.ts.map +1 -1
- package/lib/utils/average.js +9 -1
- package/lib/utils/latex/approxOrEqual.d.ts +2 -0
- package/lib/utils/latex/approxOrEqual.d.ts.map +1 -0
- package/lib/utils/latex/approxOrEqual.js +11 -0
- package/lib/utils/variance.d.ts +2 -0
- package/lib/utils/variance.d.ts.map +1 -0
- package/lib/utils/variance.js +12 -0
- package/package.json +1 -1
|
@@ -136,5 +136,9 @@ class Point {
|
|
|
136
136
|
const sin = Math.sin(angle);
|
|
137
137
|
return new Point(this.name, (0, substractNode_1.substract)((0, multiplyNode_1.multiply)(cos, this.x).simplify(), (0, multiplyNode_1.multiply)(sin, this.y).simplify()).simplify(), (0, addNode_1.add)((0, multiplyNode_1.multiply)(sin, this.x).simplify(), (0, multiplyNode_1.multiply)(cos, this.y).simplify()).simplify());
|
|
138
138
|
}
|
|
139
|
+
centralSymetric(center, name = this.name + "'") {
|
|
140
|
+
const vec = vector_1.VectorConstructor.fromPoints(this, center).opposite();
|
|
141
|
+
return vec.getEndPoint(center, name);
|
|
142
|
+
}
|
|
139
143
|
}
|
|
140
144
|
exports.Point = Point;
|
|
@@ -14,8 +14,11 @@ export declare class Vector {
|
|
|
14
14
|
toTexWithCoords(): string;
|
|
15
15
|
toInlineCoordsTex(): string;
|
|
16
16
|
isColinear(v: Vector): boolean;
|
|
17
|
+
hasOppositeOrientation(v: Vector): boolean;
|
|
18
|
+
hasSameOrientation(v: Vector): boolean;
|
|
17
19
|
determinant(v: Vector): AlgebraicNode;
|
|
18
20
|
times(k: AlgebraicNode, name?: string): Vector;
|
|
21
|
+
opposite(): Vector;
|
|
19
22
|
scalarProduct(v: Vector): AlgebraicNode;
|
|
20
23
|
add(v: Vector): Vector;
|
|
21
24
|
getNorm(): AlgebraicNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/vector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAgB/D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,8BAAsB,iBAAiB;IACrC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM;IAOpD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM;CAOtD;AAED,qBAAa,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa;IAO5D,KAAK,IAAI,MAAM;IAIf,eAAe,IAAI,MAAM;IAMzB,iBAAiB,IAAI,MAAM;IAM3B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAK9B,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa;IAIrC,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM;IAOrC,aAAa,CAAC,CAAC,EAAE,MAAM;IAgBvB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAYtB,OAAO,IAAI,aAAa;IAUxB,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM;IAO5C,MAAM,CAAC,CAAC,EAAE,MAAM;IAIhB,YAAY;IAMZ,YAAY;IAOZ,aAAa;CAGd"}
|
|
1
|
+
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../../src/math/geometry/vector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAgB/D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,8BAAsB,iBAAiB;IACrC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM;IAOpD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM;CAOtD;AAED,qBAAa,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;gBACL,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa;IAO5D,KAAK,IAAI,MAAM;IAIf,eAAe,IAAI,MAAM;IAMzB,iBAAiB,IAAI,MAAM;IAM3B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAK9B,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAI1C,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAItC,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa;IAIrC,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM;IAOrC,QAAQ;IAGR,aAAa,CAAC,CAAC,EAAE,MAAM;IAgBvB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAYtB,OAAO,IAAI,aAAa;IAUxB,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM;IAO5C,MAAM,CAAC,CAAC,EAAE,MAAM;IAIhB,YAAY;IAMZ,YAAY;IAOZ,aAAa;CAGd"}
|
|
@@ -44,12 +44,21 @@ class Vector {
|
|
|
44
44
|
const ev = det.evaluate();
|
|
45
45
|
return Math.abs(ev) < 0.000001;
|
|
46
46
|
}
|
|
47
|
+
hasOppositeOrientation(v) {
|
|
48
|
+
return this.isColinear(v) && this.scalarProduct(v).evaluate() < 0;
|
|
49
|
+
}
|
|
50
|
+
hasSameOrientation(v) {
|
|
51
|
+
return this.isColinear(v) && this.scalarProduct(v).evaluate() > 0;
|
|
52
|
+
}
|
|
47
53
|
determinant(v) {
|
|
48
54
|
return (0, substractNode_1.substract)((0, multiplyNode_1.multiply)(this.x, v.y), (0, multiplyNode_1.multiply)(this.y, v.x)).simplify();
|
|
49
55
|
}
|
|
50
56
|
times(k, name) {
|
|
51
57
|
return new Vector(name ?? "v", new multiplyNode_1.MultiplyNode(this.x, k).simplify(), new multiplyNode_1.MultiplyNode(this.y, k).simplify());
|
|
52
58
|
}
|
|
59
|
+
opposite() {
|
|
60
|
+
return this.times((-1).toTree());
|
|
61
|
+
}
|
|
53
62
|
scalarProduct(v) {
|
|
54
63
|
// if (
|
|
55
64
|
// [this.x.type, this.y.type, v.x.type, v.y.type].some(
|
|
@@ -2,6 +2,9 @@ import { AlgebraicNode } from "../../tree/nodes/algebraicNode";
|
|
|
2
2
|
import { NodeIdentifiers } from "../../tree/nodes/nodeConstructor";
|
|
3
3
|
export declare abstract class GeneralAffineConstructor {
|
|
4
4
|
static fromIdentifiers(identifiers: GeneralAffineIdentifiers): GeneralAffine;
|
|
5
|
+
static randomInts({ allowBNull }: {
|
|
6
|
+
allowBNull?: boolean | undefined;
|
|
7
|
+
}, variable?: string): GeneralAffine;
|
|
5
8
|
}
|
|
6
9
|
export type GeneralAffineIdentifiers = {
|
|
7
10
|
id: "affine";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generalAffine.d.ts","sourceRoot":"","sources":["../../../src/math/polynomials/generalAffine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAEL,eAAe,EAEhB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"generalAffine.d.ts","sourceRoot":"","sources":["../../../src/math/polynomials/generalAffine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAEL,eAAe,EAEhB,MAAM,kCAAkC,CAAC;AAS1C,8BAAsB,wBAAwB;IAC5C,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,wBAAwB;IAM5D,MAAM,CAAC,UAAU,CAAC,EAAE,UAAiB,EAAE;;KAAA,EAAE,QAAQ,SAAM;CAOxD;AACD,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,QAAQ,CAAC;IACb,CAAC,EAAE,eAAe,CAAC;IACnB,CAAC,EAAE,eAAe,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,qBAAa,aAAa;IACxB,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;gBAGf,CAAC,EAAE,MAAM,GAAG,aAAa,EACzB,CAAC,EAAE,MAAM,GAAG,aAAa,EACzB,QAAQ,GAAE,MAAY;IAUxB,aAAa,IAAI,wBAAwB;IAQzC,OAAO,IAAI,aAAa;IAIxB,MAAM;IAMN,UAAU,CAAC,GAAG,EAAE,aAAa;IAI7B,QAAQ;CAMT"}
|
|
@@ -7,10 +7,14 @@ const addNode_1 = require("../../tree/nodes/operators/addNode");
|
|
|
7
7
|
const fractionNode_1 = require("../../tree/nodes/operators/fractionNode");
|
|
8
8
|
const multiplyNode_1 = require("../../tree/nodes/operators/multiplyNode");
|
|
9
9
|
const substractNode_1 = require("../../tree/nodes/operators/substractNode");
|
|
10
|
+
const randint_1 = require("../utils/random/randint");
|
|
10
11
|
class GeneralAffineConstructor {
|
|
11
12
|
static fromIdentifiers(identifiers) {
|
|
12
13
|
return new GeneralAffine((0, nodeConstructor_1.reifyAlgebraic)(identifiers.a), (0, nodeConstructor_1.reifyAlgebraic)(identifiers.b));
|
|
13
14
|
}
|
|
15
|
+
static randomInts({ allowBNull = true }, variable = "x") {
|
|
16
|
+
return new GeneralAffine((0, randint_1.randint)(-10, 11, [0]), (0, randint_1.randint)(-10, 11, allowBNull ? [] : [0]), variable);
|
|
17
|
+
}
|
|
14
18
|
}
|
|
15
19
|
exports.GeneralAffineConstructor = GeneralAffineConstructor;
|
|
16
20
|
class GeneralAffine {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quartiles.d.ts","sourceRoot":"","sources":["../../../src/math/utils/quartiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,WAAY,MAAM,EAAE,cAAc,MAAM,EAAE,WAkBnE,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,EAAE,cAAc,MAAM,EAAE,WAkBnE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.thirdQuartile = exports.firstQuartile = void 0;
|
|
4
|
+
const firstQuartile = (values, effectifs) => {
|
|
5
|
+
if (!values.length)
|
|
6
|
+
throw Error("Malformed data in firstQuartile");
|
|
7
|
+
if (!effectifs?.length) {
|
|
8
|
+
const N = values.length;
|
|
9
|
+
const rank = Math.ceil(N / 4);
|
|
10
|
+
return values[rank - 1];
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
const N = effectifs.reduce((acc, curr) => acc + curr, 0);
|
|
14
|
+
const rank = Math.ceil(N / 4);
|
|
15
|
+
let s = 0;
|
|
16
|
+
for (let i = 0; i < effectifs.length; i++) {
|
|
17
|
+
s += effectifs[i];
|
|
18
|
+
if (rank <= s) {
|
|
19
|
+
return values[i];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return values[values.length - 1];
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.firstQuartile = firstQuartile;
|
|
26
|
+
const thirdQuartile = (values, effectifs) => {
|
|
27
|
+
if (!values.length)
|
|
28
|
+
throw Error("Malformed data in thirdQuartile");
|
|
29
|
+
if (!effectifs?.length) {
|
|
30
|
+
const N = values.length;
|
|
31
|
+
const rank = Math.ceil((3 * N) / 4);
|
|
32
|
+
return values[rank - 1];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const N = effectifs.reduce((acc, curr) => acc + curr, 0);
|
|
36
|
+
const rank = Math.ceil((3 * N) / 4);
|
|
37
|
+
let s = 0;
|
|
38
|
+
for (let i = 0; i < effectifs.length; i++) {
|
|
39
|
+
s += effectifs[i];
|
|
40
|
+
if (rank <= s) {
|
|
41
|
+
return values[i];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return values[values.length - 1];
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.thirdQuartile = thirdQuartile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardDeviation.d.ts","sourceRoot":"","sources":["../../../src/math/utils/standardDeviation.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,WAAY,MAAM,EAAE,WAEjD,CAAC;AACF,eAAO,MAAM,8BAA8B,WACjC,MAAM,EAAE,aACL,MAAM,EAAE,WAGpB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.standardDeviationWithEffectifs = exports.standardDeviation = void 0;
|
|
4
|
+
const average_1 = require("../../utils/average");
|
|
5
|
+
const variance_1 = require("./variance");
|
|
6
|
+
const standardDeviation = (values) => {
|
|
7
|
+
return Math.sqrt((0, variance_1.variance)(values, (0, average_1.average)(values)));
|
|
8
|
+
};
|
|
9
|
+
exports.standardDeviation = standardDeviation;
|
|
10
|
+
const standardDeviationWithEffectifs = (values, effectifs) => {
|
|
11
|
+
return Math.sqrt((0, variance_1.varianceWithEffectifs)(values, effectifs));
|
|
12
|
+
};
|
|
13
|
+
exports.standardDeviationWithEffectifs = standardDeviationWithEffectifs;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AlgebraicNode } from "../../tree/nodes/algebraicNode";
|
|
2
2
|
export declare function varianceAsNode(xValues: number[], avgX: AlgebraicNode): AlgebraicNode;
|
|
3
3
|
export declare function variance(xValues: number[], avgX: number): number;
|
|
4
|
+
export declare const varianceWithEffectifs: (values: number[], effectifs: number[]) => number;
|
|
4
5
|
//# sourceMappingURL=variance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variance.d.ts","sourceRoot":"","sources":["../../../src/math/utils/variance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAO/D,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,aAAa,GAClB,aAAa,CAgBf;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhE"}
|
|
1
|
+
{"version":3,"file":"variance.d.ts","sourceRoot":"","sources":["../../../src/math/utils/variance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAO/D,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,aAAa,GAClB,aAAa,CAgBf;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,eAAO,MAAM,qBAAqB,WACxB,MAAM,EAAE,aACL,MAAM,EAAE,WAapB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.variance = exports.varianceAsNode = void 0;
|
|
3
|
+
exports.varianceWithEffectifs = exports.variance = exports.varianceAsNode = void 0;
|
|
4
4
|
const numberNode_1 = require("../../tree/nodes/numbers/numberNode");
|
|
5
5
|
const addNode_1 = require("../../tree/nodes/operators/addNode");
|
|
6
6
|
const fractionNode_1 = require("../../tree/nodes/operators/fractionNode");
|
|
@@ -25,3 +25,11 @@ function variance(xValues, avgX) {
|
|
|
25
25
|
return variance / xValues.length;
|
|
26
26
|
}
|
|
27
27
|
exports.variance = variance;
|
|
28
|
+
const varianceWithEffectifs = (values, effectifs) => {
|
|
29
|
+
if (!values.length || !effectifs.length || values.length !== effectifs.length)
|
|
30
|
+
throw Error("Malformed data in variance");
|
|
31
|
+
const N = effectifs.reduce((acc, curr) => acc + curr, 0);
|
|
32
|
+
const avg = values.reduce((acc, value, index) => acc + value * effectifs[index], 0) / N;
|
|
33
|
+
return (values.reduce((acc, value, index) => acc + Math.pow(value - avg, 2) * effectifs[index], 0) / N);
|
|
34
|
+
};
|
|
35
|
+
exports.varianceWithEffectifs = varianceWithEffectifs;
|
package/lib/playground.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAqDA,eAAO,MAAM,UAAU,YAAW,CAAC"}
|
package/lib/tree/nodes/node.d.ts
CHANGED
|
@@ -11,7 +11,8 @@ export declare enum NodeType {
|
|
|
11
11
|
belongs = 9,
|
|
12
12
|
vector = 10,
|
|
13
13
|
set = 11,
|
|
14
|
-
trinom = 12
|
|
14
|
+
trinom = 12,
|
|
15
|
+
monom = 13
|
|
15
16
|
}
|
|
16
17
|
export type NodeOptions = {
|
|
17
18
|
forceTimesSign?: boolean;
|
|
@@ -80,7 +81,8 @@ export declare enum NodeIds {
|
|
|
80
81
|
inequation = 36,
|
|
81
82
|
inequationSolution = 37,
|
|
82
83
|
binomialCoefficient = 38,
|
|
83
|
-
trinom = 39
|
|
84
|
+
trinom = 39,
|
|
85
|
+
monom = 40
|
|
84
86
|
}
|
|
85
87
|
export interface Node {
|
|
86
88
|
type: NodeType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/node.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,UAAU,IAAA;IACV,KAAK,IAAA;IACL,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,MAAM,KAAA;IACN,GAAG,KAAA;IACH,MAAM,KAAA;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/node.ts"],"names":[],"mappings":"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"}
|
package/lib/tree/nodes/node.js
CHANGED
|
@@ -16,6 +16,7 @@ var NodeType;
|
|
|
16
16
|
NodeType[NodeType["vector"] = 10] = "vector";
|
|
17
17
|
NodeType[NodeType["set"] = 11] = "set";
|
|
18
18
|
NodeType[NodeType["trinom"] = 12] = "trinom";
|
|
19
|
+
NodeType[NodeType["monom"] = 13] = "monom";
|
|
19
20
|
})(NodeType || (exports.NodeType = NodeType = {}));
|
|
20
21
|
var NodeIds;
|
|
21
22
|
(function (NodeIds) {
|
|
@@ -59,4 +60,5 @@ var NodeIds;
|
|
|
59
60
|
NodeIds[NodeIds["inequationSolution"] = 37] = "inequationSolution";
|
|
60
61
|
NodeIds[NodeIds["binomialCoefficient"] = 38] = "binomialCoefficient";
|
|
61
62
|
NodeIds[NodeIds["trinom"] = 39] = "trinom";
|
|
63
|
+
NodeIds[NodeIds["monom"] = 40] = "monom";
|
|
62
64
|
})(NodeIds || (exports.NodeIds = NodeIds = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeConstructor.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/nodeConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAwBhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"nodeConstructor.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/nodeConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAwBhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAoBvC,eAAO,MAAM,cAAc,gBAAiB,eAAe,kBACI,CAAC;AAChE,eAAO,MAAM,SAAS,gBAAiB,eAAe,SACR,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACpE,8BAAsB,eAAe;IACnC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;CAoS3D"}
|
|
@@ -38,6 +38,7 @@ const limitNode_1 = require("./operators/limitNode");
|
|
|
38
38
|
const multiplyNode_1 = require("./operators/multiplyNode");
|
|
39
39
|
const powerNode_1 = require("./operators/powerNode");
|
|
40
40
|
const substractNode_1 = require("./operators/substractNode");
|
|
41
|
+
const monomNode_1 = require("./polynomials/monomNode");
|
|
41
42
|
const belongsNode_1 = require("./sets/belongsNode");
|
|
42
43
|
const discreteSetNode_1 = require("./sets/discreteSetNode");
|
|
43
44
|
const intervalNode_1 = require("./sets/intervalNode");
|
|
@@ -173,6 +174,9 @@ class NodeConstructor {
|
|
|
173
174
|
case node_1.NodeIds.trinom: {
|
|
174
175
|
return new trinomNode_1.TrinomNode(NodeConstructor.fromIdentifiers(identifiers.a), NodeConstructor.fromIdentifiers(identifiers.b), NodeConstructor.fromIdentifiers(identifiers.c));
|
|
175
176
|
}
|
|
177
|
+
case node_1.NodeIds.monom: {
|
|
178
|
+
return new monomNode_1.MonomNode(NodeConstructor.fromIdentifiers(identifiers.a), identifiers.degree, identifiers.opts);
|
|
179
|
+
}
|
|
176
180
|
case node_1.NodeIds.binomialCoefficient: {
|
|
177
181
|
return new binomialCoefficientNode_1.BinomialCoefficientNode(NodeConstructor.fromIdentifiers(identifiers.leftChild), NodeConstructor.fromIdentifiers(identifiers.rightChild));
|
|
178
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/addNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"addNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/addNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYlE,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AAED,eAAO,MAAM,GAAG,MACX,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,YAOnC,CAAC;AAEF,qBAAa,OAAQ,YAAW,uBAAuB;IACrD,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IASpB,OAAO,aAGL;IAEF,YAAY,IAAI,MAAM;IAItB,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAoCtD,SAAS,IAAI,MAAM,EAAE;IAIrB,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAK5C,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAerC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAmI/C,aAAa;;;;;;;;;IAOb,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAUpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAMxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAMxD"}
|
|
@@ -15,6 +15,7 @@ const multiplyNode_1 = require("./multiplyNode");
|
|
|
15
15
|
const fractionNode_1 = require("./fractionNode");
|
|
16
16
|
const colorize_1 = require("../../../utils/latex/colorize");
|
|
17
17
|
const round_1 = require("../../../math/utils/round");
|
|
18
|
+
const monomNode_1 = require("../polynomials/monomNode");
|
|
18
19
|
function isAddNode(a) {
|
|
19
20
|
return (0, operatorNode_1.isOperatorNode)(a) && a.id === operatorNode_1.OperatorIds.add;
|
|
20
21
|
}
|
|
@@ -130,96 +131,17 @@ class AddNode {
|
|
|
130
131
|
if (externals.length === 1)
|
|
131
132
|
return externals[0];
|
|
132
133
|
const simplifyExternalNodes = (a, b) => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
(0, fractionNode_1.isFractionNode)(b)) {
|
|
145
|
-
//-(c/d) + e/f = -cf+ed / df
|
|
146
|
-
const c = a.child.leftChild;
|
|
147
|
-
const d = a.child.rightChild;
|
|
148
|
-
const e = b.leftChild;
|
|
149
|
-
const f = b.rightChild;
|
|
150
|
-
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(c), f), new multiplyNode_1.MultiplyNode(e, d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
151
|
-
}
|
|
152
|
-
if (!opts?.towardsDistribute &&
|
|
153
|
-
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
154
|
-
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
155
|
-
(0, fractionNode_1.isFractionNode)(a)) {
|
|
156
|
-
//(c/d) + (-e/f) = cf-ed / df
|
|
157
|
-
const c = a.leftChild;
|
|
158
|
-
const d = a.rightChild;
|
|
159
|
-
const e = b.child.leftChild;
|
|
160
|
-
const f = b.child.rightChild;
|
|
161
|
-
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(c, f), new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(e), d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
162
|
-
}
|
|
163
|
-
if (!opts?.towardsDistribute &&
|
|
164
|
-
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
165
|
-
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
166
|
-
(0, oppositeNode_1.isOppositeNode)(a) &&
|
|
167
|
-
(0, fractionNode_1.isFractionNode)(a.child)) {
|
|
168
|
-
//-(c/d) + (-e/f) = -cf-ed / df
|
|
169
|
-
const c = a.child.leftChild;
|
|
170
|
-
const d = a.child.rightChild;
|
|
171
|
-
const e = b.child.leftChild;
|
|
172
|
-
const f = b.child.rightChild;
|
|
173
|
-
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(c), f), new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(e), d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
174
|
-
}
|
|
175
|
-
if (!opts?.towardsDistribute && (0, fractionNode_1.isFractionNode)(a)) {
|
|
176
|
-
//c/d + b
|
|
177
|
-
const c = a.leftChild;
|
|
178
|
-
const d = a.rightChild;
|
|
179
|
-
return new fractionNode_1.FractionNode(new AddNode(c, new multiplyNode_1.MultiplyNode(d, b)), d).simplify(opts);
|
|
180
|
-
}
|
|
181
|
-
if (!opts?.towardsDistribute &&
|
|
182
|
-
(0, oppositeNode_1.isOppositeNode)(a) &&
|
|
183
|
-
(0, fractionNode_1.isFractionNode)(a.child)) {
|
|
184
|
-
//-(c/d) + b = (-c+bd)/d
|
|
185
|
-
const c = a.child.leftChild;
|
|
186
|
-
const d = a.child.rightChild;
|
|
187
|
-
return new fractionNode_1.FractionNode(new AddNode(new oppositeNode_1.OppositeNode(c), new multiplyNode_1.MultiplyNode(d, b)), d).simplify(opts);
|
|
188
|
-
}
|
|
189
|
-
if (!opts?.towardsDistribute &&
|
|
190
|
-
(0, fractionNode_1.isFractionNode)(b) &&
|
|
191
|
-
!opts?.forceDistributeFractions) {
|
|
192
|
-
//a+c/d
|
|
193
|
-
const c = b.leftChild;
|
|
194
|
-
const d = b.rightChild;
|
|
195
|
-
return new fractionNode_1.FractionNode(new AddNode(c, new multiplyNode_1.MultiplyNode(d, a)), d).simplify(opts);
|
|
196
|
-
}
|
|
197
|
-
if (!opts?.towardsDistribute &&
|
|
198
|
-
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
199
|
-
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
200
|
-
!opts?.forceDistributeFractions) {
|
|
201
|
-
//a+-(c/d) = (da-c)/d
|
|
202
|
-
const c = b.child.leftChild;
|
|
203
|
-
const d = b.child.rightChild;
|
|
204
|
-
return new fractionNode_1.FractionNode(new AddNode(new oppositeNode_1.OppositeNode(c), new multiplyNode_1.MultiplyNode(d, a)), d).simplify(opts);
|
|
205
|
-
}
|
|
206
|
-
if ((0, numberNode_1.isNumberNode)(a) && (0, numberNode_1.isNumberNode)(b)) {
|
|
207
|
-
//geogebra rounds to 12, il faut mettre <12
|
|
208
|
-
return new numberNode_1.NumberNode((0, round_1.round)(a.value + b.value, 10));
|
|
209
|
-
}
|
|
210
|
-
if ((0, oppositeNode_1.isOppositeNode)(a) && (0, numberNode_1.isNumberNode)(a.child) && (0, numberNode_1.isNumberNode)(b)) {
|
|
211
|
-
return new numberNode_1.NumberNode(-a.child.value + b.value);
|
|
212
|
-
}
|
|
213
|
-
if ((0, oppositeNode_1.isOppositeNode)(b) && (0, numberNode_1.isNumberNode)(b.child) && (0, numberNode_1.isNumberNode)(a)) {
|
|
214
|
-
return new numberNode_1.NumberNode(-b.child.value + a.value);
|
|
215
|
-
}
|
|
216
|
-
if ((0, oppositeNode_1.isOppositeNode)(a) &&
|
|
217
|
-
(0, numberNode_1.isNumberNode)(a.child) &&
|
|
218
|
-
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
219
|
-
(0, numberNode_1.isNumberNode)(b.child)) {
|
|
220
|
-
return new numberNode_1.NumberNode(a.child.value + b.child.value);
|
|
221
|
-
}
|
|
222
|
-
//gérer opposites, fractions
|
|
134
|
+
const fracSimplify = addSimplifyFrac(a, b, opts);
|
|
135
|
+
if (fracSimplify)
|
|
136
|
+
return fracSimplify;
|
|
137
|
+
const nbSimplify = addSimplifyNumbers(a, b, opts);
|
|
138
|
+
if (nbSimplify)
|
|
139
|
+
return nbSimplify;
|
|
140
|
+
const monomSimplify = addSimplifyMonoms(a, b, opts);
|
|
141
|
+
if (monomSimplify)
|
|
142
|
+
return monomSimplify;
|
|
143
|
+
//TODO gérer le reste
|
|
144
|
+
//la suite s'occupe des factorisations
|
|
223
145
|
if (opts?.forbidFactorize)
|
|
224
146
|
return null;
|
|
225
147
|
const aSubExternals = [];
|
|
@@ -338,3 +260,114 @@ class AddNode {
|
|
|
338
260
|
}
|
|
339
261
|
}
|
|
340
262
|
exports.AddNode = AddNode;
|
|
263
|
+
const addSimplifyFrac = (a, b, opts) => {
|
|
264
|
+
if (!opts?.towardsDistribute && (0, fractionNode_1.isFractionNode)(a) && (0, fractionNode_1.isFractionNode)(b)) {
|
|
265
|
+
//c/d + e/f = cf+ed / df
|
|
266
|
+
const c = a.leftChild;
|
|
267
|
+
const d = a.rightChild;
|
|
268
|
+
const e = b.leftChild;
|
|
269
|
+
const f = b.rightChild;
|
|
270
|
+
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(c, f), new multiplyNode_1.MultiplyNode(e, d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
271
|
+
}
|
|
272
|
+
if (!opts?.towardsDistribute &&
|
|
273
|
+
(0, oppositeNode_1.isOppositeNode)(a) &&
|
|
274
|
+
(0, fractionNode_1.isFractionNode)(a.child) &&
|
|
275
|
+
(0, fractionNode_1.isFractionNode)(b)) {
|
|
276
|
+
//-(c/d) + e/f = -cf+ed / df
|
|
277
|
+
const c = a.child.leftChild;
|
|
278
|
+
const d = a.child.rightChild;
|
|
279
|
+
const e = b.leftChild;
|
|
280
|
+
const f = b.rightChild;
|
|
281
|
+
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(c), f), new multiplyNode_1.MultiplyNode(e, d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
282
|
+
}
|
|
283
|
+
if (!opts?.towardsDistribute &&
|
|
284
|
+
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
285
|
+
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
286
|
+
(0, fractionNode_1.isFractionNode)(a)) {
|
|
287
|
+
//(c/d) + (-e/f) = cf-ed / df
|
|
288
|
+
const c = a.leftChild;
|
|
289
|
+
const d = a.rightChild;
|
|
290
|
+
const e = b.child.leftChild;
|
|
291
|
+
const f = b.child.rightChild;
|
|
292
|
+
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(c, f), new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(e), d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
293
|
+
}
|
|
294
|
+
if (!opts?.towardsDistribute &&
|
|
295
|
+
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
296
|
+
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
297
|
+
(0, oppositeNode_1.isOppositeNode)(a) &&
|
|
298
|
+
(0, fractionNode_1.isFractionNode)(a.child)) {
|
|
299
|
+
//-(c/d) + (-e/f) = -cf-ed / df
|
|
300
|
+
const c = a.child.leftChild;
|
|
301
|
+
const d = a.child.rightChild;
|
|
302
|
+
const e = b.child.leftChild;
|
|
303
|
+
const f = b.child.rightChild;
|
|
304
|
+
return new fractionNode_1.FractionNode(new AddNode(new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(c), f), new multiplyNode_1.MultiplyNode(new oppositeNode_1.OppositeNode(e), d)), new multiplyNode_1.MultiplyNode(d, f)).simplify(opts);
|
|
305
|
+
}
|
|
306
|
+
if (!opts?.towardsDistribute && (0, fractionNode_1.isFractionNode)(a)) {
|
|
307
|
+
//c/d + b
|
|
308
|
+
const c = a.leftChild;
|
|
309
|
+
const d = a.rightChild;
|
|
310
|
+
return new fractionNode_1.FractionNode(new AddNode(c, new multiplyNode_1.MultiplyNode(d, b)), d).simplify(opts);
|
|
311
|
+
}
|
|
312
|
+
if (!opts?.towardsDistribute &&
|
|
313
|
+
(0, oppositeNode_1.isOppositeNode)(a) &&
|
|
314
|
+
(0, fractionNode_1.isFractionNode)(a.child)) {
|
|
315
|
+
//-(c/d) + b = (-c+bd)/d
|
|
316
|
+
const c = a.child.leftChild;
|
|
317
|
+
const d = a.child.rightChild;
|
|
318
|
+
return new fractionNode_1.FractionNode(new AddNode(new oppositeNode_1.OppositeNode(c), new multiplyNode_1.MultiplyNode(d, b)), d).simplify(opts);
|
|
319
|
+
}
|
|
320
|
+
if (!opts?.towardsDistribute &&
|
|
321
|
+
(0, fractionNode_1.isFractionNode)(b) &&
|
|
322
|
+
!opts?.forceDistributeFractions) {
|
|
323
|
+
//a+c/d
|
|
324
|
+
const c = b.leftChild;
|
|
325
|
+
const d = b.rightChild;
|
|
326
|
+
return new fractionNode_1.FractionNode(new AddNode(c, new multiplyNode_1.MultiplyNode(d, a)), d).simplify(opts);
|
|
327
|
+
}
|
|
328
|
+
if (!opts?.towardsDistribute &&
|
|
329
|
+
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
330
|
+
(0, fractionNode_1.isFractionNode)(b.child) &&
|
|
331
|
+
!opts?.forceDistributeFractions) {
|
|
332
|
+
//a+-(c/d) = (da-c)/d
|
|
333
|
+
const c = b.child.leftChild;
|
|
334
|
+
const d = b.child.rightChild;
|
|
335
|
+
return new fractionNode_1.FractionNode(new AddNode(new oppositeNode_1.OppositeNode(c), new multiplyNode_1.MultiplyNode(d, a)), d).simplify(opts);
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
const addSimplifyNumbers = (a, b, opts) => {
|
|
339
|
+
if ((0, numberNode_1.isNumberNode)(a) && (0, numberNode_1.isNumberNode)(b)) {
|
|
340
|
+
//geogebra rounds to 12, il faut mettre <12
|
|
341
|
+
return new numberNode_1.NumberNode((0, round_1.round)(a.value + b.value, 10));
|
|
342
|
+
}
|
|
343
|
+
if ((0, oppositeNode_1.isOppositeNode)(a) && (0, numberNode_1.isNumberNode)(a.child) && (0, numberNode_1.isNumberNode)(b)) {
|
|
344
|
+
return new numberNode_1.NumberNode(-a.child.value + b.value);
|
|
345
|
+
}
|
|
346
|
+
if ((0, oppositeNode_1.isOppositeNode)(b) && (0, numberNode_1.isNumberNode)(b.child) && (0, numberNode_1.isNumberNode)(a)) {
|
|
347
|
+
return new numberNode_1.NumberNode(-b.child.value + a.value);
|
|
348
|
+
}
|
|
349
|
+
if ((0, oppositeNode_1.isOppositeNode)(a) &&
|
|
350
|
+
(0, numberNode_1.isNumberNode)(a.child) &&
|
|
351
|
+
(0, oppositeNode_1.isOppositeNode)(b) &&
|
|
352
|
+
(0, numberNode_1.isNumberNode)(b.child)) {
|
|
353
|
+
return new numberNode_1.NumberNode(a.child.value + b.child.value);
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
const addSimplifyMonoms = (a, b, opts) => {
|
|
357
|
+
const aMonom = (0, monomNode_1.parseToMonomNode)(a);
|
|
358
|
+
if (!aMonom)
|
|
359
|
+
return;
|
|
360
|
+
const bMonom = (0, monomNode_1.parseToMonomNode)(b);
|
|
361
|
+
if (!bMonom)
|
|
362
|
+
return;
|
|
363
|
+
if (aMonom.degree === bMonom.degree) {
|
|
364
|
+
if (aMonom.variable !== bMonom.variable)
|
|
365
|
+
return;
|
|
366
|
+
const sum = (0, exports.add)(aMonom.a, bMonom.a).simplify(opts);
|
|
367
|
+
if (sum.evaluate() === 0)
|
|
368
|
+
return new numberNode_1.NumberNode(0);
|
|
369
|
+
return new monomNode_1.MonomNode(sum, aMonom.degree, {
|
|
370
|
+
variable: aMonom.variable,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiplyNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/multiplyNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AAYxB,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAS1B,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,QAAQ,MAChB,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AACF,eAAO,MAAM,iBAAiB,QAAS,aAAa,EAAE,SAWrD,CAAC;AACF,qBAAa,YAAa,YAAW,uBAAuB;IAC1D,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,OAAO,aAGL;IAEF,YAAY,IAAI,MAAM;IAItB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAwErC,SAAS;IAkDT,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE;IAyFrD,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,aAAa;;;;;;;;;IAYb,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAItC,IAAI;IAGJ,cAAc;IACd,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;
|
|
1
|
+
{"version":3,"file":"multiplyNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/multiplyNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AAYxB,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAS1B,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,QAAQ,MAChB,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AACF,eAAO,MAAM,iBAAiB,QAAS,aAAa,EAAE,SAWrD,CAAC;AACF,qBAAa,YAAa,YAAW,uBAAuB;IAC1D,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,IAAI,CAAC,EAAE,WAAW;IAUpB,OAAO,aAGL;IAEF,YAAY,IAAI,MAAM;IAItB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAwErC,SAAS;IAkDT,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE;IAyFrD,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,aAAa;;;;;;;;;IAYb,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAItC,IAAI;IAGJ,cAAc;IACd,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAiK/C,MAAM,CAAC,IAAI,EAAE,aAAa;IAU1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAQxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAMxD"}
|
|
@@ -281,6 +281,8 @@ class MultiplyNode {
|
|
|
281
281
|
return new numberNode_1.NumberNode(1);
|
|
282
282
|
if (externals.length === 1)
|
|
283
283
|
return externals[0];
|
|
284
|
+
//tout ca est un peu bordelique
|
|
285
|
+
//forceDistributeFractions sert à avoir par exemple (a/b)*x plutot que (ax/b)
|
|
284
286
|
if (!opts?.forceDistributeFractions)
|
|
285
287
|
if (externals.some((node) => (0, fractionNode_1.isFractionNode)(node))) {
|
|
286
288
|
//s'il y a une fraction on transforme en fracNode
|
|
@@ -323,6 +325,12 @@ class MultiplyNode {
|
|
|
323
325
|
a.value === b.leftChild.value) {
|
|
324
326
|
return new powerNode_1.PowerNode(b.leftChild, new addNode_1.AddNode(b.rightChild, (1).toTree())).simplify();
|
|
325
327
|
}
|
|
328
|
+
if ((0, fractionNode_1.isFractionNode)(a) &&
|
|
329
|
+
a.isNumeric &&
|
|
330
|
+
(0, fractionNode_1.isFractionNode)(b) &&
|
|
331
|
+
b.isNumeric) {
|
|
332
|
+
return new fractionNode_1.FractionNode((0, exports.multiply)(a.leftChild, b.leftChild), (0, exports.multiply)(a.rightChild, b.rightChild)).simplify(opts);
|
|
333
|
+
}
|
|
326
334
|
let powerSimplified = powerSimplify(a, b, opts);
|
|
327
335
|
if (powerSimplified)
|
|
328
336
|
return powerSimplified;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AlgebraicNode, SimplifyOptions } from "../algebraicNode";
|
|
2
|
+
import { Node, NodeIds, NodeOptions, NodeType } from "../node";
|
|
3
|
+
export declare const monom: (a: AlgebraicNode | number | string, degree: number, opts?: MonomNodeOptions) => MonomNode;
|
|
4
|
+
export declare function isMonomNode(a: Node): a is MonomNode;
|
|
5
|
+
export declare function parseToMonomNode(a: Node, variable?: string): false | MonomNode;
|
|
6
|
+
type MonomNodeOptions = {
|
|
7
|
+
variable: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* un monom est une expression du type ax^degree
|
|
11
|
+
* avec a réel !==0 et degree > 0 (convention)
|
|
12
|
+
*/
|
|
13
|
+
export declare class MonomNode implements AlgebraicNode {
|
|
14
|
+
a: AlgebraicNode;
|
|
15
|
+
degree: number;
|
|
16
|
+
isNumeric: boolean;
|
|
17
|
+
variable: string;
|
|
18
|
+
type: NodeType;
|
|
19
|
+
constructor(a: AlgebraicNode | number, degree: number, opts?: MonomNodeOptions);
|
|
20
|
+
derivative(varName?: string | undefined): AlgebraicNode;
|
|
21
|
+
equals(node: AlgebraicNode): boolean;
|
|
22
|
+
evaluate(vars?: Record<string, number>): number;
|
|
23
|
+
toDetailedEvaluation(vars: Record<string, AlgebraicNode>): AlgebraicNode;
|
|
24
|
+
simplify(opts?: SimplifyOptions): AlgebraicNode;
|
|
25
|
+
toAllValidTexs(opts?: NodeOptions | undefined): string[];
|
|
26
|
+
toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[];
|
|
27
|
+
toMathString(): string;
|
|
28
|
+
toTree(): AlgebraicNode;
|
|
29
|
+
toTex(): string;
|
|
30
|
+
toIdentifiers(): {
|
|
31
|
+
id: NodeIds;
|
|
32
|
+
a: {
|
|
33
|
+
id: NodeIds;
|
|
34
|
+
} & Record<string, any>;
|
|
35
|
+
degree: number;
|
|
36
|
+
opts: {
|
|
37
|
+
variable: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare const parseToMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: {
|
|
42
|
+
variable: string;
|
|
43
|
+
maxDegree: undefined;
|
|
44
|
+
minDegree: number;
|
|
45
|
+
}) => false | MonomNode;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=monomNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO/D,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,UAC1B,MAAM,SACP,gBAAgB,cAMxB,CAAC;AACF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAM,qBAGvD;AACD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAO7C;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;IAC7C,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAkB;gBAG9B,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB;IAUzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAMvC,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAG/B,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAG7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAGhD,YAAY;IAIZ,MAAM;IAMN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SACjB,aAAa;;;;uBAyIpB,CAAC"}
|