-
Notifications
You must be signed in to change notification settings - Fork 0
/
_stringify.js
57 lines (36 loc) · 1.28 KB
/
_stringify.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
const { isArray, columns, rows } = require('./utils');
const fixed = x => num => num.toFixed(x);
module.exports = function _stringify(m, precision = 2) {
const isTwoDim = isArray(m[0]);
return isTwoDim ? stringify2D(m, precision) : rowMatrix(m, precision);
}
function rowMatrix(m, precision) {
const cols = columns(m);
const fixedPrecision = fixed(precision);
let res = `[ `;
for (let i = 0; i < cols; i++) {
res += ` ${fixedPrecision(m[i])} `;
}
res += ` ]`;
return res;
}
function stringify2D(m, precision) {
const cols = columns(m);
const _rows = rows(m);
const fixedPrecision = fixed(precision);
const howManyEdge = cols === 1 ? 1 : 2;
// this is an arithmetic progression a0 = 2 , n = cols , d = 3
// an = a0 + (n - 1) * d;
const howManySpace = (Math.abs((2 + (cols - 1) * 3) - 3)) + (cols * precision) + (precision ? cols : 0);
let res = `\n ${'_'.repeat(howManyEdge)}${' '.repeat(howManySpace)}${'_'.repeat(howManyEdge)}\n`;
for (let i = 0; i < _rows; i++) {
res += '|';
for (let j = 0; j < cols; j++) {
res += ` ${fixedPrecision(m[i][j])} `;
}
if (i !== _rows - 1) res += '|\n';
else res += '|';
}
res += `\n|${'_'.repeat(howManyEdge)}${'.'.repeat(howManySpace)}${'_'.repeat(howManyEdge)}| \n`;
return res;
}