 # thekeele's solution

## to Matrix in the JavaScript Track

Published at Aug 06 2019 · 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:

``````    1  2  3
|---------
1 | 9  8  7
2 | 5  3  2
3 | 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).toEqual();
});

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

xtest('extract row where numbers have different widths', () => {
expect(new Matrix('1 2\n10 20').rows).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).toEqual([7, 8, 9]);
});

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

xtest('can extract column', () => {
expect(new Matrix('1 2 3\n4 5 6\n7 8 9').columns).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).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).toEqual([1903, 3, 4]);
});
});``````
``````export class Matrix {
constructor(matrix_string) {
this.data = [];
for (const row of matrix_string.split("\n")) {
this.data.push(row.split(" ").map(Number));
}
}

get rows() {
return this.data;
}

get columns() {
let columns = [];
for (let i = 0; i < this.data.length; i++) {
columns.push(this.data.map(function(row) {return row[i];}))
}
return columns;
}
}``````