# brunnock's solution

## to Matrix in the JavaScript Track

Published at Nov 21 2018 · 0 comments
Instructions
Test suite
Solution

#### Note:

This exercise has changed since this solution was written.

Given a string representing a matrix of numbers, return the rows and columns of that matrix.

So given a string with embedded newlines like:

``````9 8 7
5 3 2
6 6 7
``````

representing this matrix:

``````    0  1  2
|---------
0 | 9  8  7
1 | 5  3  2
2 | 6  6  7
``````

your code should be able to spit out:

• A list of the rows, reading each row left-to-right while moving top-to-bottom across the rows,
• A list of the columns, reading each column top-to-bottom while moving from left-to-right.

The rows for our example matrix:

• 9, 8, 7
• 5, 3, 2
• 6, 6, 7

And its columns:

• 9, 5, 6
• 8, 3, 6
• 7, 2, 7

## Setup

Go through the setup instructions for Javascript to install the necessary dependencies:

https://exercism.io/tracks/javascript/installation

## Requirements

Install assignment dependencies:

``````\$ npm install
``````

## Making the test suite pass

Execute the tests with:

``````\$ npm test
``````

In the test suites all tests but the first have been skipped.

Once you get a test passing, you can enable the next one by changing `xtest` to `test`.

## Source

Warmup to the `saddle-points` warmup. http://jumpstartlab.com

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### matrix.spec.js

``````import Matrix from './matrix';

describe('Matrix', () => {
test('extract row from one number matrix', () => {
expect(new Matrix('1').rows[0]).toEqual([1]);
});

xtest('can extract row', () => {
expect(new Matrix('1 2\n3 4').rows[1]).toEqual([3, 4]);
});

xtest('extract row where numbers have different widths', () => {
expect(new Matrix('1 2\n10 20').rows[1]).toEqual([10, 20]);
});

xtest('can extract row from non-square matrix', () => {
expect(new Matrix('1 2 3\n4 5 6\n7 8 9\n8 7 6').rows[2]).toEqual([7, 8, 9]);
});

xtest('extract column from one number matrix', () => {
expect(new Matrix('1').columns[0]).toEqual([1]);
});

xtest('can extract column', () => {
expect(new Matrix('1 2 3\n4 5 6\n7 8 9').columns[2]).toEqual([3, 6, 9]);
});

xtest('can extract column from non-square matrix', () => {
expect(new Matrix('1 2 3\n4 5 6\n7 8 9\n8 7 6').columns[2]).toEqual([3, 6, 9, 6]);
});

xtest('extract column where numbers have different widths', () => {
expect(new Matrix('89 1903 3\n18 3 1\n9 4 800').columns[1]).toEqual([1903, 3, 4]);
});
});``````
``````class Matrix {
constructor(data) {
this.rows = [];
this.columns=[];
for (let row of data.split(/\n/)) {
let newRow=[];
row.split(/\s/).forEach( (col,index) => {
newRow.push(Number(col));
if (this.columns[index] === undefined) this.columns[index]=[];
this.columns[index].push(Number(col));
})
this.rows.push(newRow);
}
}
}
module.exports = Matrix;``````