Skip to content

Commit

Permalink
Add matrix exercise
Browse files Browse the repository at this point in the history
  • Loading branch information
ErikSchierboom committed Oct 12, 2024
1 parent 11825cf commit c21f4f1
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 1
},
{
"slug": "matrix",
"name": "Matrix",
"uuid": "7a91501a-210f-4082-a029-a0a9fe368623",
"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
19 changes: 19 additions & 0 deletions exercises/practice/matrix/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"erikschierboom"
],
"files": {
"solution": [
"matrix.R"
],
"test": [
"test_matrix.R"
],
"example": [
".meta/example.R"
]
},
"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.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
matrix_row <- function(input, row_idx) {
tbl <- read.table(text = input)
tbl[row_idx,] |> unlist() |> as.vector()

Check warning on line 3 in exercises/practice/matrix/.meta/example.R

View workflow job for this annotation

GitHub Actions / lint

file=/home/runner/work/r/r/exercises/practice/matrix/.meta/example.R,line=3,col=15,[d] Commas should always have a space after.
}

matrix_col <- function(input, col_idx) {
tbl <- read.table(text = input)
tbl[,col_idx] |> unlist() |> as.vector()

Check warning on line 8 in exercises/practice/matrix/.meta/example.R

View workflow job for this annotation

GitHub Actions / lint

file=/home/runner/work/r/r/exercises/practice/matrix/.meta/example.R,line=8,col=8,[d] Commas should always have a space after.
}
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"
7 changes: 7 additions & 0 deletions exercises/practice/matrix/matrix.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
matrix_row <- function(input, row_idx) {

}

matrix_col <- function(input, col_idx) {

}
34 changes: 34 additions & 0 deletions exercises/practice/matrix/test_matrix.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
source("./matrix.R")
library(testthat)

test_that("Extract row from one number matrix", {
expect_equal(matrix_row("1", 1), c(1))
})

test_that("Can extract row", {
expect_equal(matrix_row("1 2\n3 4", 2), c(3, 4))
})

test_that("Extract row where numbers have different widths", {
expect_equal(matrix_row("1 2\n10 20", 2), c(10, 20))
})

test_that("Can extract row from non-square matrix with no corresponding column", { # nolint
expect_equal(matrix_row("1 2 3\n4 5 6\n7 8 9\n8 7 6", 4), c(8, 7, 6))
})

test_that("Extract column from one number matrix", {
expect_equal(matrix_col("1", 1), c(1))
})

test_that("Can extract column", {
expect_equal(matrix_col("1 2 3\n4 5 6\n7 8 9", 3), c(3, 6, 9))
})

test_that("Can extract column from non-square matrix with no corresponding row", { # nolint
expect_equal(matrix_col("1 2 3 4\n5 6 7 8\n9 8 7 6", 4), c(4, 8, 6))
})

test_that("Extract column where numbers have different widths", {
expect_equal(matrix_col("89 1903 3\n18 3 1\n9 4 800", 2), c(1903, 3, 4))
})

0 comments on commit c21f4f1

Please sign in to comment.