Compare commits

...

16 commits

Author SHA1 Message Date
mo8it b6c434c445 Remove optional version field 2024-04-04 15:45:53 +02:00
mo8it 569a68eb73 Minify generated Cargo.toml 2024-04-04 15:44:48 +02:00
mo8it 1885ece2dc Merge branch 'main' 2024-04-04 15:31:59 +02:00
Mo 459c52137a
Merge pull request #1765 from junderw/junderw/fix-gitignore
Fix gitignore for clippy exercise
2024-04-01 19:33:28 +02:00
liv 9cb25e16f9
Merge pull request #1928 from mo8it/v1-readme
Remove the reference to v1
2024-03-31 16:25:00 +02:00
liv ca07abf3dc
Merge pull request #1929 from mo8it/threads2
threads2: simplify the exercise
2024-03-31 16:22:54 +02:00
Mo 4e59857228
Merge pull request #1934 from rust-lang/all-contributors/add-loshz
docs: add loshz as a contributor for code
2024-03-29 20:04:20 +01:00
allcontributors[bot] c2b7f45806
docs: update .all-contributorsrc [skip ci] 2024-03-29 19:03:58 +00:00
allcontributors[bot] c6597d0010
docs: update AUTHORS.md [skip ci] 2024-03-29 19:03:57 +00:00
Mo 1a4f55e0e6
Merge pull request #1933 from loshz/main
options1: slightly update grammar
2024-03-29 20:03:23 +01:00
Dan 30273a6ee5
Merge branch 'main' into main 2024-03-29 18:29:38 +00:00
mo8it 842e341895 threads2: simplify threads2 2024-03-27 21:24:36 +01:00
mo8it 3df59379de Remove the reference to v1 2024-03-27 20:28:31 +01:00
Dan Bond eb952a480d
verify: fix success message spacing
Signed-off-by: Dan Bond <danbond@protonmail.com>
2024-03-18 16:47:54 -07:00
Dan Bond f2833c5279
options1: Update wording & fix grammar
Signed-off-by: Dan Bond <danbond@protonmail.com>
2024-03-18 16:47:15 -07:00
junderw 3080141c5f
Fix gitignore for clippy exercise 2023-11-10 23:19:23 -07:00
13 changed files with 41 additions and 39 deletions

View file

@ -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,

View file

@ -384,6 +384,7 @@ authors.
<td align="center" valign="top" width="12.5%"><a href="http://wznmickey.com"><img src="https://avatars.githubusercontent.com/u/44784663?v=4?s=100" width="100px;" alt="wznmickey"/><br /><sub><b>wznmickey</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=wznmickey" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/NicolasRoelandt"><img src="https://avatars.githubusercontent.com/u/8594193?v=4?s=100" width="100px;" alt="NicolasRoelandt"/><br /><sub><b>NicolasRoelandt</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=NicolasRoelandt" title="Documentation">📖</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jbouganim-parallel"><img src="https://avatars.githubusercontent.com/u/150748285?v=4?s=100" width="100px;" alt="Josh Bouganim"/><br /><sub><b>Josh Bouganim</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=jbouganim-parallel" title="Code">💻</a></td>
<td align="center" valign="top" width="12.5%"><a href="https://loshz.com"><img src="https://avatars.githubusercontent.com/u/3449337?v=4?s=100" width="100px;" alt="Dan"/><br /><sub><b>Dan</b></sub></a><br /><a href="https://github.com/rust-lang/rustlings/commits?author=loshz" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View file

@ -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!

View file

@ -102,6 +102,5 @@ bin = [
[package]
name = "rustlings"
version = "0.0.0"
edition = "2021"
publish = false

View file

@ -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<u16> {
// 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);
}

View file

@ -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: {}", ???);
}

View file

@ -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<Mutex<JobStatus>>` 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<T> 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"

View file

@ -49,7 +49,6 @@ bin = [\n",
[package]
name = "rustlings"
version = "0.0.0"
edition = "2021"
publish = false
"#,

View file

@ -10,21 +10,24 @@ use crate::{embedded::EMBEDDED_FILES, exercise::Exercise};
fn create_cargo_toml(exercises: &[Exercise]) -> io::Result<()> {
let mut cargo_toml = Vec::with_capacity(1 << 13);
cargo_toml.extend_from_slice(b"bin = [\n");
for exercise in exercises {
cargo_toml.extend_from_slice(b" { name = \"");
cargo_toml.extend_from_slice(exercise.name.as_bytes());
cargo_toml.extend_from_slice(b"\", path = \"");
cargo_toml.extend_from_slice(exercise.path.to_str().unwrap().as_bytes());
cargo_toml.extend_from_slice(b"\" },\n");
}
cargo_toml.extend_from_slice(
br#"[package]
br#"]
[package]
name = "rustlings"
version = "0.0.0"
edition = "2021"
publish = false
"#,
);
for exercise in exercises {
cargo_toml.extend_from_slice(b"\n[[bin]]\nname = \"");
cargo_toml.extend_from_slice(exercise.name.as_bytes());
cargo_toml.extend_from_slice(b"\"\npath = \"");
cargo_toml.extend_from_slice(exercise.path.to_str().unwrap().as_bytes());
cargo_toml.extend_from_slice(b"\"\n");
}
OpenOptions::new()
.create_new(true)
.write(true)

View file

@ -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 {

View file

@ -1,6 +1,5 @@
[package]
name = "tests"
version = "0.0.0"
edition = "2021"
publish = false

View file

@ -1,6 +1,5 @@
[package]
name = "tests"
version = "0.0.0"
edition = "2021"
publish = false

View file

@ -1,6 +1,5 @@
[package]
name = "tests"
version = "0.0.0"
edition = "2021"
publish = false