|
1 | 1 | export class Matrix {
|
2 | 2 | constructor(string) {
|
3 | | - this.matrix = string; |
4 | | - this.firstLineNumber = new RegExp(/^([0-9]+)/gm) |
5 | | - this.leadingWhitespace = new RegExp(/^[\t]+/gm) |
| 3 | + this._rows = this.splitInRows(string) |
| 4 | + this._columns = this.splitInColumns(string) |
6 | 5 | }
|
7 | 6 |
|
8 | | - splitInRows(stringMatrix) { |
9 | | - return stringMatrix.split('\n').map( entry => entry.split(' ').map(entry => parseInt(entry, 10))) |
| 7 | + splitInRows(matrix) { |
| 8 | + return matrix.split('\n').map( entry => entry.split(' ').map(entry => parseInt(entry, 10))) |
10 | 9 | }
|
11 | 10 |
|
12 | | - splitInColumns(stringMatrix) { |
| 11 | + splitInColumns(matrix) { |
| 12 | + const firstLineNumber = new RegExp(/^([0-9]+)/gm) |
| 13 | + const leadingWhitespace = new RegExp(/^[\t]+/gm) |
13 | 14 | const columns = []
|
14 | 15 |
|
15 | | - let matrixToWorkOn = stringMatrix |
| 16 | + let matrixToWorkOn = matrix |
| 17 | + |
16 | 18 | while (matrixToWorkOn.trim().length) {
|
17 | | - const column = matrixToWorkOn.match(this.firstLineNumber).map(entry => parseInt(entry, 10)) |
| 19 | + const column = matrixToWorkOn.match(firstLineNumber).map(entry => parseInt(entry, 10)) |
18 | 20 | columns.push([... column])
|
19 | | - matrixToWorkOn = matrixToWorkOn.replace(this.firstLineNumber, '').replace(this.leadingWhitespace, '') |
| 21 | + |
| 22 | + matrixToWorkOn = matrixToWorkOn.replace(firstLineNumber, '').replace(leadingWhitespace, '') |
20 | 23 | }
|
21 | 24 | return columns
|
22 | 25 | }
|
23 | 26 |
|
24 | 27 | get rows() {
|
25 | | - return this.splitInRows(this.matrix) |
| 28 | + return this._rows |
26 | 29 | }
|
27 | 30 |
|
28 | 31 | get columns() {
|
29 | | - return this.splitInColumns(this.matrix) |
| 32 | + return this._columns |
30 | 33 | }
|
31 | 34 | }
|
0 commit comments