pimath 0.0.32 → 0.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pi.js +6537 -1
- package/dist/pi.js.map +1 -1
- package/dist/pi.min.js +2 -0
- package/dist/pi.min.js.map +1 -0
- package/docs/assets/search.js +1 -1
- package/docs/classes/algebra.Equation.html +9 -9
- package/docs/classes/algebra.LinearSystem.html +1 -1
- package/docs/classes/algebra.Logicalset.html +2 -2
- package/docs/classes/algebra.Monom.html +37 -37
- package/docs/classes/algebra.Polynom.html +10 -10
- package/docs/classes/algebra.PolynomExpFactor.html +1 -1
- package/docs/classes/algebra.PolynomExpProduct.html +1 -1
- package/docs/classes/algebra.Rational.html +2 -2
- package/docs/classes/coefficients.Fraction.html +4 -4
- package/docs/classes/coefficients.Nthroot.html +1 -1
- package/docs/classes/geometry.Circle.html +2 -2
- package/docs/classes/geometry.Line.html +2 -2
- package/docs/classes/geometry.Point.html +1 -1
- package/docs/classes/geometry.Triangle.html +5 -5
- package/docs/classes/geometry.Vector.html +1 -1
- package/docs/classes/numeric.Numeric.html +5 -5
- package/docs/classes/shutingyard.Shutingyard.html +4 -4
- package/docs/enums/geometry.LinePropriety.html +1 -0
- package/docs/enums/shutingyard.ShutingyardMode.html +1 -1
- package/docs/enums/shutingyard.ShutingyardType.html +1 -1
- package/docs/interfaces/geometry.remarquableLines.html +1 -1
- package/docs/modules/algebra.html +1 -1
- package/docs/modules/coefficients.html +1 -1
- package/docs/modules/geometry.html +1 -1
- package/docs/modules/random.Random.html +1 -1
- package/docs/modules/random.html +1 -1
- package/docs/modules/shutingyard.html +1 -1
- package/esm/main.d.ts +30 -1
- package/esm/main.js +4 -1
- package/esm/main.js.map +1 -1
- package/esm/maths/algebra/equation.d.ts +62 -17
- package/esm/maths/algebra/equation.js +597 -502
- package/esm/maths/algebra/equation.js.map +1 -1
- package/esm/maths/algebra/index.js +5 -1
- package/esm/maths/algebra/index.js.map +1 -1
- package/esm/maths/algebra/linearSystem.js +154 -101
- package/esm/maths/algebra/linearSystem.js.map +1 -1
- package/esm/maths/algebra/logicalset.d.ts +11 -0
- package/esm/maths/algebra/logicalset.js +18 -6
- package/esm/maths/algebra/logicalset.js.map +1 -1
- package/esm/maths/algebra/monom.d.ts +144 -0
- package/esm/maths/algebra/monom.js +626 -398
- package/esm/maths/algebra/monom.js.map +1 -1
- package/esm/maths/algebra/polynom.d.ts +49 -0
- package/esm/maths/algebra/polynom.js +995 -712
- package/esm/maths/algebra/polynom.js.map +1 -1
- package/esm/maths/algebra/rational.d.ts +12 -0
- package/esm/maths/algebra/rational.js +97 -82
- package/esm/maths/algebra/rational.js.map +1 -1
- package/esm/maths/coefficients/fraction.d.ts +18 -0
- package/esm/maths/coefficients/fraction.js +390 -332
- package/esm/maths/coefficients/fraction.js.map +1 -1
- package/esm/maths/coefficients/index.js +5 -1
- package/esm/maths/coefficients/index.js.map +1 -1
- package/esm/maths/coefficients/nthroot.d.ts +3 -0
- package/esm/maths/coefficients/nthroot.js +48 -33
- package/esm/maths/coefficients/nthroot.js.map +1 -1
- package/esm/maths/expressions/numexp.js +11 -3
- package/esm/maths/expressions/numexp.js.map +1 -1
- package/esm/maths/expressions/polynomexp.bkp.js +93 -93
- package/esm/maths/expressions/polynomexp.bkp.js.map +1 -1
- package/esm/maths/expressions/polynomexp.js +22 -9
- package/esm/maths/expressions/polynomexp.js.map +1 -1
- package/esm/maths/geometry/circle.d.ts +18 -6
- package/esm/maths/geometry/circle.js +139 -42
- package/esm/maths/geometry/circle.js.map +1 -1
- package/esm/maths/geometry/index.js +5 -1
- package/esm/maths/geometry/index.js.map +1 -1
- package/esm/maths/geometry/line.d.ts +9 -2
- package/esm/maths/geometry/line.js +245 -188
- package/esm/maths/geometry/line.js.map +1 -1
- package/esm/maths/geometry/point.d.ts +12 -0
- package/esm/maths/geometry/point.js +121 -73
- package/esm/maths/geometry/point.js.map +1 -1
- package/esm/maths/geometry/triangle.d.ts +23 -1
- package/esm/maths/geometry/triangle.js +197 -158
- package/esm/maths/geometry/triangle.js.map +1 -1
- package/esm/maths/geometry/vector.d.ts +5 -1
- package/esm/maths/geometry/vector.js +139 -115
- package/esm/maths/geometry/vector.js.map +1 -1
- package/esm/maths/numeric.d.ts +17 -0
- package/esm/maths/numeric.js +40 -0
- package/esm/maths/numeric.js.map +1 -1
- package/esm/maths/random/index.js +5 -1
- package/esm/maths/random/index.js.map +1 -1
- package/esm/maths/random/randomCore.js +15 -15
- package/esm/maths/random/randomCore.js.map +1 -1
- package/esm/maths/random/rndFraction.d.ts +3 -0
- package/esm/maths/random/rndFraction.js +19 -16
- package/esm/maths/random/rndFraction.js.map +1 -1
- package/esm/maths/random/rndHelpers.d.ts +17 -0
- package/esm/maths/random/rndHelpers.js +20 -0
- package/esm/maths/random/rndHelpers.js.map +1 -1
- package/esm/maths/random/rndMonom.d.ts +3 -0
- package/esm/maths/random/rndMonom.js +33 -26
- package/esm/maths/random/rndMonom.js.map +1 -1
- package/esm/maths/random/rndPolynom.d.ts +3 -0
- package/esm/maths/random/rndPolynom.js +49 -37
- package/esm/maths/random/rndPolynom.js.map +1 -1
- package/esm/maths/shutingyard.d.ts +21 -0
- package/esm/maths/shutingyard.js +86 -9
- package/esm/maths/shutingyard.js.map +1 -1
- package/package.json +2 -2
- package/public/index.html +47 -0
- package/src/main.ts +2 -2
- package/src/maths/algebra/equation.ts +142 -128
- package/src/maths/algebra/monom.ts +6 -2
- package/src/maths/algebra/polynom.ts +2 -7
- package/src/maths/geometry/circle.ts +168 -75
- package/src/maths/geometry/index.ts +1 -1
- package/src/maths/geometry/line.ts +1 -1
- package/src/maths/geometry/point.ts +25 -2
- package/src/maths/geometry/triangle.ts +1 -1
- package/src/maths/geometry/vector.ts +1 -1
- package/src/maths/numeric.ts +15 -0
- package/tests/algebra/polynom.test.ts +7 -0
- package/tests/geometry/circle.test.ts +33 -0
- package/tsconfig.json +2 -2
- package/webpack-production-min.config.js +26 -0
- package/webpack-production.config.js +1 -1
- package/dev/pi.js +0 -5392
- package/dev/pi.js.map +0 -1
package/esm/maths/shutingyard.js
CHANGED
|
@@ -21,16 +21,27 @@ var ShutingyardMode;
|
|
|
21
21
|
ShutingyardMode["NUMERIC"] = "numeric";
|
|
22
22
|
})(ShutingyardMode = exports.ShutingyardMode || (exports.ShutingyardMode = {}));
|
|
23
23
|
class Shutingyard {
|
|
24
|
-
_rpn = [];
|
|
25
|
-
_mode;
|
|
26
|
-
_tokenConfig;
|
|
27
|
-
_tokenConstant;
|
|
28
|
-
_uniformize;
|
|
29
|
-
_tokenKeys;
|
|
30
24
|
constructor(mode) {
|
|
25
|
+
this._rpn = [];
|
|
31
26
|
this._mode = typeof mode === 'undefined' ? ShutingyardMode.POLYNOM : mode;
|
|
32
27
|
this.tokenConfigInitialization();
|
|
33
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Determin if the token is a defined operation
|
|
31
|
+
* Defined operations: + - * / ^ sin cos tan
|
|
32
|
+
* @param token
|
|
33
|
+
*/
|
|
34
|
+
// isOperation(token: string): boolean {
|
|
35
|
+
// if (token[0].match(/[+\-*/^]/g)) {
|
|
36
|
+
// return true;
|
|
37
|
+
// }
|
|
38
|
+
// //
|
|
39
|
+
// // if (token.match(/^sin|cos|tan/g)) {
|
|
40
|
+
// // return true;
|
|
41
|
+
// // }
|
|
42
|
+
//
|
|
43
|
+
// return false;
|
|
44
|
+
// }
|
|
34
45
|
tokenConfigInitialization() {
|
|
35
46
|
if (this._mode === ShutingyardMode.SET) {
|
|
36
47
|
this._tokenConfig = {
|
|
@@ -63,29 +74,45 @@ class Shutingyard {
|
|
|
63
74
|
'/': { precedence: 3, associative: 'left', type: ShutingyardType.OPERATION },
|
|
64
75
|
'+': { precedence: 2, associative: 'left', type: ShutingyardType.OPERATION },
|
|
65
76
|
'-': { precedence: 2, associative: 'left', type: ShutingyardType.OPERATION },
|
|
77
|
+
// '%': {precedence: 3, associative: 'right', type: ShutingyardType.OPERATION},
|
|
78
|
+
// 'sin': {precedence: 4, associative: 'right', type: ShutingyardType.FUNCTION},
|
|
79
|
+
// 'cos': {precedence: 4, associative: 'right', type: ShutingyardType.FUNCTION},
|
|
80
|
+
// 'tan': {precedence: 4, associative: 'right', type: ShutingyardType.FUNCTION},
|
|
66
81
|
};
|
|
67
82
|
this._uniformize = true;
|
|
68
83
|
}
|
|
69
84
|
this._tokenKeys = Object.keys(this._tokenConfig).sort((a, b) => b.length - a.length);
|
|
70
85
|
return this._tokenConfig;
|
|
71
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Get the next token to analyse.
|
|
89
|
+
* @param expr (string) Expression to analyse
|
|
90
|
+
* @param start (number) CUrrent position in the expr string.
|
|
91
|
+
*/
|
|
72
92
|
NextToken(expr, start) {
|
|
73
93
|
let token, tokenType;
|
|
74
94
|
token = '';
|
|
75
95
|
tokenType = '';
|
|
96
|
+
// Case of parenthesis or comma (generic items)
|
|
76
97
|
if (expr[start] === '(') {
|
|
77
98
|
token = '(';
|
|
78
99
|
tokenType = '(';
|
|
79
100
|
}
|
|
101
|
+
// It's a closing parenthese
|
|
80
102
|
else if (expr[start] === ')') {
|
|
81
103
|
token = ')';
|
|
82
104
|
tokenType = ')';
|
|
83
105
|
}
|
|
106
|
+
// It's an argument separator for a function
|
|
84
107
|
else if (expr[start] === ',') {
|
|
85
108
|
token = ',';
|
|
86
109
|
tokenType = 'function-argument';
|
|
87
110
|
}
|
|
88
111
|
else {
|
|
112
|
+
// Order token keys by token characters length (descending)
|
|
113
|
+
// TODO: this is done each time ! SHould be done once !
|
|
114
|
+
// const keys = Object.keys(this._tokenConfig).sort((a,b)=>b.length-a.length)
|
|
115
|
+
// Extract operation and function tokens
|
|
89
116
|
for (let key of this._tokenKeys) {
|
|
90
117
|
if (expr.substring(start, start + key.length) === key) {
|
|
91
118
|
token += key;
|
|
@@ -93,6 +120,7 @@ class Shutingyard {
|
|
|
93
120
|
break;
|
|
94
121
|
}
|
|
95
122
|
}
|
|
123
|
+
// Extract constant
|
|
96
124
|
for (let key in exports.tokenConstant) {
|
|
97
125
|
if (expr.substring(start, start + key.length) === key) {
|
|
98
126
|
token += key;
|
|
@@ -101,6 +129,7 @@ class Shutingyard {
|
|
|
101
129
|
}
|
|
102
130
|
}
|
|
103
131
|
if (token === '') {
|
|
132
|
+
// No function found ! Might be a coefficient !
|
|
104
133
|
if (expr[start].match(/[0-9]/)) {
|
|
105
134
|
if (this._mode === ShutingyardMode.POLYNOM && false) {
|
|
106
135
|
token = expr.substring(start).match(/^([0-9.,/]+)/)[0];
|
|
@@ -123,25 +152,49 @@ class Shutingyard {
|
|
|
123
152
|
}
|
|
124
153
|
return [token, start + token.length, tokenType];
|
|
125
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Sanitize an expression by adding missing common operation (multiplication between parentheseses)
|
|
157
|
+
* @param expr
|
|
158
|
+
* @constructor
|
|
159
|
+
*/
|
|
126
160
|
Uniformizer(expr) {
|
|
161
|
+
// Determiner if need to be uniformized
|
|
127
162
|
if (!this._uniformize) {
|
|
128
163
|
return expr;
|
|
129
164
|
}
|
|
130
165
|
let expr2;
|
|
166
|
+
// Replace missing multiplication between two parenthese
|
|
131
167
|
expr2 = expr.replace(/\)\(/g, ')*(');
|
|
168
|
+
// Replace missing multiplication between number or setLetter and parenthese.
|
|
169
|
+
// 3x(x-4) => 3x*(x-4)
|
|
132
170
|
expr2 = expr2.replace(/([\da-zA-Z])(\()/g, "$1*$2");
|
|
171
|
+
// (x-4)3x => (x-4)*3x
|
|
133
172
|
expr2 = expr2.replace(/(\))([\da-zA-Z])/g, "$1*$2");
|
|
173
|
+
// Add multiplication between number and letters.
|
|
174
|
+
// 3x => 3*x
|
|
134
175
|
expr2 = expr2.replace(/([0-9])([a-zA-Z])/g, "$1*$2");
|
|
135
176
|
expr2 = expr2.replace(/([a-zA-Z])([0-9])/g, "$1*$2");
|
|
177
|
+
// Add multiplication between letters ?
|
|
178
|
+
// TODO: More robust solution to handle all letters ?
|
|
136
179
|
expr2 = expr2.replace(/([abcxyz])([abcxyz])/g, "$1*$2");
|
|
180
|
+
// Restore operation auto formating (prevent adding the mutliplcation star)
|
|
181
|
+
// TODO: Accept list of functions
|
|
137
182
|
let fnToken = ['sin', 'cos', 'tan'];
|
|
138
183
|
for (let token of fnToken) {
|
|
139
184
|
expr2 = expr2.replace(new RegExp(token + '\\*', 'g'), token);
|
|
140
185
|
}
|
|
141
186
|
return expr2;
|
|
142
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Parse an expression using the shutting yard tree algorithms
|
|
190
|
+
* @param expr (string) Expression to analyse
|
|
191
|
+
* Returns a RPN list of items.
|
|
192
|
+
* @param operators
|
|
193
|
+
*/
|
|
143
194
|
parse(expr, operators) {
|
|
144
|
-
let outQueue = [],
|
|
195
|
+
let outQueue = [], // Output queue
|
|
196
|
+
opStack = [], // Operation queue
|
|
197
|
+
token = '', tokenPos = 0, tokenType = '', previousOpStatckLength = 0;
|
|
145
198
|
expr = this.Uniformizer(expr);
|
|
146
199
|
let securityLoopLvl1 = 50, securityLoopLvl2_default = 50, securityLoopLvl2;
|
|
147
200
|
while (tokenPos < expr.length) {
|
|
@@ -150,6 +203,7 @@ class Shutingyard {
|
|
|
150
203
|
console.log('SECURITY LEVEL 1 EXIT');
|
|
151
204
|
break;
|
|
152
205
|
}
|
|
206
|
+
// Get the next token and the corresponding new (ending) position
|
|
153
207
|
[token, tokenPos, tokenType] = this.NextToken(expr, tokenPos);
|
|
154
208
|
switch (tokenType) {
|
|
155
209
|
case 'monom':
|
|
@@ -160,30 +214,44 @@ class Shutingyard {
|
|
|
160
214
|
token,
|
|
161
215
|
tokenType
|
|
162
216
|
});
|
|
217
|
+
// if(previousOpStatckLength == opStack.length && outQueue.length>=2){
|
|
218
|
+
// console.log('opStatckLength', outQueue, opStack.length)
|
|
219
|
+
// outQueue.push('*')
|
|
220
|
+
// }
|
|
163
221
|
break;
|
|
164
222
|
case 'operation':
|
|
165
223
|
previousOpStatckLength = opStack.length;
|
|
224
|
+
//If the token is an operator, o1, then:
|
|
166
225
|
if (opStack.length > 0) {
|
|
167
226
|
let opTop = opStack[opStack.length - 1];
|
|
168
227
|
securityLoopLvl2 = +securityLoopLvl2_default;
|
|
169
|
-
while
|
|
228
|
+
//while there is an operator token o2, at the top of the operator stack and
|
|
229
|
+
while (opTop.token in this._tokenConfig && (
|
|
230
|
+
//either o1 is left-associative and its precedence is less than or equal to that of o2,
|
|
231
|
+
(this._tokenConfig[token].associative === 'left' && this._tokenConfig[token].precedence <= this._tokenConfig[opTop.token].precedence)
|
|
170
232
|
||
|
|
233
|
+
//or o1 is right associative, and has precedence less than that of o2,
|
|
171
234
|
(this._tokenConfig[token].associative === 'right' && this._tokenConfig[token].precedence < this._tokenConfig[opTop.token].precedence))) {
|
|
235
|
+
/* Security exit ! */
|
|
172
236
|
securityLoopLvl2--;
|
|
173
237
|
if (securityLoopLvl2 === 0) {
|
|
174
238
|
console.log('SECURITY LEVEL 2 OPERATION EXIT');
|
|
175
239
|
break;
|
|
176
240
|
}
|
|
241
|
+
// Add the operation to the queue
|
|
177
242
|
outQueue.push((opStack.pop()) || { token: '', tokenType: 'operation' });
|
|
243
|
+
// Get the next operation on top of the Stack.
|
|
178
244
|
if (opStack.length === 0) {
|
|
179
245
|
break;
|
|
180
246
|
}
|
|
181
247
|
opTop = opStack[opStack.length - 1];
|
|
182
248
|
}
|
|
183
249
|
}
|
|
250
|
+
//at the end of iteration push o1 onto the operator stack
|
|
184
251
|
opStack.push({ token, tokenType });
|
|
185
252
|
break;
|
|
186
253
|
case 'function-argument':
|
|
254
|
+
// TODO: check if the opStack exist.
|
|
187
255
|
securityLoopLvl2 = +securityLoopLvl2_default;
|
|
188
256
|
while (opStack[opStack.length - 1].token !== '(' && opStack.length > 0) {
|
|
189
257
|
securityLoopLvl2--;
|
|
@@ -196,13 +264,15 @@ class Shutingyard {
|
|
|
196
264
|
break;
|
|
197
265
|
case '(':
|
|
198
266
|
opStack.push({ token, tokenType });
|
|
267
|
+
// Add an empty value if next element is negative.
|
|
199
268
|
if (expr[tokenPos] === '-') {
|
|
200
269
|
outQueue.push({ token: '0', tokenType: 'coefficient' });
|
|
201
270
|
}
|
|
202
271
|
break;
|
|
203
272
|
case ')':
|
|
204
273
|
securityLoopLvl2 = +securityLoopLvl2_default;
|
|
205
|
-
|
|
274
|
+
//Until the token at the top of the stack is a left parenthesis, pop operators off the stack onto the output queue.
|
|
275
|
+
while (opStack[opStack.length - 1].token !== '(' && opStack.length > 1 /*Maybe zero !? */) {
|
|
206
276
|
securityLoopLvl2--;
|
|
207
277
|
if (securityLoopLvl2 === 0) {
|
|
208
278
|
console.log('SECURITY LEVEL 2 CLOSING PARENTHESE EXIT');
|
|
@@ -210,19 +280,26 @@ class Shutingyard {
|
|
|
210
280
|
}
|
|
211
281
|
outQueue.push((opStack.pop()) || { token, tokenType });
|
|
212
282
|
}
|
|
283
|
+
//Pop the left parenthesis from the stack, but not onto the output queue.
|
|
213
284
|
opStack.pop();
|
|
214
285
|
break;
|
|
215
286
|
case 'function':
|
|
216
287
|
opStack.push({ token, tokenType });
|
|
217
288
|
break;
|
|
218
289
|
default:
|
|
290
|
+
// In theory, everything should be handled.
|
|
219
291
|
console.log(`SHUTING YARD: ${tokenType} : ${token} `);
|
|
220
292
|
}
|
|
293
|
+
// Output
|
|
294
|
+
// console.log(outQueue.concat(opStack.reverse()).join(" "));
|
|
221
295
|
}
|
|
296
|
+
// console.log(outQueue.concat(opStack.reverse()));
|
|
222
297
|
this._rpn = outQueue.concat(opStack.reverse());
|
|
223
298
|
return this;
|
|
224
299
|
}
|
|
300
|
+
// Getter
|
|
225
301
|
get rpn() {
|
|
302
|
+
// console.log(this._rpn)
|
|
226
303
|
return this._rpn;
|
|
227
304
|
}
|
|
228
305
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutingyard.js","sourceRoot":"","sources":["../../src/maths/shutingyard.ts"],"names":[],"mappings":";;;AAWa,QAAA,aAAa,GAAyB;IAC/C,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;CACjB,CAAA;AAED,IAAY,eAOX;AAPD,WAAY,eAAe;IACvB,wCAAmB,CAAA;IACnB,8CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;IACrB,kCAAe,CAAA;AACnB,CAAC,EAPW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAO1B;AAED,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,sCAAkB,CAAA;IAClB,8BAAW,CAAA;IACX,sCAAmB,CAAA;AACvB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B;AAID,MAAa,WAAW;
|
|
1
|
+
{"version":3,"file":"shutingyard.js","sourceRoot":"","sources":["../../src/maths/shutingyard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pimath",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "A math library for teacher :)",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "mocha -r ts-node/register 'tests/**/*.test.ts'",
|
|
7
7
|
"dev": "webpack --watch --config webpack.config.js",
|
|
8
|
-
"production": "webpack --config webpack-production.config.js && tsc --build",
|
|
8
|
+
"production": "webpack --config webpack-production.config.js && webpack --config webpack-production-min.config.js && tsc --build",
|
|
9
9
|
"docs": "typedoc"
|
|
10
10
|
},
|
|
11
11
|
"keywords": [
|
package/public/index.html
CHANGED
|
@@ -38,7 +38,54 @@
|
|
|
38
38
|
<div x-html="d"></div>
|
|
39
39
|
<div x-html="i"></div>
|
|
40
40
|
</div>
|
|
41
|
+
|
|
42
|
+
<div x-data="triplets">
|
|
43
|
+
<template x-for="(item, index) of tripletsPytha" :key="index">
|
|
44
|
+
<div x-text="item.join(',')"></div>
|
|
45
|
+
</template>
|
|
46
|
+
</div>
|
|
41
47
|
<script>
|
|
48
|
+
function triplets() {
|
|
49
|
+
let triplets = []
|
|
50
|
+
let n = 9, v
|
|
51
|
+
|
|
52
|
+
for(let u = 2; u<=n; u++){
|
|
53
|
+
v = ( u%2===0 )?1:2
|
|
54
|
+
while(v < u){
|
|
55
|
+
if(Pi.Numeric.gcd(u, v)===1){
|
|
56
|
+
triplets.push([
|
|
57
|
+
u, v,
|
|
58
|
+
u**2-v**2,
|
|
59
|
+
2*u*v,
|
|
60
|
+
u**2+v**2
|
|
61
|
+
])
|
|
62
|
+
}
|
|
63
|
+
v = v + 2
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let target = 13
|
|
68
|
+
// Filtrer les triplets pour n'avoir que les valeurs 15.
|
|
69
|
+
triplets = triplets.filter(x=>x[x.length-1]===target)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// méthode inverse, à partir du triplet.
|
|
74
|
+
triplets = []
|
|
75
|
+
for(let u = 0; u <= target; u++){
|
|
76
|
+
for(let v = 0; v <=target; v++){
|
|
77
|
+
if(u**2+v**2===target**2){
|
|
78
|
+
triplets.push([u, v, target])
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
tripletsPytha: triplets
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
42
89
|
// Should be
|
|
43
90
|
function examplePolynomExpSimple () {
|
|
44
91
|
const F1 = new Pi.PolynomExpFactor('x^2-4x+7', -1),
|
package/src/main.ts
CHANGED
|
@@ -16,8 +16,7 @@ import {
|
|
|
16
16
|
import {Line, Circle, Triangle, Point, Vector} from "./maths/geometry";
|
|
17
17
|
|
|
18
18
|
// Expose as global
|
|
19
|
-
|
|
20
|
-
(<any>window).Pi = {
|
|
19
|
+
export const PiMath = {
|
|
21
20
|
ShutingYard: Shutingyard,
|
|
22
21
|
Numeric: Numeric,
|
|
23
22
|
NumExp: NumExp,
|
|
@@ -40,3 +39,4 @@ import {Line, Circle, Triangle, Point, Vector} from "./maths/geometry";
|
|
|
40
39
|
Circle: Circle
|
|
41
40
|
}
|
|
42
41
|
};
|
|
42
|
+
(<any>window).Pi = PiMath
|