 # B1tF8er's solution

## to Matrix in the C# Track

Published at Aug 24 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

## Running the tests

To run the tests, run the command `dotnet test` from within the exercise directory.

Initially, only the first test will be enabled. This is to encourage you to solve the exercise one step at a time. Once you get the first test passing, remove the `Skip` property from the next test and work on getting that test passing. Once none of the tests are skipped and they are all passing, you can submit your solution using `exercism submit Matrix.cs`

## Further information

For more detailed information about the C# track, including how to get help if you're having trouble, please visit the exercism.io C# language page.

## Source

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

### MatrixTest.cs

``````// This file was auto-generated based on version 1.1.0 of the canonical data.

using Xunit;

public class MatrixTest
{
[Fact]
public void Extract_row_from_one_number_matrix()
{
var sut = new Matrix("1");
Assert.Equal(new[] { 1 }, sut.Row(1));
}

[Fact(Skip = "Remove to run test")]
public void Can_extract_row()
{
var sut = new Matrix("1 2\n3 4");
Assert.Equal(new[] { 3, 4 }, sut.Row(2));
}

[Fact(Skip = "Remove to run test")]
public void Extract_row_where_numbers_have_different_widths()
{
var sut = new Matrix("1 2\n10 20");
Assert.Equal(new[] { 10, 20 }, sut.Row(2));
}

[Fact(Skip = "Remove to run test")]
public void Can_extract_row_from_non_square_matrix()
{
var sut = new Matrix("1 2 3\n4 5 6\n7 8 9\n8 7 6");
Assert.Equal(new[] { 7, 8, 9 }, sut.Row(3));
}

[Fact(Skip = "Remove to run test")]
public void Extract_column_from_one_number_matrix()
{
var sut = new Matrix("1");
Assert.Equal(new[] { 1 }, sut.Column(1));
}

[Fact(Skip = "Remove to run test")]
public void Can_extract_column()
{
var sut = new Matrix("1 2 3\n4 5 6\n7 8 9");
Assert.Equal(new[] { 3, 6, 9 }, sut.Column(3));
}

[Fact(Skip = "Remove to run test")]
public void Can_extract_column_from_non_square_matrix()
{
var sut = new Matrix("1 2 3\n4 5 6\n7 8 9\n8 7 6");
Assert.Equal(new[] { 3, 6, 9, 6 }, sut.Column(3));
}

[Fact(Skip = "Remove to run test")]
public void Extract_column_where_numbers_have_different_widths()
{
var sut = new Matrix("89 1903 3\n18 3 1\n9 4 800");
Assert.Equal(new[] { 1903, 3, 4 }, sut.Column(2));
}
}``````
``````﻿using System;
using System.Linq;

public class Matrix
{

public Matrix(string input)
{
rows = ParseRows(input);
columns = ParseCols(rows);
}

public int Rows => rows.Length;
public int Cols => columns.Length;

public int[] Row(int row) => rows[row - 1];

public int[] Column(int col) => columns[col - 1];

private int[][] ParseRows(string input) =>
input.Split('\n')
.Select(ParseRow)
.ToArray();

private int[] ParseRow(string row) =>
row.Split(' ')
.Select(int.Parse)
.ToArray();

private int[][] ParseCols(int[][] rows) =>
Enumerable.Range(0, rows.Length)
.Select(y => ParseCol(rows, y))
.ToArray();

private int[] ParseCol(int[][] rows, int y) =>
Enumerable.Range(0, rows.Length)
.Select(x => rows[x][y])
.ToArray();
}``````