diff --git a/.all-contributorsrc b/.all-contributorsrc index be95fe9f..36952f7e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2721,6 +2721,15 @@ "contributions": [ "code" ] + }, + { + "login": "loshz", + "name": "Dan", + "avatar_url": "https://avatars.githubusercontent.com/u/3449337?v=4", + "profile": "https://loshz.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 8, diff --git a/AUTHORS.md b/AUTHORS.md index 42c7dbfe..d82a5cab 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -384,6 +384,7 @@ authors. wznmickey
wznmickey

šŸ“– NicolasRoelandt
NicolasRoelandt

šŸ“– Josh Bouganim
Josh Bouganim

šŸ’» + Dan
Dan

šŸ’» diff --git a/README.md b/README.md index 8fac7a28..6b9c9833 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages! -_...looking for the old, web-based version of Rustlings? Try [here](https://github.com/rust-lang/rustlings/tree/rustlings-1)_ - Alternatively, for a first-time Rust learner, there are several other resources: - [The Book](https://doc.rust-lang.org/book/index.html) - The most comprehensive resource for learning Rust, but a bit theoretical sometimes. You will be using this along with Rustlings! diff --git a/exercises/12_options/options1.rs b/exercises/12_options/options1.rs index e131b48b..3cbfecd6 100644 --- a/exercises/12_options/options1.rs +++ b/exercises/12_options/options1.rs @@ -6,11 +6,11 @@ // I AM NOT DONE // This function returns how much icecream there is left in the fridge. -// If it's before 10PM, there's 5 pieces left. At 10PM, someone eats them +// If it's before 10PM, there's 5 scoops left. At 10PM, someone eats it // all, so there'll be no more left :( fn maybe_icecream(time_of_day: u16) -> Option { // We use the 24-hour system here, so 10PM is a value of 22 and 12AM is a - // value of 0 The Option output should gracefully handle cases where + // value of 0. The Option output should gracefully handle cases where // time_of_day > 23. // TODO: Complete the function body - remember to return an Option! ??? @@ -22,10 +22,11 @@ mod tests { #[test] fn check_icecream() { + assert_eq!(maybe_icecream(0), Some(5)); assert_eq!(maybe_icecream(9), Some(5)); - assert_eq!(maybe_icecream(10), Some(5)); - assert_eq!(maybe_icecream(23), Some(0)); + assert_eq!(maybe_icecream(18), Some(5)); assert_eq!(maybe_icecream(22), Some(0)); + assert_eq!(maybe_icecream(23), Some(0)); assert_eq!(maybe_icecream(25), None); } diff --git a/exercises/20_threads/threads2.rs b/exercises/20_threads/threads2.rs index 62dad80d..60d68241 100644 --- a/exercises/20_threads/threads2.rs +++ b/exercises/20_threads/threads2.rs @@ -18,7 +18,9 @@ struct JobStatus { } fn main() { + // TODO: `Arc` isn't enough if you want a **mutable** shared state let status = Arc::new(JobStatus { jobs_completed: 0 }); + let mut handles = vec![]; for _ in 0..10 { let status_shared = Arc::clone(&status); @@ -29,11 +31,12 @@ fn main() { }); handles.push(handle); } + + // Waiting for all jobs to complete for handle in handles { handle.join().unwrap(); - // TODO: Print the value of the JobStatus.jobs_completed. Did you notice - // anything interesting in the output? Do you have to 'join' on all the - // handles? - println!("jobs completed {}", ???); } + + // TODO: Print the value of `JobStatus.jobs_completed` + println!("Jobs completed: {}", ???); } diff --git a/info.toml b/info.toml index b1cd64cc..36629b38 100644 --- a/info.toml +++ b/info.toml @@ -1136,25 +1136,17 @@ to **immutable** data. But we want to *change* the number of `jobs_completed` so we'll need to also use another type that will only allow one thread to mutate the data at a time. Take a look at this section of the book: https://doc.rust-lang.org/book/ch16-03-shared-state.html#atomic-reference-counting-with-arct -and keep reading if you'd like more hints :) -Do you now have an `Arc` `Mutex` `JobStatus` at the beginning of main? Like: +Keep reading if you'd like more hints :) + +Do you now have an `Arc>` at the beginning of `main`? Like: ``` let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 })); ``` -Similar to the code in the example in the book that happens after the text -that says 'Sharing a Mutex Between Multiple Threads'. If not, give that a -try! If you do and would like more hints, keep reading!! - -Make sure neither of your threads are holding onto the lock of the mutex -while they are sleeping, since this will prevent the other thread from -being allowed to get the lock. Locks are automatically released when -they go out of scope. - -If you've learned from the sample solutions, I encourage you to come -back to this exercise and try it again in a few days to reinforce -what you've learned :)""" +Similar to the code in the following example in the book: +https://doc.rust-lang.org/book/ch16-03-shared-state.html#sharing-a-mutext-between-multiple-threads +""" [[exercises]] name = "threads3" diff --git a/src/verify.rs b/src/verify.rs index 02bff995..ef966f60 100644 --- a/src/verify.rs +++ b/src/verify.rs @@ -177,7 +177,7 @@ fn prompt_for_completion( if no_emoji { println!("\n~*~ {success_msg} ~*~\n"); } else { - println!("\nšŸŽ‰ šŸŽ‰ {success_msg} šŸŽ‰ šŸŽ‰\n"); + println!("\nšŸŽ‰ šŸŽ‰ {success_msg} šŸŽ‰ šŸŽ‰\n"); } if let Some(output) = prompt_output {