Skip to content

Commit

Permalink
Matrix (#757)
Browse files Browse the repository at this point in the history
* add practice exercise matrix

* update files
  • Loading branch information
depial authored Jul 19, 2024
1 parent bd63d1f commit e5cc65d
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -985,6 +985,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 3
},
{
"slug": "matrix",
"name": "Matrix",
"uuid": "9d5fb572-32cd-4657-a915-3c2822311af8",
"practices": [],
"prerequisites": [],
"difficulty": 2
}
]
},
Expand Down
38 changes: 38 additions & 0 deletions exercises/practice/matrix/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Instructions

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

So given a string with embedded newlines like:

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

representing this matrix:

```text
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
17 changes: 17 additions & 0 deletions exercises/practice/matrix/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"authors": [],
"files": {
"solution": [
"matrix.jl"
],
"test": [
"runtests.jl"
],
"example": [
".meta/example.jl"
]
},
"blurb": "Given a string representing a matrix of numbers, return the rows and columns of that matrix.",
"source": "Exercise by the JumpstartLab team for students at The Turing School of Software and Design.",
"source_url": "https://turing.edu"
}
9 changes: 9 additions & 0 deletions exercises/practice/matrix/.meta/example.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
function matrix(strmatrix)
M = let mtrx = strmatrix
mtrx = split(mtrx, "\n")
mtrx = split.(mtrx, " ")
mtrx = map(row-> parse.(Int, row), mtrx)
reduce(hcat, mtrx)'
end
collect.((eachrow(M), eachcol(M)))
end
34 changes: 34 additions & 0 deletions exercises/practice/matrix/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[ca733dab-9d85-4065-9ef6-a880a951dafd]
description = "extract row from one number matrix"

[5c93ec93-80e1-4268-9fc2-63bc7d23385c]
description = "can extract row"

[2f1aad89-ad0f-4bd2-9919-99a8bff0305a]
description = "extract row where numbers have different widths"

[68f7f6ba-57e2-4e87-82d0-ad09889b5204]
description = "can extract row from non-square matrix with no corresponding column"

[e8c74391-c93b-4aed-8bfe-f3c9beb89ebb]
description = "extract column from one number matrix"

[7136bdbd-b3dc-48c4-a10c-8230976d3727]
description = "can extract column"

[ad64f8d7-bba6-4182-8adf-0c14de3d0eca]
description = "can extract column from non-square matrix with no corresponding row"

[9eddfa5c-8474-440e-ae0a-f018c2a0dd89]
description = "extract column where numbers have different widths"
4 changes: 4 additions & 0 deletions exercises/practice/matrix/matrix.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
function matrix(strmatrix)
# Your code here
rows, columns
end
45 changes: 45 additions & 0 deletions exercises/practice/matrix/runtests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using Test

include("matrix.jl")

@testset verbose = true "tests" begin
@testset "extract row from one number matrix" begin
rows, columns = matrix("1")
@test rows[1] == [1]
end

@testset "can extract row" begin
rows, columns = matrix("1 2\n3 4")
@test rows[2] == [3, 4]
end

@testset "extract row where numbers have different widths" begin
rows, columns = matrix("1 2\n10 20")
@test rows[2] == [10, 20]
end

@testset "can extract row from non-square matrix with no corresponding column" begin
rows, columns = matrix("1 2 3\n4 5 6\n7 8 9\n8 7 6")
@test rows[4] == [8, 7, 6]
end

@testset "extract column from one number matrix" begin
rows, columns = matrix("1")
@test columns[1] == [1]
end

@testset "can extract column" begin
rows, columns = matrix("1 2 3\n4 5 6\n7 8 9")
@test columns[3] == [3, 6, 9]
end

@testset "can extract column from non-square matrix with no corresponding row" begin
rows, columns = matrix("1 2 3 4\n5 6 7 8\n9 8 7 6")
@test columns[4] == [4, 8, 6]
end

@testset "extract column where numbers have different widths" begin
rows, columns = matrix("89 1903 3\n18 3 1\n9 4 800")
@test columns[2] == [1903, 3, 4]
end
end

0 comments on commit e5cc65d

Please sign in to comment.