diff --git a/subjects/brackets_matching/README.md b/subjects/brackets_matching/README.md new file mode 100644 index 00000000..b152bbc2 --- /dev/null +++ b/subjects/brackets_matching/README.md @@ -0,0 +1,25 @@ +## brackets_matching + +### 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. + +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`. + +If there is no argument, the program must print nothing. + +### Usage + +```console +student@ubuntu:~/[[ROOT]]/brackets$ ./brackets '(johndoe)' | cat -e +OK$ +student@ubuntu:~/[[ROOT]]/brackets$ ./brackets '([)]' | cat -e +Error$ +student@ubuntu:~/[[ROOT]]/brackets$ ./brackets '' '{[(0 + 0)(1 + 1)](3*(-1)){()}}' | cat -e +OK$ +OK$ +student@ubuntu:~/[[ROOT]]/brackets$ ./brackets +student@ubuntu:~/[[ROOT]]/brackets$ +``` diff --git a/subjects/inv_pyramid/README.md b/subjects/inv_pyramid/README.md new file mode 100644 index 00000000..c5105286 --- /dev/null +++ b/subjects/inv_pyramid/README.md @@ -0,0 +1,91 @@ +## inv_pyramid + +### Instructions + +Create a function called `inv_pyramid` that takes a `string` as an `integer` and returns a vector of `string`s. +This function should create a pyramid structure. Each element of the vector must be a combination of spaces and the string given + +### Example + +i = 5 + +```console +[ + " >", + " >>", + " >>>", + " >>>>", + " >>>>>", + " >>>>", + " >>>", + " >>", + " >" +] +``` + +### Expected Functions + +```rust +fn inv_pyramid(v: &str, i: u32) -> Vec<&str> {} +``` + +### Usage + +Here is a program to test your function + +```rust +fn main() { + let a = inv_pyramid(String::from("#"), 1); + let b = inv_pyramid(String::from("a"), 2); + let c = inv_pyramid(String::from(">"), 5); + let d = inv_pyramid(String::from("&"), 8); + + for v in a.iter() { + println!("{:?}", v); + } + for v in b.iter() { + println!("{:?}", v); + } + for v in c.iter() { + println!("{:?}", v); + } + for v in d.iter() { + println!("{:?}", v); + } +} +``` + +And its output + +```console +student@ubuntu:~/[[ROOT]]/test$ cargo run +" #" +" a" +" aa" +" a" +" >" +" >>" +" >>>" +" >>>>" +" >>>>>" +" >>>>" +" >>>" +" >>" +" >" +" &" +" &&" +" &&&" +" &&&&" +" &&&&&" +" &&&&&&" +" &&&&&&&" +" &&&&&&&&" +" &&&&&&&" +" &&&&&&" +" &&&&&" +" &&&&" +" &&&" +" &&" +" &" +student@ubuntu:~/[[ROOT]]/test$ +``` diff --git a/subjects/road_intersection/README.md b/subjects/road_intersection/README.md new file mode 100644 index 00000000..b666d00d --- /dev/null +++ b/subjects/road_intersection/README.md @@ -0,0 +1,121 @@ +## road_intersection + +### Objectives + +The objective for this raid is to create a traffic control strategy and represent it with an interface/UI. +Its up to you to decide which library and file system you want do use to create this simulation, but we recommend to use the library [sdl2](https://docs.rs/sdl2/0.34.3/sdl2/) + +### Instructions + +#### **Environment and Rules** + +You must create an environment which contains all the objects described in this section. You can display the objects as you wish. + +1. Roads + +There exists various shapes of intersections, we will focus on the widely seen four-lane intersection. For simplicity each lane will have two directions. + +```console + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | + | r s l | ↑ | +_______________| ← ↓ → | ↑ |_____________ + | ↑ r +← ← ← ← ← ← ← | ← s ← ← ← ← ← + | ↓ l +_________________________|_______________________ + l ↑ | + → → → → → s → | → → → → → → + r ↓ | +_______________ | _____________ + | | ← ↑ → | + | ↓ | r s l | + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | + | ↓ | ↑ | +``` + +For clarification reasons we will assume that a lane can have three different routes (consider you are in the vehicle position): + +- `r`, turning right +- `s`, straight ahead +- `l`, turning left + +2. Traffic lights + +Traffic lights are signalling devices positioned at road intersections that follows an universal color code, +normally its green, red and amber, but for this project you will just use the colors **red** and **green**. + +You will then have to create some kind of representation for the traffic lights and distribute them for each lane in the intersection. + +You are free to decide what algorithm you want to implement for the traffic light system, but keep in mind that traffic congestion should not be to high. + +3. Vehicles + +``` + ______ + /|_||_\`.__ +=`-(_)--(_)-' +``` + +Vehicles must obey this rules: + +- Vehicles must have a color depending on their route the colors are up to you to decide(ex:`r`- purple, `s`- Blue and `l`- Yellow). This must then be given during the audit + +- Autonomous, vehicles driving on a lane with a **given route** must follow the direction of +that route, its not possible for the driver to change lanes or route. + +- Each vehicle must have a fixed velocity. + +- It must be kept a safety distance from other vehicles, if one vehicle stops the other vehicle thats +behind him must stop and keep its distance. + +- Vehicles must stop if the traffic light is red and proceed otherwise. + +- Vehicles must have different routes, either `r`, `s` or `l`. + +- Other vehicles such as emergency vehicles are not considered. + +--- + +#### **Commands** + +The generating of vehicle must be done using the keyboard event. You must be able to generate +vehicles in different lanes and with different routes. + +For this it must be possible to do the following: + +- The `Arrow` keys must generate one vehicle in a specific direction and with a random route ( `r`, `s` and `l`): + - `Up` south to north. + - `Down` north to south. + - `Right` west to east. + - `Left` east to west. + +- The `R` key must generate random vehicles with random lanes and routes. + +- The `Esc` key must finish the simulation. + +> Arrow keys must not let the user spam the creation of vehicles, vehicles must be created with a safe distance between them. + +### Example + +You can see an example [here](https://youtu.be/pC79E0fdzYo). + +### Bonus + +You can implement the following optional features : + +- Vehicle and traffic lights animation and image rendering. You can find some cool assets : + - [limezu](https://limezu.itch.io/) + - [finalbossblue](http://finalbossblues.com/timefantasy/free-graphics/). + - [mobilegamegraphics](https://mobilegamegraphics.com/product-category/all_products/freestuff/). + - [spriters-resource](https://www.spriters-resource.com/). + +### Notions + +- https://docs.rs/sdl2/0.34.3/sdl2/ diff --git a/subjects/road_intersection/audit/README.md b/subjects/road_intersection/audit/README.md new file mode 100644 index 00000000..a3fcdf33 --- /dev/null +++ b/subjects/road_intersection/audit/README.md @@ -0,0 +1,87 @@ +#### Functionals + +##### Try and run the application, then generate a vehicle by pressing the `"Arrow Up"` key. + +###### Was a vehicle generated from the cardinal south? + +##### Try pressing the `"Arrow Down"` key. + +###### Was a vehicle generated from the cardinal North? + +##### Try pressing the `"Arrow Right"` key. + +###### Was a vehicle generated from the cardinal west? + +##### Try pressing the `"Arrow left"` key. + +###### Was a vehicle generated from the cardinal east? + +##### Try pressing the `"R"` key. + +###### Are vehicles generated randomly(random lane and route)? + +##### Try to generate tree vehicles in the same lane (do this to all lanes). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Up"` key and the other using the `"Down"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Right"` key and the other using the `"Left"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Up"` key and the other using the `"Left"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Up"` key and the other using the `"Right"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Down"` key and the other using the `"Left"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate two vehicles at the same time, one using the `"Down"` key and the other using the `"Right"` key (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate five vehicles using the `"Up"` key, at the same time generate two vehicles using the key `"Right"`. + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate one vehicle for all the lanes (to this at least 3 times). + +###### Did all vehicles passed the intersection without any collision? + +##### Try to generate vehicles randomly using the `"R"` key. Then wait for at least 1 min. + +###### Did all vehicles passed the intersection without any collision? + +###### Was there a low traffic congestion while running the application? (ex: high traffic congestion can be 8 or more vehicles in the same lane without proceeding)? + +##### Try to generate vehicles with lanes at your choice. + +###### Did all vehicles passed the intersection without any collision? + +#### General + +###### Is it not possible to spam the creation of vehicles(by pressing the arrow keys to many times)? + +###### Are vehicles assigned to their own route, and if so do they obey that route? (you can use the colors for each route to see this) + +###### Are vehicles kept in a safe distance(do not collide when ever one stops)? + +###### Do vehicles stop when ever there is a red light? + +###### Do vehicles proceed when ever there is a green light? + +#### Bonus + +###### +Is there any type of image sprite for traffic light? + +###### +Did the student implement some kind of animation and image sprite for the vehicle? + +###### +Did the student implement more features than those in the subject? diff --git a/subjects/scytale_cipher/README.md b/subjects/scytale_cipher/README.md new file mode 100644 index 00000000..c82ca4dc --- /dev/null +++ b/subjects/scytale_cipher/README.md @@ -0,0 +1,68 @@ +## scytale_cipher + +### Instructions + +Create a function called `scytale_cipher` that takes a `string` and an `integer` and returns a `string`. +This function should create a scytale cipher also known as spartan cipher. In practice its a cylinder with a +strip strapped around it on which is written a message, when removed the strip the message is coded. +Depending on the size of the cylinder the message would change. So the only way to decipher the coded message is +by using a cylinder of the same size. + +You function should recreate the scytale cipher, the string being the message and the size being the number of +straps in the cylinder. + +### Example + +message : "scytale Code" +size : 6 + +```console +['s', 'e'] +['c', ' '] +['y', 'C'] +['t', 'o'] +['a', 'd'] +['l', 'e'] +``` + +output : sec yCtoadle +size : 8 + +```console +['s', 'C'] +['c', 'o'] +['y', 'd'] +['t', 'e'] +['a', ' '] +['l', ' '] +['e', ' '] +[' ', ' '] +``` + +output : sCcoydtea l e + +### Expected Functions + +```rust +fn scytale_cipher(message: String, i: u32) -> String {} +``` + +### Usage + +Here is a program to test your function + +```rust +fn main() { + println!("\"scytale Code\" size=6 -> {:?}", scytale_cipher(String::from("scytale Code"), 6))); + println!("\"scytale Code\" size=8 -> {:?}", scytale_cipher(String::from("scytale Code"), 8))); +} +``` + +And its output + +```console +student@ubuntu:~/[[ROOT]]/test$ cargo run +"scytale Code" size=6 -> "sec yCtoadle" +"scytale Code" size=8 -> "sCcoydtea l e" +student@ubuntu:~/[[ROOT]]/test$ +```