From a91507c48391729081ffb7749e234bfef97d6ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:44:32 -0700 Subject: [PATCH] Add matrix --- config.json | 8 ++++ .../practice/matrix/.docs/instructions.md | 38 +++++++++++++++++++ exercises/practice/matrix/.meta/config.json | 19 ++++++++++ .../practice/matrix/.meta/example.coffee | 12 ++++++ exercises/practice/matrix/.meta/tests.toml | 34 +++++++++++++++++ exercises/practice/matrix/matrix.coffee | 8 ++++ exercises/practice/matrix/matrix.spec.coffee | 34 +++++++++++++++++ 7 files changed, 153 insertions(+) create mode 100644 exercises/practice/matrix/.docs/instructions.md create mode 100644 exercises/practice/matrix/.meta/config.json create mode 100644 exercises/practice/matrix/.meta/example.coffee create mode 100644 exercises/practice/matrix/.meta/tests.toml create mode 100644 exercises/practice/matrix/matrix.coffee create mode 100644 exercises/practice/matrix/matrix.spec.coffee diff --git a/config.json b/config.json index 7cae6fb..5db7aa7 100644 --- a/config.json +++ b/config.json @@ -279,6 +279,14 @@ "pattern_recognition" ] }, + { + "slug": "matrix", + "name": "Matrix", + "uuid": "653ae967-32d2-4789-bb43-289ad1572191", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "matching-brackets", "name": "Matching Brackets", diff --git a/exercises/practice/matrix/.docs/instructions.md b/exercises/practice/matrix/.docs/instructions.md new file mode 100644 index 0000000..dadea8a --- /dev/null +++ b/exercises/practice/matrix/.docs/instructions.md @@ -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 diff --git a/exercises/practice/matrix/.meta/config.json b/exercises/practice/matrix/.meta/config.json new file mode 100644 index 0000000..80d9234 --- /dev/null +++ b/exercises/practice/matrix/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "matrix.coffee" + ], + "test": [ + "matrix.spec.coffee" + ], + "example": [ + ".meta/example.coffee" + ] + }, + "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" +} diff --git a/exercises/practice/matrix/.meta/example.coffee b/exercises/practice/matrix/.meta/example.coffee new file mode 100644 index 0000000..caffa62 --- /dev/null +++ b/exercises/practice/matrix/.meta/example.coffee @@ -0,0 +1,12 @@ +class Matrix + constructor: (description) -> + @rows = description.split("\n").map (row) -> + row.split(" ").map (number) -> +number + + row: (index) -> + @rows[index - 1] + + column: (index) -> + @rows.map (row) -> row[index - 1] + +module.exports = Matrix diff --git a/exercises/practice/matrix/.meta/tests.toml b/exercises/practice/matrix/.meta/tests.toml new file mode 100644 index 0000000..90b509c --- /dev/null +++ b/exercises/practice/matrix/.meta/tests.toml @@ -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" diff --git a/exercises/practice/matrix/matrix.coffee b/exercises/practice/matrix/matrix.coffee new file mode 100644 index 0000000..8bb81fe --- /dev/null +++ b/exercises/practice/matrix/matrix.coffee @@ -0,0 +1,8 @@ +class Matrix + constructor: (description) -> + + row: (index) -> + + column: (index) -> + +module.exports = Matrix diff --git a/exercises/practice/matrix/matrix.spec.coffee b/exercises/practice/matrix/matrix.spec.coffee new file mode 100644 index 0000000..4600d56 --- /dev/null +++ b/exercises/practice/matrix/matrix.spec.coffee @@ -0,0 +1,34 @@ +Matrix = require './matrix' + +describe 'Matrix', -> + it 'extract row from one number matrix', -> + matrix = new Matrix "1" + expect(matrix.row 1).toEqual [1] + + xit 'can extract row', -> + matrix = new Matrix "1 2\n3 4" + expect(matrix.row 2).toEqual [3, 4] + + xit 'extract row where numbers have different widths', -> + matrix = new Matrix "1 2\n10 20" + expect(matrix.row 2).toEqual [10, 20] + + xit 'can extract row from non-square matrix with no corresponding column', -> + matrix = new Matrix "1 2 3\n4 5 6\n7 8 9\n8 7 6" + expect(matrix.row 4).toEqual [8, 7, 6] + + xit 'extract column from one number matrix', -> + matrix = new Matrix "1" + expect(matrix.column 1).toEqual [1] + + xit 'can extract column', -> + matrix = new Matrix "1 2 3\n4 5 6\n7 8 9" + expect(matrix.column 3).toEqual [3, 6, 9] + + xit 'can extract column from non-square matrix with no corresponding row', -> + matrix = new Matrix "1 2 3 4\n5 6 7 8\n9 8 7 6" + expect(matrix.column 4).toEqual [4, 8, 6] + + xit 'extract column where numbers have different widths', -> + matrix = new Matrix "89 1903 3\n18 3 1\n9 4 800" + expect(matrix.column 2).toEqual [1903, 3, 4]