math-exercises 3.0.107 → 3.0.108

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 (59) hide show
  1. package/lib/exercises/math/calcul/addAndSub.d.ts +1 -1
  2. package/lib/exercises/math/calcul/addAndSub.d.ts.map +1 -1
  3. package/lib/exercises/math/calcul/addAndSub.js +18 -4
  4. package/lib/exercises/math/calcul/addAndSubWithoutRelatives.d.ts.map +1 -1
  5. package/lib/exercises/math/calcul/addAndSubWithoutRelatives.js +8 -3
  6. package/lib/exercises/math/calcul/digitDecimalRankNumber.d.ts.map +1 -1
  7. package/lib/exercises/math/calculLitteral/distributivity/canonicalFormDevelopment.d.ts.map +1 -1
  8. package/lib/exercises/math/calculLitteral/distributivity/canonicalFormDevelopment.js +6 -2
  9. package/lib/exercises/math/calculLitteral/distributivity/identitiesWithNonIntegers.js +4 -4
  10. package/lib/exercises/math/functions/affines/affineExpressionFromTwoImages.d.ts.map +1 -1
  11. package/lib/exercises/math/functions/affines/affineExpressionFromTwoImages.js +3 -0
  12. package/lib/exercises/math/functions/affines/affineExpressionReading.d.ts.map +1 -1
  13. package/lib/exercises/math/functions/affines/affineExpressionReading.js +2 -0
  14. package/lib/exercises/math/functions/trinoms/summitAndCanonical/canonicalFromDevForm.d.ts.map +1 -1
  15. package/lib/exercises/math/functions/trinoms/summitAndCanonical/canonicalFromDevForm.js +3 -1
  16. package/lib/exercises/math/geometry/vectors/scalarProduct/scalarProductOrthoInSquare.js +1 -1
  17. package/lib/exercises/math/sequences/arithmetic/arithmeticExplicitFormulaUsage.d.ts.map +1 -1
  18. package/lib/exercises/math/sequences/arithmetic/arithmeticExplicitFormulaUsage.js +6 -4
  19. package/lib/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.d.ts.map +1 -1
  20. package/lib/index.d.ts +1 -1
  21. package/lib/math/numbers/rationals/rational.d.ts.map +1 -1
  22. package/lib/math/polynomials/polynomial.d.ts.map +1 -1
  23. package/lib/math/polynomials/polynomial.js +25 -29
  24. package/lib/math/utils/random/randfloat.d.ts +7 -1
  25. package/lib/math/utils/random/randfloat.d.ts.map +1 -1
  26. package/lib/math/utils/random/randfloat.js +2 -1
  27. package/lib/math/utils/random/randfrac.d.ts +9 -0
  28. package/lib/math/utils/random/randfrac.d.ts.map +1 -0
  29. package/lib/math/utils/random/randfrac.js +19 -0
  30. package/lib/math/utils/random/randint.d.ts +7 -1
  31. package/lib/math/utils/random/randint.d.ts.map +1 -1
  32. package/lib/math/utils/random/randint.js +2 -1
  33. package/lib/playground.d.ts +1 -1
  34. package/lib/playground.js +1 -1
  35. package/lib/tree/nodes/algebraicNode.d.ts +1 -1
  36. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  37. package/lib/tree/nodes/functions/expNode.d.ts +1 -1
  38. package/lib/tree/nodes/functions/expNode.d.ts.map +1 -1
  39. package/lib/tree/nodes/functions/expNode.js +1 -1
  40. package/lib/tree/nodes/functions/sqrtNode.d.ts +1 -1
  41. package/lib/tree/nodes/functions/sqrtNode.d.ts.map +1 -1
  42. package/lib/tree/nodes/functions/sqrtNode.js +1 -3
  43. package/lib/tree/nodes/operators/addNode.d.ts +1 -1
  44. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  45. package/lib/tree/nodes/operators/addNode.js +1 -1
  46. package/lib/tree/nodes/operators/fractionNode.d.ts +1 -1
  47. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  48. package/lib/tree/nodes/operators/fractionNode.js +3 -1
  49. package/lib/tree/nodes/operators/multiplyNode.d.ts +1 -1
  50. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  51. package/lib/tree/nodes/operators/multiplyNode.js +44 -38
  52. package/lib/tree/nodes/operators/powerNode.d.ts +1 -1
  53. package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
  54. package/lib/tree/nodes/operators/powerNode.js +1 -1
  55. package/lib/tree/nodes/randomReal.d.ts +15 -0
  56. package/lib/tree/nodes/randomReal.d.ts.map +1 -0
  57. package/lib/tree/nodes/randomReal.js +32 -0
  58. package/lib/tree/parsers/latexParser.js +5 -4
  59. package/package.json +1 -1
@@ -6,7 +6,7 @@ type Identifiers = {
6
6
  numbers: number[];
7
7
  };
8
8
  type Options = {
9
- explicitWriting?: boolean;
9
+ explicitWriting?: string;
10
10
  };
11
11
  export declare const addAndSubExercise: Exercise<Identifiers, Options>;
12
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"addAndSub.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/addAndSub.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,QAAQ,EAeT,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AAEH,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAYzC,KAAK,OAAO,GAAG;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAgFF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAiB5D,CAAC"}
1
+ {"version":3,"file":"addAndSub.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/addAndSub.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAeT,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AAEH,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAgBzC,KAAK,OAAO,GAAG;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AA0FF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAiB5D,CAAC"}
@@ -3,15 +3,21 @@ import { numberVEA } from "../../../exercises/vea/numberVEA.js";
3
3
  import { randint } from "../../../math/utils/random/randint.js";
4
4
  import { NumberNode } from "../../../tree/nodes/numbers/numberNode.js";
5
5
  import { AddNode } from "../../../tree/nodes/operators/addNode.js";
6
+ import { coinFlip } from "../../../utils/alea/coinFlip.js";
6
7
  import { shuffle } from "../../../utils/alea/shuffle.js";
7
8
  import { GeneratorOptionTarget, GeneratorOptionType, addValidProp, tryToAddWrongProp, } from "../../exercise.js";
8
9
  const options = [
9
10
  {
10
11
  id: "explicitWriting",
11
- label: "Utiliser l'écriture explicite (parenthèses autour de chaque nombre)",
12
+ label: "Type d'écriture",
12
13
  target: GeneratorOptionTarget.instruction,
13
- type: GeneratorOptionType.checkbox,
14
- defaultValue: false,
14
+ type: GeneratorOptionType.select,
15
+ values: [
16
+ "Explicite (parenthèses autour de chaque nombre)",
17
+ "Simplifiée",
18
+ "Les deux",
19
+ ],
20
+ defaultValue: "Simplifiée",
15
21
  },
16
22
  ];
17
23
  const getStatementNode = (identifiers, opts) => {
@@ -24,8 +30,16 @@ const getStatementNode = (identifiers, opts) => {
24
30
  return statementTree;
25
31
  };
26
32
  const getStartStatement = (identifiers, opts) => {
33
+ // "Explicite (parenthèses autour de chaque nombre)",
34
+ // "Simplifiée",
35
+ // "Les deux",
36
+ const explicitNumberWriting = !opts?.explicitWriting || opts.explicitWriting === "Simplifiée"
37
+ ? false
38
+ : opts?.explicitWriting === "Les deux"
39
+ ? coinFlip()
40
+ : true;
27
41
  return getStatementNode(identifiers, opts).toTex({
28
- explicitNumberWriting: opts?.explicitWriting,
42
+ explicitNumberWriting: explicitNumberWriting,
29
43
  });
30
44
  };
31
45
  const getInstruction = (identifiers, opts) => {
@@ -1 +1 @@
1
- {"version":3,"file":"addAndSubWithoutRelatives.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/addAndSubWithoutRelatives.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EAcT,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AAEH,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AA6EzC,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAa3D,CAAC"}
1
+ {"version":3,"file":"addAndSubWithoutRelatives.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/addAndSubWithoutRelatives.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,QAAQ,EAcT,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AAEH,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AA+EzC,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,WAAW,CAa3D,CAAC"}
@@ -1,7 +1,9 @@
1
+ import { numberVEA } from "../../../exercises/vea/numberVEA.js";
1
2
  import { randint } from "../../../math/utils/random/randint.js";
2
3
  import { NumberNode } from "../../../tree/nodes/numbers/numberNode.js";
3
4
  import { AddNode } from "../../../tree/nodes/operators/addNode.js";
4
5
  import { shuffle } from "../../../utils/alea/shuffle.js";
6
+ import { handleVEAError } from "../../../utils/errors/handleVEAError.js";
5
7
  import { addValidProp, tryToAddWrongProp, } from "../../exercise.js";
6
8
  import { getDistinctQuestions } from "../../utils/getDistinctQuestions.js";
7
9
  const getInstruction = (identifiers) => {
@@ -65,9 +67,12 @@ const getPropositions = (n, { answer }) => {
65
67
  return shuffle(propositions);
66
68
  };
67
69
  const isAnswerValid = (studentAns, { answer }) => {
68
- const answerTree = new NumberNode(Number(answer));
69
- const texs = answerTree.toAllValidTexs();
70
- return texs.includes(studentAns);
70
+ try {
71
+ return numberVEA(studentAns, answer);
72
+ }
73
+ catch (err) {
74
+ return handleVEAError(err);
75
+ }
71
76
  };
72
77
  export const addAndSubWithoutRelatives = {
73
78
  id: "addAndSubWithoutRelatives",
@@ -1 +1 @@
1
- {"version":3,"file":"digitDecimalRankNumber.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/digitDecimalRankNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAYrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAsEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
1
+ {"version":3,"file":"digitDecimalRankNumber.d.ts","sourceRoot":"","sources":["../../../../src/exercises/math/calcul/digitDecimalRankNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAsEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalFormDevelopment.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/distributivity/canonicalFormDevelopment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAiGF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,WAAW,CAkB1D,CAAC"}
1
+ {"version":3,"file":"canonicalFormDevelopment.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/distributivity/canonicalFormDevelopment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAqGF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,WAAW,CAkB1D,CAAC"}
@@ -45,7 +45,9 @@ ${alignTex([
45
45
  ])}`;
46
46
  };
47
47
  const getCanonicalFormDevelopmentQuestion = () => {
48
- const trinom = TrinomConstructor.randomCanonical();
48
+ const trinom = TrinomConstructor.randomCanonical(undefined, {
49
+ excludes: [0],
50
+ });
49
51
  const identifiers = { coeffs: trinom.coefficients };
50
52
  return getQuestionFromIdentifiers(identifiers);
51
53
  };
@@ -65,7 +67,9 @@ const getPropositions = (n, { answer }) => {
65
67
  const propositions = [];
66
68
  addValidProp(propositions, answer);
67
69
  while (propositions.length < n) {
68
- tryToAddWrongProp(propositions, TrinomConstructor.random({ min: -100, max: 100 }, { min: -100, max: 100 }, { min: -100, max: 100 }).toTex());
70
+ tryToAddWrongProp(propositions, TrinomConstructor.random({ min: -100, max: 100 }, { min: -100, max: 100 }, { min: -100, max: 100 })
71
+ .toTree()
72
+ .toTex());
69
73
  }
70
74
  return shuffleProps(propositions, n);
71
75
  };
@@ -113,7 +113,7 @@ ${alignTex([
113
113
  ],
114
114
  [
115
115
  "=",
116
- add(square(firstTerm).simplify(simpOpts), add(multiply(multiply(2, firstTerm), secondTerm).simplify(), square(secondTerm).simplify(simpOpts))).toTex(),
116
+ add(square(firstTerm).simplify(simpOpts), add(multiply(multiply(2, firstTerm), secondTerm).simplify(simpOpts), square(secondTerm).simplify(simpOpts))).toTex(),
117
117
  ],
118
118
  ])}
119
119
 
@@ -135,9 +135,9 @@ ${alignTex([
135
135
  ],
136
136
  [
137
137
  "=",
138
- add(square(firstTerm).simplify(simpOpts), add(multiply(-2, multiply(firstTerm, secondTerm)).simplify(), square(secondTerm).simplify(simpOpts)).simplify()).toTex(),
138
+ add(square(firstTerm).simplify(simpOpts), add(multiply(-2, multiply(firstTerm, secondTerm)).simplify(simpOpts), square(secondTerm).simplify(simpOpts)).simplify(simpOpts)).toTex(),
139
139
  ],
140
- ["=", getAnswer(identifiers)],
140
+ // ["=", getAnswer(identifiers)],
141
141
  ])}
142
142
 
143
143
  `;
@@ -161,7 +161,7 @@ ${alignTex([
161
161
  "=",
162
162
  substract(square(firstTerm).simplify(simpOpts), square(secondTerm).simplify(simpOpts)).toTex(),
163
163
  ],
164
- ["=", getAnswer(identifiers)],
164
+ // ["=", getAnswer(identifiers)],
165
165
  ])}
166
166
  `;
167
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"affineExpressionFromTwoImages.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/affineExpressionFromTwoImages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAerC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAqIF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAc/D,CAAC"}
1
+ {"version":3,"file":"affineExpressionFromTwoImages.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/affineExpressionFromTwoImages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAaT,MAAM,6BAA6B,CAAC;AAerC,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAwIF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAe/D,CAAC"}
@@ -112,6 +112,9 @@ const isAnswerValid = (ans, { answer, xA, xB, yA, yB }) => {
112
112
  return handleVEAError(err);
113
113
  }
114
114
  };
115
+ // entiers ou non, décimaux, rationnels, positifs ou relatifs, etc.
116
+ //type entier/décimal/rationnel
117
+ //sign +-
115
118
  export const affineExpressionFromTwoImages = {
116
119
  id: "affineExpressionFromTwoImages",
117
120
  connector: "=",
@@ -1 +1 @@
1
- {"version":3,"file":"affineExpressionReading.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/affineExpressionReading.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAkBrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AA4KF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
1
+ {"version":3,"file":"affineExpressionReading.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/affines/affineExpressionReading.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAkBrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AA8KF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,WAAW,CAezD,CAAC"}
@@ -78,6 +78,8 @@ const getAffineExpressionReadingQuestion = () => {
78
78
  const b = randint(-5, 6);
79
79
  const secondPoint = [randint(-5, 6, [0]), randint(-5, 6)];
80
80
  const identifiers = { b, secondPoint };
81
+ //[0,b] et [x,y]
82
+ //a = (y-b)/x
81
83
  return getQuestionFromIdentifiers(identifiers);
82
84
  };
83
85
  const getQuestionFromIdentifiers = (identifiers) => {
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalFromDevForm.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/functions/trinoms/summitAndCanonical/canonicalFromDevForm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AAMrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA4DF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAatD,CAAC"}
1
+ {"version":3,"file":"canonicalFromDevForm.d.ts","sourceRoot":"","sources":["../../../../../../src/exercises/math/functions/trinoms/summitAndCanonical/canonicalFromDevForm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAWT,MAAM,6BAA6B,CAAC;AAMrC,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AA8DF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAatD,CAAC"}
@@ -28,7 +28,9 @@ const getQuestionFromIdentifiers = (identifiers) => {
28
28
  return question;
29
29
  };
30
30
  const getCanonicalFromDevFormQuestion = () => {
31
- const trinom = TrinomConstructor.randomCanonical();
31
+ const trinom = TrinomConstructor.randomCanonical(undefined, {
32
+ excludes: [0],
33
+ });
32
34
  const identifiers = { a: trinom.a, b: trinom.b, c: trinom.c };
33
35
  return getQuestionFromIdentifiers(identifiers);
34
36
  };
@@ -111,7 +111,7 @@ const getScalarProductOrthoInSquareQuestion = () => {
111
111
  },
112
112
  AL: {
113
113
  projLength: c / 2,
114
- reps: ["AL", "LD", "IO", "OK", "BJ", "BC"],
114
+ reps: ["AL", "LD", "IO", "OK", "BJ", "JC"],
115
115
  },
116
116
  };
117
117
  const vec1Choices = random(isFirstVecOnAB ? ["AB", "AI"] : ["AD", "AL"]);
@@ -1 +1 @@
1
- {"version":3,"file":"arithmeticExplicitFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticExplicitFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA4FF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,CAchE,CAAC"}
1
+ {"version":3,"file":"arithmeticExplicitFormulaUsage.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/arithmetic/arithmeticExplicitFormulaUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AASrC,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA8FF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,WAAW,CAchE,CAAC"}
@@ -9,11 +9,13 @@ import { shuffle } from "../../../../utils/alea/shuffle.js";
9
9
  const getInstruction = (identifiers) => {
10
10
  const { firstValue, askedRank, reason } = identifiers;
11
11
  const polynomial = new Polynomial([firstValue, reason], "n");
12
- return `$(u_n)$ est une suite arithmétique définie par $u_n = ${polynomial
13
- .toTree()
14
- .toTex()}$.
12
+ return `$(u_n)$ est une suite arithmétique définie par :
13
+
14
+ $$
15
+ u_n = ${polynomial.toTree().toTex()}
16
+ $$
15
17
 
16
- Calculer $u_{${askedRank}}$`;
18
+ Calculer $u_{${askedRank}}$.`;
17
19
  };
18
20
  const getAnswer = (identifiers) => {
19
21
  const { firstValue, askedRank, reason } = identifiers;
@@ -1 +1 @@
1
- {"version":3,"file":"geometricFirstTermsGeneralSum.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAgHF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAc/D,CAAC"}
1
+ {"version":3,"file":"geometricFirstTermsGeneralSum.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/sequences/geometric/geometricFirstTermsGeneralSum.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAiHF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,WAAW,CAc/D,CAAC"}
package/lib/index.d.ts CHANGED
@@ -5,7 +5,7 @@ import { parseAlgebraic } from "./tree/parsers/latexParser.js";
5
5
  declare const mathExercises: (Exercise<{
6
6
  numbers: number[];
7
7
  }, {
8
- explicitWriting?: boolean;
8
+ explicitWriting?: string;
9
9
  }> | Exercise<{
10
10
  numbers: number[];
11
11
  }, {}> | Exercise<{
@@ -1 +1 @@
1
- {"version":3,"file":"rational.d.ts","sourceRoot":"","sources":["../../../../src/math/numbers/rationals/rational.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,8BAAsB,mBAAmB;IACvC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAE,MAAW;IAW7C,MAAM,CAAC,kBAAkB,CACvB,GAAG,GAAE,MAAW,EAChB,EAAE,UAAkB,EAAE,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO;IASvD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,GAAE,MAAW;IAKpD,MAAM,CAAC,0BAA0B,CAAC,GAAG,GAAE,MAAW;IAQlD,MAAM,CAAC,kBAAkB,CAAC,GAAG,GAAE,MAAW;IAO1C,MAAM,CAAC,aAAa,CAAC,GAAG,GAAE,MAAW;CAOtC;AAED,qBAAa,QAAS,YAAW,MAAM;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;gBAEL,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAYlD,OAAO;IAGP,MAAM,CAAC,CAAC,EAAE,MAAM;IAIhB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAkBvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO;IAgBxC,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM;IAIxC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgB1B,QAAQ,IAAI,QAAQ;IAIpB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa;IAgBzC,cAAc;IAId,QAAQ,IAAI,OAAO,GAAG,QAAQ;CAqB/B"}
1
+ {"version":3,"file":"rational.d.ts","sourceRoot":"","sources":["../../../../src/math/numbers/rationals/rational.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,8BAAsB,mBAAmB;IACvC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAE,MAAW;IAY7C,MAAM,CAAC,kBAAkB,CACvB,GAAG,GAAE,MAAW,EAChB,EAAE,UAAkB,EAAE,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO;IASvD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,GAAE,MAAW;IAKpD,MAAM,CAAC,0BAA0B,CAAC,GAAG,GAAE,MAAW;IAQlD,MAAM,CAAC,kBAAkB,CAAC,GAAG,GAAE,MAAW;IAO1C,MAAM,CAAC,aAAa,CAAC,GAAG,GAAE,MAAW;CAOtC;AAED,qBAAa,QAAS,YAAW,MAAM;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;gBAEL,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAYlD,OAAO;IAGP,MAAM,CAAC,CAAC,EAAE,MAAM;IAIhB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAkBvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO;IAgBxC,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM;IAIxC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgB1B,QAAQ,IAAI,QAAQ;IAIpB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa;IAgBzC,cAAc;IAId,QAAQ,IAAI,OAAO,GAAG,QAAQ;CAqB/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"polynomial.d.ts","sourceRoot":"","sources":["../../../src/math/polynomials/polynomial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAapE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,8BAAsB,qBAAqB;IACzC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY;IAa5D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY;IActD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY;IAoBxB,MAAM,CAAC,4BAA4B,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY;IAqBxB,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,UAAU,GAAG,UAAU,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,MAAY;CAmCzB;AAED,qBAAa,UAAU;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB;;;;OAIG;gBACS,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAY;IAa1D,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAM9B,QAAQ,IAAI,MAAM,EAAE;IAmCpB,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU;IAyBvC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU;IAQ7B,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IAuBnC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAqBnC,QAAQ,IAAI,UAAU;IAOtB,QAAQ,IAAI,UAAU;IAWtB,cAAc,IAAI,UAAU;IAiB5B,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BlC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAO5B,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM;IAiB7C,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU;IAiBxC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW;IAuCzB,KAAK,IAAI,MAAM;IA0Bf,YAAY,IAAI,MAAM;CAGvB"}
1
+ {"version":3,"file":"polynomial.d.ts","sourceRoot":"","sources":["../../../src/math/polynomials/polynomial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAapE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,8BAAsB,qBAAqB;IACzC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY;IAa5D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY;IActD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY;IAoBxB,MAAM,CAAC,4BAA4B,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY;IAqBxB,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,UAAU,GAAG,UAAU,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,MAAY;CAmCzB;AAED,qBAAa,UAAU;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB;;;;OAIG;gBACS,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,MAAY;IAa1D,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO;IAM9B,QAAQ,IAAI,MAAM,EAAE;IAmCpB,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU;IAyBvC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU;IAQ7B,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IAuBnC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAqBnC,QAAQ,IAAI,UAAU;IAOtB,QAAQ,IAAI,UAAU;IAWtB,cAAc,IAAI,UAAU;IAiB5B,eAAe,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BlC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAO5B,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM;IAiB7C,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU;IAiBxC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW;IAuCzB,KAAK,IAAI,MAAM;IA4Bf,YAAY,IAAI,MAAM;CAGvB"}
@@ -363,35 +363,31 @@ export class Polynomial {
363
363
  return recursive(this.degree);
364
364
  }
365
365
  toTex() {
366
- let s = "";
367
- for (let i = this.degree; i > -1; i--) {
368
- const coeff = this.coefficients[i];
369
- if (coeff === 0)
370
- continue;
371
- if (i === 0)
372
- s += coeff > 0 ? `+${coeff}` : coeff;
373
- else if (i === this.degree) {
374
- s += coeff === 1 ? "" : coeff === -1 ? "-" : coeff;
375
- }
376
- else {
377
- s +=
378
- coeff === 1
379
- ? "+"
380
- : coeff === -1
381
- ? "-"
382
- : coeff > 0
383
- ? `+${coeff}`
384
- : coeff;
385
- }
386
- //x^n
387
- if (i === 0)
388
- continue;
389
- if (i === 1)
390
- s += this.variable;
391
- else
392
- s += `${this.variable}^{${i}}`;
393
- }
394
- return s;
366
+ return this.toTree().toTex();
367
+ //obsolete
368
+ // let s = "";
369
+ // for (let i = this.degree; i > -1; i--) {
370
+ // const coeff = this.coefficients[i];
371
+ // if (coeff === 0) continue;
372
+ // if (i === 0) s += coeff > 0 ? `+${coeff}` : coeff;
373
+ // else if (i === this.degree) {
374
+ // s += coeff === 1 ? "" : coeff === -1 ? "-" : coeff;
375
+ // } else {
376
+ // s +=
377
+ // coeff === 1
378
+ // ? "+"
379
+ // : coeff === -1
380
+ // ? "-"
381
+ // : coeff > 0
382
+ // ? `+${coeff}`
383
+ // : coeff;
384
+ // }
385
+ // //x^n
386
+ // if (i === 0) continue;
387
+ // if (i === 1) s += this.variable;
388
+ // else s += `${this.variable}^{${i}}`;
389
+ // }
390
+ // return s;
395
391
  }
396
392
  toMathString() {
397
393
  return this.toTex().replace(/\{/g, "(").replace(/\}/g, ")");
@@ -1,5 +1,11 @@
1
1
  /**
2
2
  * @returns random [[a, b[[
3
3
  */
4
- export declare const randfloat: (a: number, b?: number, roundTo?: number, excludes?: number[] | ((x: number) => boolean)) => number;
4
+ export type RandfloatProps = [
5
+ a: number,
6
+ b?: number,
7
+ roundTo?: number,
8
+ excludes?: number[] | ((x: number) => boolean)
9
+ ];
10
+ export declare const randfloat: (a: number, b?: number | undefined, roundTo?: number | undefined, excludes?: number[] | ((x: number) => boolean) | undefined) => number;
5
11
  //# sourceMappingURL=randfloat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"randfloat.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randfloat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,SAAS,MACjB,MAAM,MACL,MAAM,YACA,MAAM,aACL,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,KAC7C,MAiBF,CAAC"}
1
+ {"version":3,"file":"randfloat.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randfloat.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM;IACT,CAAC,CAAC,EAAE,MAAM;IACV,OAAO,CAAC,EAAE,MAAM;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C,CAAC;AACF,eAAO,MAAM,SAAS,+FAFO,MAAM,KAAK,OAAO,kBAEK,MAkBnD,CAAC"}
@@ -2,7 +2,8 @@
2
2
  * @returns random [[a, b[[
3
3
  */
4
4
  import { round } from "../round.js";
5
- export const randfloat = (a, b, roundTo, excludes) => {
5
+ export const randfloat = (...args) => {
6
+ const [a, b, roundTo, excludes] = args;
6
7
  if (b === undefined)
7
8
  return Math.random() * a;
8
9
  if (roundTo === undefined)
@@ -0,0 +1,9 @@
1
+ export type RandratioProps = {
2
+ maxValue?: number;
3
+ sign?: -1 | 1;
4
+ maxDenum?: number;
5
+ decimal?: boolean;
6
+ simplifiable?: boolean;
7
+ };
8
+ export declare const randfrac: (options?: RandratioProps) => void;
9
+ //# sourceMappingURL=randfrac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"randfrac.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randfrac.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,QAAQ,aAAc,cAAc,SAgBhD,CAAC"}
@@ -0,0 +1,19 @@
1
+ //{ maxValue, sign, maxDenum, rational, decimal (ou non decaiml), simplifiable}
2
+ import { coinFlip } from "../../../utils/alea/coinFlip.js";
3
+ export const randfrac = (options) => {
4
+ const opts = {
5
+ maxValue: options?.maxValue ?? 11,
6
+ sign: options?.sign ?? coinFlip(),
7
+ maxDenum: options?.maxDenum ?? 11,
8
+ decimal: options?.decimal ?? undefined,
9
+ simplifiable: options?.simplifiable ?? false,
10
+ };
11
+ if (opts.simplifiable) {
12
+ }
13
+ if (opts.decimal) {
14
+ }
15
+ if (opts.decimal === false) {
16
+ }
17
+ //a,b selon maxDenum & maxValue
18
+ const { decimal, maxDenum } = opts;
19
+ };
@@ -7,6 +7,12 @@ type Options = {
7
7
  proba: number;
8
8
  };
9
9
  };
10
- export declare const randint: (a: number, b?: number, excludes?: number[], opts?: Options) => number;
10
+ export type RandintProps = [
11
+ a: number,
12
+ b?: number,
13
+ excludes?: number[],
14
+ opts?: Options
15
+ ];
16
+ export declare const randint: (a: number, b?: number | undefined, excludes?: number[] | undefined, opts?: Options | undefined) => number;
11
17
  export {};
12
18
  //# sourceMappingURL=randint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"randint.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AACF,eAAO,MAAM,OAAO,MACf,MAAM,MACL,MAAM,aACC,MAAM,EAAE,SACZ,OAAO,KACb,MAaF,CAAC"}
1
+ {"version":3,"file":"randint.d.ts","sourceRoot":"","sources":["../../../../src/math/utils/random/randint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM;IACT,CAAC,CAAC,EAAE,MAAM;IACV,QAAQ,CAAC,EAAE,MAAM,EAAE;IACnB,IAAI,CAAC,EAAE,OAAO;CACf,CAAC;AACF,eAAO,MAAM,OAAO,sGAMpB,MAcC,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @returns random [[a, b[[
3
3
  */
4
- export const randint = (a, b, excludes, opts) => {
4
+ export const randint = (...args) => {
5
+ const [a, b, excludes, opts] = args;
5
6
  if (opts?.favor) {
6
7
  if (Math.random() < opts.favor.proba) {
7
8
  return opts.favor.value;
@@ -2,6 +2,6 @@ export declare const playground: () => void;
2
2
  /***
3
3
  *
4
4
  * !!TODO
5
- * - j'ai l'impression que opposite(3).simplify() et numberNode(-3) ne passent pas "equals", j'ai du mal à comprendre pourquoi alors que opposite(3) se simplifie bien en numberNode
5
+ * - j'ai l'impression que opposite(3).simplify() et numberNode(-3) ne passent pas tjrs "equals", j'ai du mal à comprendre pourquoi alors que opposite(3) se simplifie bien en numberNode
6
6
  */
7
7
  //# sourceMappingURL=playground.d.ts.map
package/lib/playground.js CHANGED
@@ -2,5 +2,5 @@ export const playground = () => { };
2
2
  /***
3
3
  *
4
4
  * !!TODO
5
- * - j'ai l'impression que opposite(3).simplify() et numberNode(-3) ne passent pas "equals", j'ai du mal à comprendre pourquoi alors que opposite(3) se simplifie bien en numberNode
5
+ * - j'ai l'impression que opposite(3).simplify() et numberNode(-3) ne passent pas tjrs "equals", j'ai du mal à comprendre pourquoi alors que opposite(3) se simplifie bien en numberNode
6
6
  */
@@ -21,7 +21,7 @@ export interface AlgebraicNode extends Node {
21
21
  evaluate: (vars?: Record<string, number>, opts?: EvaluateOptions) => number;
22
22
  toDetailedEvaluation: (vars: Record<string, AlgebraicNode>) => AlgebraicNode;
23
23
  toEquivalentNodes: (opts?: NodeOptions) => AlgebraicNode[];
24
- simplify: (opts?: SimplifyOptions) => AlgebraicNode;
24
+ simplify: (opts?: SimplifyOptions, log?: boolean) => AlgebraicNode;
25
25
  equals: (node: AlgebraicNode) => boolean;
26
26
  isNumeric: boolean;
27
27
  derivative: (varName?: string) => AlgebraicNode;
@@ -1 +1 @@
1
- {"version":3,"file":"algebraicNode.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/algebraicNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AACF,MAAM,WAAW,aAAc,SAAQ,IAAI;IACzC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;IAC5E,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,aAAa,CAAC;IAC7E,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,aAAa,EAAE,CAAC;IAC3D,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,aAAa,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;CACjD;AACD,8BAAsB,cAAc;;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB;AACD,eAAO,MAAM,eAAe,SAAU,IAAI,KAAG,IAAI,IAAI,aACX,CAAC"}
1
+ {"version":3,"file":"algebraicNode.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/algebraicNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AACF,MAAM,WAAW,aAAc,SAAQ,IAAI;IACzC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;IAC5E,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,aAAa,CAAC;IAC7E,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,aAAa,EAAE,CAAC;IAC3D,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,aAAa,CAAC;IACnE,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;CACjD;AACD,8BAAsB,cAAc;;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ;CAGxB;AACD,eAAO,MAAM,eAAe,SAAU,IAAI,KAAG,IAAI,IAAI,aACX,CAAC"}
@@ -20,7 +20,7 @@ export declare class ExpNode implements FunctionNode {
20
20
  toTex(): string;
21
21
  toEquivalentNodes(): AlgebraicNode[];
22
22
  toAllValidTexs(): string[];
23
- simplify(opts?: SimplifyOptions): AlgebraicNode;
23
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
24
24
  evaluate(vars?: Record<string, number>): number;
25
25
  equals(node: AlgebraicNode): boolean;
26
26
  toDetailedEvaluation(vars: Record<string, AlgebraicNode>): ExpNode;
@@ -1 +1 @@
1
- {"version":3,"file":"expNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/expNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,eAAO,MAAM,GAAG,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,YAIrD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,aAAa;;;;;;IAMb,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAmBf,iBAAiB,IAAI,aAAa,EAAE;IAUpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAO/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAGpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAGxC"}
1
+ {"version":3,"file":"expNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/expNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,eAAO,MAAM,GAAG,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,YAIrD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,aAAa;;;;;;IAMb,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAmBf,iBAAiB,IAAI,aAAa,EAAE;IAUpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,UAAQ,GAAG,aAAa;IAO5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAGpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAGxC"}
@@ -64,7 +64,7 @@ export class ExpNode {
64
64
  toAllValidTexs() {
65
65
  return this.toEquivalentNodes().map((node) => node.toTex());
66
66
  }
67
- simplify(opts) {
67
+ simplify(opts, log = false) {
68
68
  const simplifiedChild = this.child.simplify(opts);
69
69
  if (isNumberNode(simplifiedChild) && simplifiedChild.value === 0)
70
70
  return (1).toTree();
@@ -21,7 +21,7 @@ export declare class SqrtNode implements FunctionNode {
21
21
  toEquivalentNodes(opts?: NodeOptions): AlgebraicNode[];
22
22
  toAllValidTexs(opts?: NodeOptions): string[];
23
23
  evaluate(vars?: Record<string, number>): number;
24
- simplify(opts?: SimplifyOptions, steps?: AlgebraicNode[]): AlgebraicNode;
24
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
25
25
  equals(node: AlgebraicNode): boolean;
26
26
  toDetailedEvaluation(vars: Record<string, AlgebraicNode>): AlgebraicNode;
27
27
  derivative(varName?: string | undefined): AlgebraicNode;
@@ -1 +1 @@
1
- {"version":3,"file":"sqrtNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sqrtNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMrE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,QAAQ,CAEjD;AAED,eAAO,MAAM,IAAI,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,aAItD,CAAC;AAEF,qBAAa,QAAS,YAAW,YAAY;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,aAAa;;;;;;IAMb,YAAY,IAAI,MAAM;IAMtB,KAAK,IAAI,MAAM;IAIf,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAwBtD,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE;IA2CxD,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAGpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAMxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;IAGvD,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;CAQ3C"}
1
+ {"version":3,"file":"sqrtNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sqrtNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMrE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,QAAQ,CAEjD;AAED,eAAO,MAAM,IAAI,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,aAItD,CAAC;AAEF,qBAAa,QAAS,YAAW,YAAY;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,aAAa;;;;;;IAMb,YAAY,IAAI,MAAM;IAMtB,KAAK,IAAI,MAAM;IAIf,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAwBtD,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,UAAQ;IA0C5C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAGpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAMxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;IAGvD,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;CAQ3C"}
@@ -69,11 +69,9 @@ export class SqrtNode {
69
69
  evaluate(vars) {
70
70
  return Math.sqrt(this.child.evaluate(vars));
71
71
  }
72
- simplify(opts, steps) {
72
+ simplify(opts, log = false) {
73
73
  const simplifiedChild = this.child.simplify(opts);
74
74
  const copy = new SqrtNode(simplifiedChild, this.opts);
75
- if (steps && !this.child.equals(simplifiedChild))
76
- steps.push(copy);
77
75
  const externals = [];
78
76
  //ex [3, x^2] pour sqrt(3x^2)
79
77
  const recursive = (node) => {
@@ -19,7 +19,7 @@ export declare class AddNode implements CommutativeOperatorNode {
19
19
  toAllValidTexs(opts?: NodeOptions): string[];
20
20
  toTex(options?: ToTexOptions): string;
21
21
  evaluate(vars?: Record<string, number>): number;
22
- simplify(opts?: SimplifyOptions): AlgebraicNode;
22
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
23
23
  toIdentifiers(): {
24
24
  id: NodeIds;
25
25
  leftChild: {
@@ -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,YAAY,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAerE,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;IAUpB,OAAO,gBAGL;IACF,WAAW,UAAW,eAAe,aAUnC;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;IAsJ/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;IAMvD,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;CAK3C"}
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,YAAY,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAerE,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;IAUpB,OAAO,gBAGL;IACF,WAAW,UAAW,eAAe,aAUnC;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,EAAE,GAAG,UAAQ,GAAG,aAAa;IAsJ5D,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;IAMvD,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;CAK3C"}
@@ -118,7 +118,7 @@ export class AddNode {
118
118
  // toMathjs() {
119
119
  // return add(this.leftChild.toMathjs(), this.rightChild.toMathjs());
120
120
  // }
121
- simplify(opts) {
121
+ simplify(opts, log = false) {
122
122
  const leftSimplified = this.leftChild.simplify(opts);
123
123
  const rightSimplified = this.rightChild.simplify(opts);
124
124
  const copy = new AddNode(leftSimplified, rightSimplified, this.opts);
@@ -29,7 +29,7 @@ export declare class FractionNode implements OperatorNode {
29
29
  isDecimal(): boolean;
30
30
  toTex(texOpts?: ToTexOptions): string;
31
31
  evaluate(vars?: Record<string, number>): number;
32
- simplify(opts?: SimplifyOptions): AlgebraicNode;
32
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
33
33
  equals(node: AlgebraicNode): boolean;
34
34
  toDetailedEvaluation(vars: Record<string, AlgebraicNode>): FractionNode;
35
35
  toSimplificationTex(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,IAAI,MACZ,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AACF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,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;IAiBpB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,uBAAuB;IAQxC,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,SAAS;IAUT,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IA8BrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IAuM/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,mBAAmB;IAQnB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAGxD"}
1
+ {"version":3,"file":"fractionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/fractionNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,eAAO,MAAM,IAAI,MACZ,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,iBAOnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC;AACF,qBAAa,YAAa,YAAW,YAAY;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,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;IAiBpB,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,uBAAuB;IAQxC,UAAU;IAGV,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IA+BpC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAG5C,SAAS;IAUT,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IA8BrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,UAAQ,GAAG,aAAa;IA0M5D,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,mBAAmB;IAQnB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAGxD"}
@@ -131,9 +131,11 @@ export class FractionNode {
131
131
  // toMathjs() {
132
132
  // return fraction(this.leftChild.toMathjs(), this.rightChild.toMathjs());
133
133
  // }
134
- simplify(opts) {
134
+ simplify(opts, log = false) {
135
+ log && console.log(`simplifying ${this.toTex()}`);
135
136
  const simplifiedNum = this.leftChild.simplify(opts);
136
137
  const simplifiedDenum = this.rightChild.simplify(opts);
138
+ // console.log(simplifiedNum.toTex(), simplifiedDenum.toTex());
137
139
  const copy = new FractionNode(simplifiedNum, simplifiedDenum, this.opts);
138
140
  if (isNumberNode(simplifiedNum) && simplifiedNum.value === 0) {
139
141
  return new NumberNode(0);
@@ -32,7 +32,7 @@ export declare class MultiplyNode implements CommutativeOperatorNode {
32
32
  evaluate(vars?: Record<string, number>): number;
33
33
  copy(): MultiplyNode;
34
34
  canonicalOrder(): void;
35
- simplify(opts?: SimplifyOptions): AlgebraicNode;
35
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
36
36
  toSimplificationTex(opts?: SimplifyOptions): string;
37
37
  equals(node: AlgebraicNode): boolean;
38
38
  toDetailedEvaluation(vars: Record<string, AlgebraicNode>): MultiplyNode;
@@ -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,YAAY,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAe7B,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,SAYrD,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,qBAGL;IAEF,WAAW,UAAW,eAAe,kBAUnC;IAEF,UAAU,qBAER;IACF,YAAY,IAAI,MAAM;IAItB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAgFrC,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;IA2L/C,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;IAM1C,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,YAAY,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAe7B,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,SAYrD,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,qBAGL;IAEF,WAAW,UAAW,eAAe,kBAUnC;IAEF,UAAU,qBAER;IACF,YAAY,IAAI,MAAM;IAItB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAgFrC,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,EAAE,GAAG,UAAQ,GAAG,aAAa;IAiK5D,mBAAmB,CAAC,IAAI,CAAC,EAAE,eAAe;IAM1C,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"}
@@ -10,7 +10,7 @@ import { NumberNode, isNumberNode } from "../numbers/numberNode.js";
10
10
  import { isInt } from "../../../utils/isInt.js";
11
11
  import { isVariableNode } from "../variables/variableNode.js";
12
12
  import { SqrtNode, isSqrtNode } from "../functions/sqrtNode.js";
13
- import { isOppositeNode, } from "../functions/oppositeNode.js";
13
+ import { isOppositeNode, opposite, } from "../functions/oppositeNode.js";
14
14
  import { FractionNode, isFractionNode } from "./fractionNode.js";
15
15
  import { isFunctionNode } from "../functions/functionNode.js";
16
16
  import { AddNode, add, isAddNode } from "./addNode.js";
@@ -264,9 +264,10 @@ export class MultiplyNode {
264
264
  return new MultiplyNode(this.leftChild, this.rightChild, this.opts);
265
265
  }
266
266
  canonicalOrder() { }
267
- simplify(opts) {
268
- const leftSimplified = this.leftChild.simplify(opts);
269
- const rightSimplified = this.rightChild.simplify(opts);
267
+ simplify(opts, log = false) {
268
+ log && console.log(`simplifying ${this.toTex()}`);
269
+ const leftSimplified = this.leftChild.simplify(opts, log);
270
+ const rightSimplified = this.rightChild.simplify(opts, log);
270
271
  const copy = new MultiplyNode(leftSimplified, rightSimplified, this.opts);
271
272
  /**get externals nodes (= extremités du sous arbre non multiplicatif)
272
273
  * les opposites sont supprimés et on ajoute *-1 à la fin si leur nb est impair
@@ -332,7 +333,7 @@ export class MultiplyNode {
332
333
  const denumNode = denums.length === 1
333
334
  ? denums[0]
334
335
  : operatorComposition(MultiplyNode, denums);
335
- return new FractionNode(numNode, denumNode).simplify(opts);
336
+ return new FractionNode(numNode, denumNode).simplify(opts, log);
336
337
  }
337
338
  const simplifyExternalNodes = (a, b) => {
338
339
  if (isVariableNode(a) && isVariableNode(b)) {
@@ -344,44 +345,26 @@ export class MultiplyNode {
344
345
  return new NumberNode(round(a.value * b.value, 10));
345
346
  }
346
347
  if (isSqrtNode(a) && isSqrtNode(b)) {
347
- return new SqrtNode(new MultiplyNode(a.child, b.child)).simplify(opts);
348
+ return new SqrtNode(new MultiplyNode(a.child, b.child)).simplify(opts, log);
348
349
  }
349
350
  if (isNumberNode(a) &&
350
351
  (isPowerNode(b) || isSquareNode(b)) &&
351
352
  isNumberNode(b.leftChild) &&
352
353
  a.value === b.leftChild.value) {
353
- return new PowerNode(b.leftChild, new AddNode(b.rightChild, (1).toTree())).simplify(opts);
354
+ return new PowerNode(b.leftChild, new AddNode(b.rightChild, (1).toTree())).simplify(opts, log);
354
355
  }
355
- if (isNumberNode(a) && isFractionNode(b) && b.isNumeric) {
356
- return new FractionNode(multiply(a, b.leftChild), b.rightChild).simplify(opts);
357
- }
358
- if (isNumberNode(b) && isFractionNode(a) && a.isNumeric) {
359
- return new FractionNode(multiply(a.leftChild, b), a.rightChild).simplify(opts);
360
- }
361
- const aFractionNode = isFractionNode(a) && a.isNumeric
362
- ? a
363
- : isOppositeNode(a) && isFractionNode(a.child) && a.child.isNumeric
364
- ? a.child
365
- : null;
366
- const bFractionNode = isFractionNode(b) && b.isNumeric
367
- ? b
368
- : isOppositeNode(b) && isFractionNode(b.child) && b.child.isNumeric
369
- ? b.child
370
- : null;
371
- if (aFractionNode && bFractionNode) {
372
- if (isFractionNode(b) && b.isNumeric) {
373
- return new FractionNode(multiply(aFractionNode.leftChild, bFractionNode.leftChild), multiply(aFractionNode.rightChild, bFractionNode.rightChild)).simplify(opts);
374
- }
375
- }
376
- let powerSimplified = powerSimplify(a, b, opts);
356
+ let fracSimplified = fractionSimplify(a, b, opts, log);
357
+ if (fracSimplified)
358
+ return fracSimplified;
359
+ let powerSimplified = powerSimplify(a, b, opts, log);
377
360
  if (powerSimplified)
378
361
  return powerSimplified;
379
362
  if (opts?.towardsDistribute && (isAddNode(a) || isSubstractNode(a))) {
380
- return add(multiply(a.leftChild, b), multiply(a.rightChild, b)).simplify(opts);
363
+ return add(multiply(a.leftChild, b), multiply(a.rightChild, b)).simplify(opts, log);
381
364
  }
382
365
  else if (opts?.towardsDistribute &&
383
366
  (isAddNode(b) || isSubstractNode(b))) {
384
- return add(multiply(a, b.leftChild), multiply(a, b.rightChild)).simplify(opts);
367
+ return add(multiply(a, b.leftChild), multiply(a, b.rightChild)).simplify(opts, log);
385
368
  }
386
369
  //! j'aime po
387
370
  //! doit etre à la fin
@@ -452,29 +435,52 @@ export class MultiplyNode {
452
435
  return add(multiply(this.leftChild.derivative(varName), this.rightChild), multiply(this.leftChild, this.rightChild.derivative(varName)));
453
436
  }
454
437
  }
455
- const powerSimplify = (a, b, opts) => {
438
+ const fractionSimplify = (a, b, opts, log = false) => {
439
+ if (isNumberNode(a) && isFractionNode(b) && b.isNumeric) {
440
+ return new FractionNode(multiply(a, b.leftChild), b.rightChild).simplify(opts, log);
441
+ }
442
+ if (isNumberNode(b) && isFractionNode(a) && a.isNumeric) {
443
+ return new FractionNode(multiply(a.leftChild, b), a.rightChild).simplify(opts, log);
444
+ }
445
+ const aFractionNode = isFractionNode(a) && a.isNumeric
446
+ ? a
447
+ : isOppositeNode(a) && isFractionNode(a.child) && a.child.isNumeric
448
+ ? new FractionNode(opposite(a.child.leftChild), a.child.rightChild)
449
+ : null;
450
+ const bFractionNode = isFractionNode(b) && b.isNumeric
451
+ ? b
452
+ : isOppositeNode(b) && isFractionNode(b.child) && b.child.isNumeric
453
+ ? new FractionNode(opposite(b.child.leftChild), b.child.rightChild)
454
+ : null;
455
+ if (aFractionNode && bFractionNode) {
456
+ if (isFractionNode(b) && b.isNumeric) {
457
+ return new FractionNode(multiply(aFractionNode.leftChild, bFractionNode.leftChild), multiply(aFractionNode.rightChild, bFractionNode.rightChild)).simplify(opts, log);
458
+ }
459
+ }
460
+ };
461
+ const powerSimplify = (a, b, opts, log = false) => {
456
462
  if ((isPowerNode(a) || isSquareNode(a)) &&
457
463
  (isPowerNode(b) || isSquareNode(b))) {
458
464
  if (a.leftChild.toTex() === b.leftChild.toTex())
459
- return new PowerNode(a.leftChild, new AddNode(a.rightChild, b.rightChild).simplify(opts)).simplify(opts);
465
+ return new PowerNode(a.leftChild, new AddNode(a.rightChild, b.rightChild).simplify(opts, log)).simplify(opts, log);
460
466
  }
461
467
  if (isVariableNode(a)) {
462
468
  if (isVariableNode(b) && b.toTex() === a.toTex() && opts?.keepPowers)
463
- return new PowerNode(a, new NumberNode(2)).simplify(opts);
469
+ return new PowerNode(a, new NumberNode(2)).simplify(opts, log);
464
470
  if ((isPowerNode(b) || isSquareNode(b)) &&
465
471
  b.leftChild.toTex() === a.toTex()) {
466
- return new PowerNode(a, new AddNode(new NumberNode(1), b.rightChild).simplify(opts)).simplify(opts);
472
+ return new PowerNode(a, new AddNode(new NumberNode(1), b.rightChild).simplify(opts, log)).simplify(opts, log);
467
473
  }
468
474
  }
469
475
  if (isVariableNode(b)) {
470
476
  if (isVariableNode(a) && a.toTex() === b.toTex() && opts?.keepPowers)
471
- return new PowerNode(b, new NumberNode(2)).simplify(opts);
477
+ return new PowerNode(b, new NumberNode(2)).simplify(opts, log);
472
478
  if ((isPowerNode(a) || isSquareNode(a)) &&
473
479
  a.leftChild.toTex() === b.toTex()) {
474
- return new PowerNode(b, new AddNode(new NumberNode(1), a.rightChild).simplify(opts)).simplify(opts);
480
+ return new PowerNode(b, new AddNode(new NumberNode(1), a.rightChild).simplify(opts, log)).simplify(opts, log);
475
481
  }
476
482
  }
477
483
  if (isExpNode(a) && isExpNode(b)) {
478
- return new ExpNode(add(a.child, b.child)).simplify(opts);
484
+ return new ExpNode(add(a.child, b.child)).simplify(opts, log);
479
485
  }
480
486
  };
@@ -28,7 +28,7 @@ export declare class PowerNode implements OperatorNode {
28
28
  toTex(opts?: ToTexOptions): string;
29
29
  evaluate(vars?: Record<string, number>): number;
30
30
  toDetailedEvaluation(vars: Record<string, AlgebraicNode>): PowerNode;
31
- simplify(opts?: SimplifyOptions): AlgebraicNode;
31
+ simplify(opts?: SimplifyOptions, log?: boolean): AlgebraicNode;
32
32
  equals(node: AlgebraicNode): boolean;
33
33
  derivative(varName?: string | undefined): AlgebraicNode;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"powerNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/powerNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,UAAU,CAErD;AACD,eAAO,MAAM,MAAM,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,eAKxD,CAAC;AAEF,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,cAOnB,CAAC;AAEF,qBAAa,SAAU,YAAW,YAAY;IAC5C,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,YAAY,IAAI,MAAM;IAGtB,aAAa;;;;;;;;;IAOb,iBAAiB;IAqBjB,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM;IAuBlC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,aAAa;IA6D/C,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAcxD;AAED,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;CAIrD"}
1
+ {"version":3,"file":"powerNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/operators/powerNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,UAAU,CAErD;AACD,eAAO,MAAM,MAAM,MAAO,aAAa,GAAG,MAAM,GAAG,MAAM,eAKxD,CAAC;AAEF,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,KAC/B,aAAa,GAAG,MAAM,GAAG,MAAM,SAC3B,WAAW,cAOnB,CAAC;AAEF,qBAAa,SAAU,YAAW,YAAY;IAC5C,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,YAAY,IAAI,MAAM;IAGtB,aAAa;;;;;;;;;IAOb,iBAAiB;IAqBjB,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM;IAuBlC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAOxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,UAAQ,GAAG,aAAa;IA6D5D,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAOpC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAcxD;AAED,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;CAIrD"}
@@ -101,7 +101,7 @@ export class PowerNode {
101
101
  toDetailedEvaluation(vars) {
102
102
  return new PowerNode(this.leftChild.toDetailedEvaluation(vars), this.rightChild.toDetailedEvaluation(vars));
103
103
  }
104
- simplify(opts) {
104
+ simplify(opts, log = false) {
105
105
  const leftSimplified = this.leftChild.simplify(opts);
106
106
  const rightSimplified = this.rightChild.simplify(opts);
107
107
  const copy = new PowerNode(leftSimplified, rightSimplified, this.opts);
@@ -0,0 +1,15 @@
1
+ import { RandfloatProps } from "../../math/utils/random/randfloat.js";
2
+ import { RandintProps } from "../../math/utils/random/randint.js";
3
+ export declare enum RealType {
4
+ Integer = 0,
5
+ Decimal = 1,
6
+ Rational = 2,
7
+ Irrational = 3
8
+ }
9
+ type RandomGeneratorOptions = {
10
+ int?: RandintProps;
11
+ dec?: RandfloatProps;
12
+ };
13
+ export declare const randomReal: (props: RandomGeneratorOptions) => number;
14
+ export {};
15
+ //# sourceMappingURL=randomReal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"randomReal.d.ts","sourceRoot":"","sources":["../../../src/tree/nodes/randomReal.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,cAAc,EACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAW,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAE3E,oBAAY,QAAQ;IAClB,OAAO,IAAA;IACP,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,UAAU,IAAA;CACX;AAED,KAAK,sBAAsB,GAAG;IAC5B,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,cAAc,CAAC;CACtB,CAAC;AAMF,eAAO,MAAM,UAAU,UAAW,sBAAsB,WA0BvD,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { randfloat, } from "../../math/utils/random/randfloat.js";
2
+ import { randint } from "../../math/utils/random/randint.js";
3
+ export var RealType;
4
+ (function (RealType) {
5
+ RealType[RealType["Integer"] = 0] = "Integer";
6
+ RealType[RealType["Decimal"] = 1] = "Decimal";
7
+ RealType[RealType["Rational"] = 2] = "Rational";
8
+ RealType[RealType["Irrational"] = 3] = "Irrational";
9
+ })(RealType || (RealType = {}));
10
+ export const randomReal = (props) => {
11
+ //!should be done in a type
12
+ const [type, opts] = Object.entries(props)[0];
13
+ if (Object.keys(props).length !== 1)
14
+ throw new Error("misused randomReal");
15
+ switch (type) {
16
+ case "int": {
17
+ return randint(...opts.int);
18
+ }
19
+ case "dec": {
20
+ return randfloat(...opts.dec);
21
+ }
22
+ // case "ratio": {
23
+ // }
24
+ // case "irratio": {
25
+ // //pi, e , sqrt
26
+ // }
27
+ // case RealType.Rational:
28
+ // return sign * Math.random();
29
+ // case RealType.Irrational:
30
+ // return sign * Math.random();
31
+ }
32
+ };
@@ -8,7 +8,7 @@ import { SinNode } from "../nodes/functions/sinNode.js";
8
8
  import { SqrtNode } from "../nodes/functions/sqrtNode.js";
9
9
  import { InequationNode } from "../nodes/inequations/inequationNode.js";
10
10
  import { MinusInfinityNode, PlusInfinityNode, } from "../nodes/numbers/infiniteNode.js";
11
- import { NumberNode, isNumberNode } from "../nodes/numbers/numberNode.js";
11
+ import { NumberNode } from "../nodes/numbers/numberNode.js";
12
12
  import { PiNode } from "../nodes/numbers/piNode.js";
13
13
  import { AddNode } from "../nodes/operators/addNode.js";
14
14
  import { BinomialCoefficientNode } from "../nodes/operators/binomialCoefficientNode.js";
@@ -432,13 +432,14 @@ const buildTreeForSameDepthTokens = (tokens) => {
432
432
  const token = tempTokens[i];
433
433
  if (!currentAdd) {
434
434
  if (typeof token === "string") {
435
- //ici on accepte +3 (mais seulement en début de tree)
435
+ //ici on accepte +"node" (mais seulement en début de tree)
436
436
  //donc +3 + X est ok
437
437
  //mais pas x \\times +3
438
438
  if (token === "+" &&
439
439
  !!tempTokens[i + 1] &&
440
- typeof tempTokens[i + 1] !== "string" &&
441
- isNumberNode(tempTokens[i + 1])) {
440
+ typeof tempTokens[i + 1] !== "string"
441
+ // && isNumberNode(tempTokens[i + 1] as AlgebraicNode
442
+ ) {
442
443
  currentAdd = tempTokens[i + 1];
443
444
  i++;
444
445
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "math-exercises",
3
3
  "type": "module",
4
- "version": "3.0.107",
4
+ "version": "3.0.108",
5
5
  "description": "Math exercises generator for middle school and high school",
6
6
  "main": "lib/index.js",
7
7
  "files": [