From 167027b9777beb9fe2e240632e72e0d712e1347a Mon Sep 17 00:00:00 2001 From: davidrobert99 Date: Fri, 27 May 2022 01:37:16 +0100 Subject: [PATCH] update exam exercises --- subjects/blood_types_s/README.md | 5 +-- subjects/brackets_matching/README.md | 33 ++++++++++++------ subjects/brain_fuck/README.md | 10 +++--- subjects/display_table/README.md | 6 ++-- subjects/filter_table/README.md | 16 ++++----- subjects/flat_tree/README.md | 2 +- .../determinant-of-a-3x3-matrix-formula-3.png | Bin 0 -> 14485 bytes 7 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 subjects/matrix_determinant/determinant-of-a-3x3-matrix-formula-3.png diff --git a/subjects/blood_types_s/README.md b/subjects/blood_types_s/README.md index e8bcdf2c..e8a977d9 100644 --- a/subjects/blood_types_s/README.md +++ b/subjects/blood_types_s/README.md @@ -33,12 +33,12 @@ pub enum Antigen { } #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] -enum RhFactor { +pub enum RhFactor { Positive, Negative, } -#[derive(PartialEq, Eq, PartialOrd, Ord, Clone)] +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] pub struct BloodType { pub antigen: Antigen, pub rh_factor: RhFactor, @@ -52,6 +52,7 @@ impl BloodType { } pub fn recipients(&self) -> Vec { + } } ``` diff --git a/subjects/brackets_matching/README.md b/subjects/brackets_matching/README.md index 21960986..d65c4461 100644 --- a/subjects/brackets_matching/README.md +++ b/subjects/brackets_matching/README.md @@ -2,24 +2,35 @@ ### Instructions -Write a program that takes an undefined number of `string` in arguments. For each argument, if the expression is correctly bracketed, the program prints on the standard output `OK` followed by a newline (`'\n'`), otherwise it prints `Error` followed by a newline. +Write a `program` that takes an undefined number of `string` in arguments. For each argument, if the expression is correctly bracketed, the program prints on the standard output `OK` followed by a newline (`'\n'`), otherwise it prints `Error` followed by a newline. Symbols considered as brackets are parentheses `(` and `)`, square brackets `[` and `]` and curly braces `{` and `}`. Every other symbols are simply ignored. -An opening bracket must always be closed by the good closing bracket in the correct order. A `string` which does not contain any bracket is considered as a correctly bracketed `string`. +An opening bracket must always be closed by the good closing bracket in the correct order. A `string` which does not contain any bracket is considered as a correctly bracketed. If there is no argument, the program must print nothing. +For receiving arguments from the command line you should use something like: + +```rust +fn main() { + let args: Vec = std::env::args().collect(); + + //... +} + +``` + ### Usage ```console -$ go run . '(johndoe)' | cat -e -OK$ -$ go run . '([)]' | cat -e -Error$ -$ go run . '' '{[(0 + 0)(1 + 1)](3*(-1)){()}}' | cat -e -OK$ -OK$ -$ go run . -$ +$ cargo run '(johndoe)' | cat -e +OK +$ cargo run '([)]' | cat -e +Error +$ cargo run + +$ cargo run '' '{[(0 + 0)(1 + 1)](3*(-1)){()}}' | cat -e +OK +OK ``` diff --git a/subjects/brain_fuck/README.md b/subjects/brain_fuck/README.md index abcf729d..874dc677 100644 --- a/subjects/brain_fuck/README.md +++ b/subjects/brain_fuck/README.md @@ -5,7 +5,7 @@ Write a `Brainfuck` interpreter program. The source code will be given as first parameter. The code will always be valid, with less than 4096 operations. -`Brainfuck` is a minimalist language. It consists of an array of bytes (in this exercice 2048 bytes) all initialized with zero, and with a pointer to its first byte. +`Brainfuck` is a minimalist language. It consists of an array of bytes (in this exercise 2048 bytes) all initialized with zero, and with a pointer to its first byte. Every operator consists of a single character : @@ -22,11 +22,11 @@ Any other character is a comment. For receiving arguments from the command line you should use something like: ```rust - fn main() { - let args: Vec = std::env::args().collect(); +fn main() { + let args: Vec = std::env::args().collect(); - brain_fuck(&args[1]); - } + brain_fuck(&args[1]); +} ``` diff --git a/subjects/display_table/README.md b/subjects/display_table/README.md index 30894bec..11ee081e 100644 --- a/subjects/display_table/README.md +++ b/subjects/display_table/README.md @@ -2,9 +2,9 @@ ### Instructions -- Implement the `std::fmt::Display` trait for the structure table so that the table is printed like in the **[Usage](#usage)**. The length of each column must adjust to the longest element of the column and the element must be centered in the "cell" when possible. If the length of the element doees not allow to center exactly, it must descend slightly to the right. +- Implement the `std::fmt::Display` trait for the structure table so that the table is printed like in the **[Usage](#usage)**. The length of each column must adjust to the longest element of the column and the element must be centered in the "cell" when possible. If the length of the element does not allow to center exactly, it must be offset slightly to the left. - - Note: If the table is empty `println!` must not print anything. + - Note: If the table is empty (does not have a header), `println!` must not print anything. - Define the associated function `new` which creates a new empty table. @@ -22,7 +22,7 @@ pub struct Table { impl fmt::Display for Table { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - } + } } impl Table { diff --git a/subjects/filter_table/README.md b/subjects/filter_table/README.md index a1663ec1..5b0128b0 100644 --- a/subjects/filter_table/README.md +++ b/subjects/filter_table/README.md @@ -4,17 +4,13 @@ - Define the **functions**: - - new: which creates a new empty table. + - `new`: which creates a new empty table. - - add_rows: which adds a new row to the table from a slice of strings. + - `add_rows`: which adds a new row to the table from a slice of strings. - - filter_cols: which receives a closure which receives a `&str` and returns a `bool` value: + - `filter_cols`: which receives a closure and returns a table with all the columns that yielded true when applying that closure. The closure will receive a `&str` and return a `bool` value. - - filter_cols returns a table with all the columns that yielded true when applied to the header. - - - filter_rows: which receives a closure that receives a `&str` and returns a `bool` value - - - filter_rows returns a table with all the columns that yielded true when applied to the elements of the selected column. + - `filter_rows`: which receives a closure and returns a table with all the rows that yielded true when applied to the elements of the selected column. The closure will receive a `&str` and return a `bool` value. ### Expected functions and Structures @@ -34,11 +30,11 @@ impl Table { } - pub fn filter_col(&self, filter: ) -> Option { + pub fn filter_col(&self, filter: T) -> Option { } - pub fn filter_row(&self, col_name: &str, filter: ) -> Option { + pub fn filter_row(&self, col_name: &str, filter: T) -> Option { } } diff --git a/subjects/flat_tree/README.md b/subjects/flat_tree/README.md index f7f93c2f..786456a4 100644 --- a/subjects/flat_tree/README.md +++ b/subjects/flat_tree/README.md @@ -1,4 +1,4 @@ -## flat_rust +## flat_tree ### Instructions diff --git a/subjects/matrix_determinant/determinant-of-a-3x3-matrix-formula-3.png b/subjects/matrix_determinant/determinant-of-a-3x3-matrix-formula-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a513cdb8acbdd18bb0f448a652631fab1afe728e GIT binary patch literal 14485 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 literal 0 HcmV?d00001