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.
Files changed (106) hide show
  1. package/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
  2. package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -2
  3. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts +12 -0
  4. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts.map +1 -0
  5. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.js +128 -0
  6. package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.d.ts +10 -0
  7. package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.d.ts.map +1 -0
  8. package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.js +138 -0
  9. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +2 -0
  10. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
  11. package/lib/exercises/math/calculLitteral/distributivity/index.js +2 -0
  12. package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
  13. package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -0
  14. package/lib/exercises/math/geometry/angles/index.js +17 -0
  15. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +11 -0
  16. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -0
  17. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +272 -0
  18. package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +1 -1
  19. package/lib/exercises/math/geometry/index.d.ts +1 -0
  20. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  21. package/lib/exercises/math/geometry/index.js +1 -0
  22. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.d.ts.map +1 -1
  23. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +0 -1
  24. package/lib/exercises/math/probaStat/stats1var/index.d.ts +6 -0
  25. package/lib/exercises/math/probaStat/stats1var/index.d.ts.map +1 -1
  26. package/lib/exercises/math/probaStat/stats1var/index.js +6 -0
  27. package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts +7 -0
  28. package/lib/exercises/math/probaStat/stats1var/interquartilesList.d.ts.map +1 -0
  29. package/lib/exercises/math/probaStat/stats1var/interquartilesList.js +93 -0
  30. package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts +8 -0
  31. package/lib/exercises/math/probaStat/stats1var/interquartilesTable.d.ts.map +1 -0
  32. package/lib/exercises/math/probaStat/stats1var/interquartilesTable.js +98 -0
  33. package/lib/exercises/math/probaStat/stats1var/quartilesList.js +1 -1
  34. package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts +7 -0
  35. package/lib/exercises/math/probaStat/stats1var/standardDeviationList.d.ts.map +1 -0
  36. package/lib/exercises/math/probaStat/stats1var/standardDeviationList.js +131 -0
  37. package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts +8 -0
  38. package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.d.ts.map +1 -0
  39. package/lib/exercises/math/probaStat/stats1var/standardDeviationTable.js +144 -0
  40. package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts +7 -0
  41. package/lib/exercises/math/probaStat/stats1var/varianceList.d.ts.map +1 -0
  42. package/lib/exercises/math/probaStat/stats1var/varianceList.js +121 -0
  43. package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts +8 -0
  44. package/lib/exercises/math/probaStat/stats1var/varianceTable.d.ts.map +1 -0
  45. package/lib/exercises/math/probaStat/stats1var/varianceTable.js +133 -0
  46. package/lib/exercises/vea/sqrtVEA.d.ts +2 -1
  47. package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -1
  48. package/lib/exercises/vea/sqrtVEA.js +6 -3
  49. package/lib/index.d.ts +30 -0
  50. package/lib/index.d.ts.map +1 -1
  51. package/lib/math/geometry/angle.d.ts +22 -1
  52. package/lib/math/geometry/angle.d.ts.map +1 -1
  53. package/lib/math/geometry/angle.js +138 -1
  54. package/lib/math/geometry/line.d.ts +2 -0
  55. package/lib/math/geometry/line.d.ts.map +1 -1
  56. package/lib/math/geometry/line.js +16 -0
  57. package/lib/math/geometry/point.d.ts +1 -0
  58. package/lib/math/geometry/point.d.ts.map +1 -1
  59. package/lib/math/geometry/point.js +4 -0
  60. package/lib/math/geometry/vector.d.ts +3 -0
  61. package/lib/math/geometry/vector.d.ts.map +1 -1
  62. package/lib/math/geometry/vector.js +9 -0
  63. package/lib/math/polynomials/generalAffine.d.ts +3 -0
  64. package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
  65. package/lib/math/polynomials/generalAffine.js +4 -0
  66. package/lib/math/utils/quartiles.d.ts +3 -0
  67. package/lib/math/utils/quartiles.d.ts.map +1 -0
  68. package/lib/math/utils/quartiles.js +47 -0
  69. package/lib/math/utils/standardDeviation.d.ts +3 -0
  70. package/lib/math/utils/standardDeviation.d.ts.map +1 -0
  71. package/lib/math/utils/standardDeviation.js +13 -0
  72. package/lib/math/utils/variance.d.ts +1 -0
  73. package/lib/math/utils/variance.d.ts.map +1 -1
  74. package/lib/math/utils/variance.js +9 -1
  75. package/lib/playground.d.ts.map +1 -1
  76. package/lib/tree/nodes/node.d.ts +4 -2
  77. package/lib/tree/nodes/node.d.ts.map +1 -1
  78. package/lib/tree/nodes/node.js +2 -0
  79. package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
  80. package/lib/tree/nodes/nodeConstructor.js +4 -0
  81. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  82. package/lib/tree/nodes/operators/addNode.js +123 -90
  83. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  84. package/lib/tree/nodes/operators/multiplyNode.js +8 -0
  85. package/lib/tree/nodes/polynomials/monomNode.d.ts +47 -0
  86. package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -0
  87. package/lib/tree/nodes/polynomials/monomNode.js +216 -0
  88. package/lib/tree/parsers/affineParser.js +1 -1
  89. package/lib/tree/parsers/monomParser.d.ts +2 -2
  90. package/lib/tree/parsers/monomParser.d.ts.map +1 -1
  91. package/lib/tree/parsers/monomParser.js +84 -6
  92. package/lib/tree/parsers/polynomialParser.d.ts +3 -0
  93. package/lib/tree/parsers/polynomialParser.d.ts.map +1 -0
  94. package/lib/tree/parsers/polynomialParser.js +50 -0
  95. package/lib/tree/parsers/powerParser.d.ts +1 -1
  96. package/lib/tree/parsers/trinomParser.js +1 -1
  97. package/lib/utils/average.d.ts +1 -0
  98. package/lib/utils/average.d.ts.map +1 -1
  99. package/lib/utils/average.js +9 -1
  100. package/lib/utils/latex/approxOrEqual.d.ts +2 -0
  101. package/lib/utils/latex/approxOrEqual.d.ts.map +1 -0
  102. package/lib/utils/latex/approxOrEqual.js +11 -0
  103. package/lib/utils/variance.d.ts +2 -0
  104. package/lib/utils/variance.d.ts.map +1 -0
  105. package/lib/utils/variance.js +12 -0
  106. 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;AAQ1C,8BAAsB,wBAAwB;IAC5C,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,wBAAwB;CAM7D;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"}
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,3 @@
1
+ export declare const firstQuartile: (values: number[], effectifs?: number[]) => number;
2
+ export declare const thirdQuartile: (values: number[], effectifs?: number[]) => number;
3
+ //# sourceMappingURL=quartiles.d.ts.map
@@ -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,3 @@
1
+ export declare const standardDeviation: (values: number[]) => number;
2
+ export declare const standardDeviationWithEffectifs: (values: number[], effectifs: number[]) => number;
3
+ //# sourceMappingURL=standardDeviation.d.ts.map
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,UAAU,YAAW,CAAC"}
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAqDA,eAAO,MAAM,UAAU,YAAW,CAAC"}
@@ -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;CACP;AACD,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,oBAAY,OAAO;IACjB,GAAG,IAAA;IACH,SAAS,IAAA;IACT,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,KAAK,IAAA;IACL,KAAK,IAAA;IACL,MAAM,IAAA;IACN,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,KAAA;IACR,OAAO,KAAA;IACP,WAAW,KAAA;IACX,QAAQ,KAAA;IACR,KAAK,KAAA;IACL,OAAO,KAAA;IACP,KAAK,KAAA;IACL,UAAU,KAAA;IACV,gBAAgB,KAAA;IAChB,GAAG,KAAA;IACH,MAAM,KAAA;IACN,MAAM,KAAA;IACN,MAAM,KAAA;IACN,GAAG,KAAA;IACH,GAAG,KAAA;IACH,GAAG,KAAA;IACH,GAAG,KAAA;IACH,KAAK,KAAA;IACL,GAAG,KAAA;IACH,IAAI,KAAA;IACJ,QAAQ,KAAA;IACR,QAAQ,KAAA;IACR,MAAM,KAAA;IACN,MAAM,KAAA;IACN,KAAK,KAAA;IACL,MAAM,KAAA;IACN,UAAU,KAAA;IACV,kBAAkB,KAAA;IAClB,mBAAmB,KAAA;IACnB,MAAM,KAAA;CACP;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;IAClD,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,MAAM,EAAE,CAAC;IACjD,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;IAEvC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5D"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/node.ts"],"names":[],"mappings":"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"}
@@ -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;AAmBvC,eAAO,MAAM,cAAc,gBAAiB,eAAe,kBACI,CAAC;AAChE,eAAO,MAAM,SAAS,gBAAiB,eAAe,SACR,CAAC;AAC/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;CA6R3D"}
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;AASlE,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;IAqQ/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"}
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
- if (!opts?.towardsDistribute && (0, fractionNode_1.isFractionNode)(a) && (0, fractionNode_1.isFractionNode)(b)) {
134
- //c/d + e/f = cf+ed / df
135
- const c = a.leftChild;
136
- const d = a.rightChild;
137
- const e = b.leftChild;
138
- const f = b.rightChild;
139
- 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);
140
- }
141
- if (!opts?.towardsDistribute &&
142
- (0, oppositeNode_1.isOppositeNode)(a) &&
143
- (0, fractionNode_1.isFractionNode)(a.child) &&
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;IAoJ/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"}
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"}