# PatrickMcSweeny's solution

## to Matrix in the JavaScript Track

Published at Aug 28 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[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 with no corresponding column', () => {
expect(new Matrix('1 2 3\n4 5 6\n7 8 9\n8 7 6').rows[3]).toEqual([8, 7, 6]);
});

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 with no corresponding row', () => {
expect(new Matrix('1 2 3 4\n5 6 7 8\n9 8 7 6').columns[3]).toEqual([4, 8, 6]);
});

xtest('can extract column from non-square matrix with more columns than rows', () => {
expect(new Matrix('1 2 3\n4 5 6').columns[2]).toEqual([3, 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]);
});
});``````
``````export class Matrix {
constructor(matrix) {
this.matrixRows = matrix
.split("\n")
.map(row => row.split(" ").map(Number));

this.matrixColumns = this.rows.map((col, i) =>
this.rows.map(row => row[i])
);
}

get rows() {
return this.matrixRows;
}

get columns() {
return this.matrixColumns;
}
}``````