forked from root/public
Augusto
4 years ago
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