forked from root/public
![aug.ornelas@gmail.com](/git/assets/img/avatar_default.png)
4 changed files with 141 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||||
|
# This file is automatically @generated by Cargo. |
||||||
|
# It is not intended for manual editing. |
||||||
|
[[package]] |
||||||
|
name = "lalgebra_scalar" |
||||||
|
version = "0.1.0" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "matrix" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"lalgebra_scalar", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "matrix_test" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"matrix", |
||||||
|
] |
@ -0,0 +1,10 @@ |
|||||||
|
[package] |
||||||
|
name = "matrix_test" |
||||||
|
version = "0.1.0" |
||||||
|
authors = ["Augusto <aug.ornelas@gmail.com>"] |
||||||
|
edition = "2018" |
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
matrix = { path = "../../../../rust-piscine-solutions/matrix"} |
@ -0,0 +1,55 @@ |
|||||||
|
// First exercise
|
||||||
|
|
||||||
|
// # Instructions
|
||||||
|
// Define a data structure to represent a matrix of any size and
|
||||||
|
// implement the basic operations for this you will need to follow the
|
||||||
|
// next steps:
|
||||||
|
|
||||||
|
// You can use a 2 dimensional Vec<T>'s
|
||||||
|
// We will consider a matrix as a rectangular arrangements of scalars
|
||||||
|
// You can use the definition of scalars done in the last exercise:
|
||||||
|
// `lalgebra_scalar`
|
||||||
|
|
||||||
|
// Then define the associated function `identity` that returns the identity matrix
|
||||||
|
// of size n
|
||||||
|
// Ex:
|
||||||
|
// Matrix::identity(3) == [[1,0,0], [0,1,0], [0,0,1]]
|
||||||
|
|
||||||
|
// And the associated function `zero` that returns a matrix of size
|
||||||
|
// `row x col` with all the positions filled by zeroes
|
||||||
|
// Ex:
|
||||||
|
// Matrix::zero(3, 3) == [[0,0,0],[0,0,0],[0,0,0]]
|
||||||
|
|
||||||
|
// Resources: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
|
||||||
|
|
||||||
|
use matrix::Matrix; |
||||||
|
|
||||||
|
#[allow(dead_code)] |
||||||
|
fn main() { |
||||||
|
let m: Matrix<u32> = Matrix(vec![vec![0, 0, 0, 0], vec![0, 0, 0, 0], vec![0, 0, 0, 0]]); |
||||||
|
println!("{:?}", m); |
||||||
|
println!("{:?}", Matrix::<i32>::identity(4)); |
||||||
|
println!("{:?}", Matrix::<i32>::zero(3, 4)); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn zero_property() { |
||||||
|
let matrix: Matrix<u32> = Matrix::zero(3, 4); |
||||||
|
let expected: Matrix<u32> = Matrix(vec![vec![0, 0, 0, 0], vec![0, 0, 0, 0], vec![0, 0, 0, 0]]); |
||||||
|
assert_eq!(matrix, expected); |
||||||
|
|
||||||
|
let matrix: Matrix<u32> = Matrix::zero(2, 2); |
||||||
|
let expected: Matrix<u32> = Matrix(vec![vec![0, 0], vec![0, 0]]); |
||||||
|
assert_eq!(matrix, expected); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn identy_matrix() { |
||||||
|
let matrix: Matrix<u32> = Matrix::identity(2); |
||||||
|
let expected: Matrix<u32> = Matrix(vec![vec![1, 0], vec![0, 1]]); |
||||||
|
assert_eq!(matrix, expected); |
||||||
|
|
||||||
|
let matrix: Matrix<u32> = Matrix::identity(3); |
||||||
|
let expected: Matrix<u32> = Matrix(vec![vec![1, 0, 0], vec![0, 1, 0], vec![0, 0, 1]]); |
||||||
|
assert_eq!(matrix, expected); |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
## matrix |
||||||
|
|
||||||
|
### Instructions |
||||||
|
|
||||||
|
Define a data structure to represent a matrix of any size and implement the basic operations for this you will need to follow the next steps: |
||||||
|
|
||||||
|
You can use a 2 dimensional Vec<T>'s We will consider a matrix as a rectangular arrangements of scalars. |
||||||
|
|
||||||
|
You have to use the definition of scalars done in the last exercise: `lalgebra_scalar` |
||||||
|
|
||||||
|
Then define the associated function `identity` that returns the identity matrix of size n |
||||||
|
|
||||||
|
And the associated function `zero` that returns a matrix of size `row x col` with all the positions filled by zeroes |
||||||
|
|
||||||
|
### Notions |
||||||
|
|
||||||
|
[Traits]( https://doc.rust-lang.org/book/ch19-03-advanced-traits.html ) |
||||||
|
|
||||||
|
### Expected Functions and Structure |
||||||
|
|
||||||
|
```rust |
||||||
|
pub struct Matrix<T>(pub Vec<Vec<T>>); |
||||||
|
|
||||||
|
impl Matrix<T> { |
||||||
|
pub fn new() -> Matrix<T> { |
||||||
|
} |
||||||
|
|
||||||
|
pub fn zero(row: usize, col: usize) -> Matrix<T> { |
||||||
|
} |
||||||
|
|
||||||
|
pub fn identity(n: usize) -> Matrix<T> { |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
Here is a program to test your function. |
||||||
|
|
||||||
|
```rust |
||||||
|
fn main() { |
||||||
|
let m: Matrix<u32> = Matrix(vec![vec![0, 0, 0, 0], vec![0, 0, 0, 0], vec![0, 0, 0, 0]]); |
||||||
|
println!("{:?}", m); |
||||||
|
println!("{:?}", Matrix::<i32>::identity(4)); |
||||||
|
println!("{:?}", Matrix::<f64>::zero(3, 4)); |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
And its output |
||||||
|
|
||||||
|
```console |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ cargo run |
||||||
|
Matrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) |
||||||
|
Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) |
||||||
|
Matrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ |
||||||
|
``` |
Loading…
Reference in new issue