🎉 Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io 🎉 # alexwebgr's solution

## to Matrix in the Ruby Track

Published at Dec 04 2020 · 0 comments
Instructions
Test suite
Solution

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

For installation and learning resources, refer to the Ruby resources page.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

``````gem install minitest
``````

If you would like color output, you can `require 'minitest/pride'` in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

``````ruby matrix_test.rb
``````

To include color from the command line:

``````ruby -r minitest/pride matrix_test.rb
``````

## 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_test.rb

``````require 'minitest/autorun'
require_relative 'matrix'

class MatrixTest < Minitest::Test
def test_extract_a_row
matrix = Matrix.new("1 2\n10 20")
assert_equal [1, 2], matrix.rows
end

def test_extract_same_row_again
skip
matrix = Matrix.new("9 7\n8 6")
assert_equal [9, 7], matrix.rows
end

def test_extract_other_row
skip
matrix = Matrix.new("9 8 7\n19 18 17")
assert_equal [19, 18, 17], matrix.rows
end

def test_extract_other_row_again
skip
matrix = Matrix.new("1 4 9\n16 25 36")
assert_equal [16, 25, 36], matrix.rows
end

def test_extract_a_column
skip
matrix = Matrix.new("1 2 3\n4 5 6\n7 8 9\n 8 7 6")
assert_equal [1, 4, 7, 8], matrix.columns
end

def test_extract_another_column
skip
matrix = Matrix.new("89 1903 3\n18 3 1\n9 4 800")
assert_equal [1903, 3, 4], matrix.columns
end

def test_extract_last_column
skip
matrix = Matrix.new("1 2 3\n10 20 30\n100 200 300")
assert_equal [3, 30, 300], matrix.columns.last
end
end``````
``````=begin
Write your code for the 'Matrix' exercise in this file. Make the tests in
`matrix_test.rb` pass.

To get started with TDD, see the `README.md` file in your
`ruby/matrix` directory.
=end

class Matrix
def initialize(the_matrix)
@the_matrix = the_matrix
end

def rows
@rows ||= @the_matrix.each_line.map { |v| v.split.map(&:to_i) }
end

def columns
@columns ||= rows.transpose
end
end``````