feature: add numbers to exercises folders according to watch order, order is taken from info.toml

This commit is contained in:
VMois 2021-09-09 17:59:10 +02:00
parent 74af578beb
commit 8e67487bd6
96 changed files with 75 additions and 75 deletions

150
info.toml
View File

@ -2,7 +2,7 @@
[[exercises]] [[exercises]]
name = "variables1" name = "variables1"
path = "exercises/variables/variables1.rs" path = "exercises/1_variables/variables1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Hint: The declaration on line 12 is missing a keyword that is needed in Rust Hint: The declaration on line 12 is missing a keyword that is needed in Rust
@ -10,7 +10,7 @@ to create a new variable binding."""
[[exercises]] [[exercises]]
name = "variables2" name = "variables2"
path = "exercises/variables/variables2.rs" path = "exercises/1_variables/variables2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The compiler message is saying that Rust cannot infer the type that the The compiler message is saying that Rust cannot infer the type that the
@ -23,7 +23,7 @@ What if x is the same type as 10? What if it's a different type?"""
[[exercises]] [[exercises]]
name = "variables3" name = "variables3"
path = "exercises/variables/variables3.rs" path = "exercises/1_variables/variables3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
In Rust, variable bindings are immutable by default. But here we're trying In Rust, variable bindings are immutable by default. But here we're trying
@ -32,7 +32,7 @@ a variable binding mutable instead."""
[[exercises]] [[exercises]]
name = "variables4" name = "variables4"
path = "exercises/variables/variables4.rs" path = "exercises/1_variables/variables4.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Oops! In this exercise, we have a variable binding that we've created on Oops! In this exercise, we have a variable binding that we've created on
@ -43,7 +43,7 @@ programming language -- thankfully the Rust compiler has caught this for us!"""
[[exercises]] [[exercises]]
name = "variables5" name = "variables5"
path = "exercises/variables/variables5.rs" path = "exercises/1_variables/variables5.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
In variables3 we already learned how to make an immutable variable mutable In variables3 we already learned how to make an immutable variable mutable
@ -58,7 +58,7 @@ Try to solve this exercise afterwards using this technique."""
[[exercises]] [[exercises]]
name = "variables6" name = "variables6"
path = "exercises/variables/variables6.rs" path = "exercises/1_variables/variables6.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
We know about variables and mutability, but there is another important type of We know about variables and mutability, but there is another important type of
@ -75,7 +75,7 @@ https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#differences
[[exercises]] [[exercises]]
name = "functions1" name = "functions1"
path = "exercises/functions/functions1.rs" path = "exercises/2_functions/functions1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
This main function is calling a function that it expects to exist, but the This main function is calling a function that it expects to exist, but the
@ -85,7 +85,7 @@ Sounds a lot like `main`, doesn't it?"""
[[exercises]] [[exercises]]
name = "functions2" name = "functions2"
path = "exercises/functions/functions2.rs" path = "exercises/2_functions/functions2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Rust requires that all parts of a function's signature have type annotations, Rust requires that all parts of a function's signature have type annotations,
@ -93,7 +93,7 @@ but `call_me` is missing the type annotation of `num`."""
[[exercises]] [[exercises]]
name = "functions3" name = "functions3"
path = "exercises/functions/functions3.rs" path = "exercises/2_functions/functions3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
This time, the function *declaration* is okay, but there's something wrong This time, the function *declaration* is okay, but there's something wrong
@ -101,7 +101,7 @@ with the place where we're calling the function."""
[[exercises]] [[exercises]]
name = "functions4" name = "functions4"
path = "exercises/functions/functions4.rs" path = "exercises/2_functions/functions4.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The error message points to line 14 and says it expects a type after the The error message points to line 14 and says it expects a type after the
@ -110,7 +110,7 @@ the `is_even` function for an example!"""
[[exercises]] [[exercises]]
name = "functions5" name = "functions5"
path = "exercises/functions/functions5.rs" path = "exercises/2_functions/functions5.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
This is a really common error that can be fixed by removing one character. This is a really common error that can be fixed by removing one character.
@ -125,7 +125,7 @@ They are not the same. There are two solutions:
[[exercises]] [[exercises]]
name = "if1" name = "if1"
path = "exercises/if/if1.rs" path = "exercises/3_if/if1.rs"
mode = "test" mode = "test"
hint = """ hint = """
It's possible to do this in one line if you would like! It's possible to do this in one line if you would like!
@ -139,7 +139,7 @@ Remember in Rust that:
[[exercises]] [[exercises]]
name = "if2" name = "if2"
path = "exercises/if/if2.rs" path = "exercises/3_if/if2.rs"
mode = "test" mode = "test"
hint = """ hint = """
For that first compiler error, it's important in Rust that each conditional For that first compiler error, it's important in Rust that each conditional
@ -158,7 +158,7 @@ hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "move_semantics1" name = "move_semantics1"
path = "exercises/move_semantics/move_semantics1.rs" path = "exercises/4_move_semantics/move_semantics1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on line 13, So you've got the "cannot borrow immutable local variable `vec1` as mutable" error on line 13,
@ -167,7 +167,7 @@ where the error is."""
[[exercises]] [[exercises]]
name = "move_semantics2" name = "move_semantics2"
path = "exercises/move_semantics/move_semantics2.rs" path = "exercises/4_move_semantics/move_semantics2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
So `vec0` is being *moved* into the function `fill_vec` when we call it on So `vec0` is being *moved* into the function `fill_vec` when we call it on
@ -187,7 +187,7 @@ all!
[[exercises]] [[exercises]]
name = "move_semantics3" name = "move_semantics3"
path = "exercises/move_semantics/move_semantics3.rs" path = "exercises/4_move_semantics/move_semantics3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The difference between this one and the previous ones is that the first line The difference between this one and the previous ones is that the first line
@ -197,7 +197,7 @@ an existing binding to be a mutable binding instead of an immutable one :)"""
[[exercises]] [[exercises]]
name = "move_semantics4" name = "move_semantics4"
path = "exercises/move_semantics/move_semantics4.rs" path = "exercises/4_move_semantics/move_semantics4.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Stop reading whenever you feel like you have enough direction :) Or try Stop reading whenever you feel like you have enough direction :) Or try
@ -212,7 +212,7 @@ So the end goal is to:
[[exercises]] [[exercises]]
name = "move_semantics5" name = "move_semantics5"
path = "exercises/move_semantics/move_semantics5.rs" path = "exercises/4_move_semantics/move_semantics5.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Carefully reason about the range in which each mutable reference is in Carefully reason about the range in which each mutable reference is in
@ -226,19 +226,19 @@ https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-ref
[[exercises]] [[exercises]]
name = "primitive_types1" name = "primitive_types1"
path = "exercises/primitive_types/primitive_types1.rs" path = "exercises/5_primitive_types/primitive_types1.rs"
mode = "compile" mode = "compile"
hint = "No hints this time ;)" hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "primitive_types2" name = "primitive_types2"
path = "exercises/primitive_types/primitive_types2.rs" path = "exercises/5_primitive_types/primitive_types2.rs"
mode = "compile" mode = "compile"
hint = "No hints this time ;)" hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "primitive_types3" name = "primitive_types3"
path = "exercises/primitive_types/primitive_types3.rs" path = "exercises/5_primitive_types/primitive_types3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
There's a shorthand to initialize Arrays with a certain size that does not There's a shorthand to initialize Arrays with a certain size that does not
@ -251,7 +251,7 @@ for `a.len() >= 100`?"""
[[exercises]] [[exercises]]
name = "primitive_types4" name = "primitive_types4"
path = "exercises/primitive_types/primitive_types4.rs" path = "exercises/5_primitive_types/primitive_types4.rs"
mode = "test" mode = "test"
hint = """ hint = """
Take a look at the Understanding Ownership -> Slices -> Other Slices section of the book: Take a look at the Understanding Ownership -> Slices -> Other Slices section of the book:
@ -266,7 +266,7 @@ https://doc.rust-lang.org/book/ch15-02-deref.html"""
[[exercises]] [[exercises]]
name = "primitive_types5" name = "primitive_types5"
path = "exercises/primitive_types/primitive_types5.rs" path = "exercises/5_primitive_types/primitive_types5.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Take a look at the Data Types -> The Tuple Type section of the book: Take a look at the Data Types -> The Tuple Type section of the book:
@ -277,7 +277,7 @@ of the tuple. You can do it!!"""
[[exercises]] [[exercises]]
name = "primitive_types6" name = "primitive_types6"
path = "exercises/primitive_types/primitive_types6.rs" path = "exercises/5_primitive_types/primitive_types6.rs"
mode = "test" mode = "test"
hint = """ hint = """
While you could use a destructuring `let` for the tuple here, try While you could use a destructuring `let` for the tuple here, try
@ -290,7 +290,7 @@ Now you have another tool in your toolbox!"""
[[exercises]] [[exercises]]
name = "structs1" name = "structs1"
path = "exercises/structs/structs1.rs" path = "exercises/6_structs/structs1.rs"
mode = "test" mode = "test"
hint = """ hint = """
Rust has more than one type of struct. Three actually, all variants are used to package related data together. Rust has more than one type of struct. Three actually, all variants are used to package related data together.
@ -303,7 +303,7 @@ Read more about structs in The Book: https://doc.rust-lang.org/book/ch05-01-defi
[[exercises]] [[exercises]]
name = "structs2" name = "structs2"
path = "exercises/structs/structs2.rs" path = "exercises/6_structs/structs2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Creating instances of structs is easy, all you need to do is assign some values to its fields. Creating instances of structs is easy, all you need to do is assign some values to its fields.
@ -312,7 +312,7 @@ Have a look in The Book, to find out more: https://doc.rust-lang.org/stable/book
[[exercises]] [[exercises]]
name = "structs3" name = "structs3"
path = "exercises/structs/structs3.rs" path = "exercises/6_structs/structs3.rs"
mode = "test" mode = "test"
hint = """ hint = """
The new method needs to panic if the weight is physically impossible :), how do we do that in Rust? The new method needs to panic if the weight is physically impossible :), how do we do that in Rust?
@ -327,14 +327,14 @@ Have a look in The Book, to find out more about method implementations: https://
[[exercises]] [[exercises]]
name = "enums1" name = "enums1"
path = "exercises/enums/enums1.rs" path = "exercises/7_enums/enums1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Hint: The declaration of the enumeration type has not been defined yet.""" Hint: The declaration of the enumeration type has not been defined yet."""
[[exercises]] [[exercises]]
name = "enums2" name = "enums2"
path = "exercises/enums/enums2.rs" path = "exercises/7_enums/enums2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Hint: you can create enumerations that have different variants with different types Hint: you can create enumerations that have different variants with different types
@ -342,7 +342,7 @@ such as no data, anonymous structs, a single string, tuples, ...etc"""
[[exercises]] [[exercises]]
name = "enums3" name = "enums3"
path = "exercises/enums/enums3.rs" path = "exercises/7_enums/enums3.rs"
mode = "test" mode = "test"
hint = "No hints this time ;)" hint = "No hints this time ;)"
@ -350,7 +350,7 @@ hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "modules1" name = "modules1"
path = "exercises/modules/modules1.rs" path = "exercises/8_modules/modules1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Everything is private in Rust by default-- but there's a keyword we can use Everything is private in Rust by default-- but there's a keyword we can use
@ -359,7 +359,7 @@ needs to be public."""
[[exercises]] [[exercises]]
name = "modules2" name = "modules2"
path = "exercises/modules/modules2.rs" path = "exercises/8_modules/modules2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The delicious_snacks module is trying to present an external interface that is The delicious_snacks module is trying to present an external interface that is
@ -369,7 +369,7 @@ find the one keyword missing for both constants."""
[[exercises]] [[exercises]]
name = "modules3" name = "modules3"
path = "exercises/modules/modules3.rs" path = "exercises/8_modules/modules3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
UNIX_EPOCH and SystemTime are declared in the std::time module. Add a use statement UNIX_EPOCH and SystemTime are declared in the std::time module. Add a use statement
@ -380,7 +380,7 @@ operator to bring these two in using only one line."""
[[exercises]] [[exercises]]
name = "vec1" name = "vec1"
path = "exercises/collections/vec1.rs" path = "exercises/9_collections/vec1.rs"
mode = "test" mode = "test"
hint = """ hint = """
In Rust, there are two ways to define a Vector. In Rust, there are two ways to define a Vector.
@ -394,7 +394,7 @@ of the Rust book to learn more.
[[exercises]] [[exercises]]
name = "vec2" name = "vec2"
path = "exercises/collections/vec2.rs" path = "exercises/9_collections/vec2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Hint 1: `i` is each element from the Vec as they are being iterated. Hint 1: `i` is each element from the Vec as they are being iterated.
@ -404,7 +404,7 @@ Hint 2: Check the suggestion from the compiler error ;)
[[exercises]] [[exercises]]
name = "hashmap1" name = "hashmap1"
path = "exercises/collections/hashmap1.rs" path = "exercises/9_collections/hashmap1.rs"
mode = "test" mode = "test"
hint = """ hint = """
Hint 1: Take a look at the return type of the function to figure out Hint 1: Take a look at the return type of the function to figure out
@ -415,7 +415,7 @@ Hint 2: Number of fruits should be at least 5. And you have to put
[[exercises]] [[exercises]]
name = "hashmap2" name = "hashmap2"
path = "exercises/collections/hashmap2.rs" path = "exercises/9_collections/hashmap2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Use the `entry()` and `or_insert()` methods of `HashMap` to achieve this. Use the `entry()` and `or_insert()` methods of `HashMap` to achieve this.
@ -426,7 +426,7 @@ Learn more at https://doc.rust-lang.org/stable/book/ch08-03-hash-maps.html#only-
[[exercises]] [[exercises]]
name = "strings1" name = "strings1"
path = "exercises/strings/strings1.rs" path = "exercises/10_strings/strings1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The `current_favorite_color` function is currently returning a string slice with the `'static` The `current_favorite_color` function is currently returning a string slice with the `'static`
@ -438,7 +438,7 @@ trait."""
[[exercises]] [[exercises]]
name = "strings2" name = "strings2"
path = "exercises/strings/strings2.rs" path = "exercises/10_strings/strings2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Yes, it would be really easy to fix this by just changing the value bound to `word` to be a Yes, it would be really easy to fix this by just changing the value bound to `word` to be a
@ -457,7 +457,7 @@ hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "errors1" name = "errors1"
path = "exercises/error_handling/errors1.rs" path = "exercises/11_error_handling/errors1.rs"
mode = "test" mode = "test"
hint = """ hint = """
`Err` is one of the variants of `Result`, so what the 2nd test is saying `Err` is one of the variants of `Result`, so what the 2nd test is saying
@ -476,7 +476,7 @@ To make this change, you'll need to:
[[exercises]] [[exercises]]
name = "errors2" name = "errors2"
path = "exercises/error_handling/errors2.rs" path = "exercises/11_error_handling/errors2.rs"
mode = "test" mode = "test"
hint = """ hint = """
One way to handle this is using a `match` statement on One way to handle this is using a `match` statement on
@ -489,14 +489,14 @@ and give it a try!"""
[[exercises]] [[exercises]]
name = "errors3" name = "errors3"
path = "exercises/error_handling/errors3.rs" path = "exercises/11_error_handling/errors3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
If other functions can return a `Result`, why shouldn't `main`?""" If other functions can return a `Result`, why shouldn't `main`?"""
[[exercises]] [[exercises]]
name = "errors4" name = "errors4"
path = "exercises/error_handling/errors4.rs" path = "exercises/11_error_handling/errors4.rs"
mode = "test" mode = "test"
hint = """ hint = """
`PositiveNonzeroInteger::new` is always creating a new instance and returning an `Ok` result. `PositiveNonzeroInteger::new` is always creating a new instance and returning an `Ok` result.
@ -505,7 +505,7 @@ returning an `Ok` result if those checks determine that everything is... okay :)
[[exercises]] [[exercises]]
name = "errors5" name = "errors5"
path = "exercises/error_handling/errors5.rs" path = "exercises/11_error_handling/errors5.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Hint: There are two different possible `Result` types produced within Hint: There are two different possible `Result` types produced within
@ -533,7 +533,7 @@ https://doc.rust-lang.org/stable/rust-by-example/error/multiple_error_types/reen
[[exercises]] [[exercises]]
name = "errors6" name = "errors6"
path = "exercises/error_handling/errors6.rs" path = "exercises/11_error_handling/errors6.rs"
mode = "test" mode = "test"
hint = """ hint = """
This exercise uses a completed version of `PositiveNonzeroInteger` from This exercise uses a completed version of `PositiveNonzeroInteger` from
@ -555,7 +555,7 @@ https://doc.rust-lang.org/std/result/enum.Result.html#method.map_err"""
[[exercises]] [[exercises]]
name = "generics1" name = "generics1"
path = "exercises/generics/generics1.rs" path = "exercises/12_generics/generics1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Vectors in rust make use of generics to create dynamically sized arrays of any type. Vectors in rust make use of generics to create dynamically sized arrays of any type.
@ -563,7 +563,7 @@ You need to tell the compiler what type we are pushing onto this vector."""
[[exercises]] [[exercises]]
name = "generics2" name = "generics2"
path = "exercises/generics/generics2.rs" path = "exercises/12_generics/generics2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Currently we are wrapping only values of type 'u32'. Currently we are wrapping only values of type 'u32'.
@ -574,7 +574,7 @@ If you are still stuck https://doc.rust-lang.org/stable/book/ch10-01-syntax.html
[[exercises]] [[exercises]]
name = "generics3" name = "generics3"
path = "exercises/generics/generics3.rs" path = "exercises/12_generics/generics3.rs"
mode = "test" mode = "test"
hint = """ hint = """
To find the best solution to this challenge you're going to need to think back to your To find the best solution to this challenge you're going to need to think back to your
@ -589,7 +589,7 @@ of the struct slightly too...you can do it!
[[exercises]] [[exercises]]
name = "option1" name = "option1"
path = "exercises/option/option1.rs" path = "exercises/13_option/option1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Hint 1: Check out some functions of Option: Hint 1: Check out some functions of Option:
@ -605,7 +605,7 @@ Hint 2: There are no sensible defaults for the value of an Array; the values nee
[[exercises]] [[exercises]]
name = "option2" name = "option2"
path = "exercises/option/option2.rs" path = "exercises/13_option/option2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
check out: check out:
@ -619,7 +619,7 @@ Also see Option::flatten
[[exercises]] [[exercises]]
name = "option3" name = "option3"
path = "exercises/option/option3.rs" path = "exercises/13_option/option3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
The compiler says a partial move happened in the `match` The compiler says a partial move happened in the `match`
@ -631,7 +631,7 @@ read: https://doc.rust-lang.org/std/keyword.ref.html"""
[[exercises]] [[exercises]]
name = "traits1" name = "traits1"
path = "exercises/traits/traits1.rs" path = "exercises/14_traits/traits1.rs"
mode = "test" mode = "test"
hint = """ hint = """
A discussion about Traits in Rust can be found at: A discussion about Traits in Rust can be found at:
@ -640,7 +640,7 @@ https://doc.rust-lang.org/book/ch10-02-traits.html
[[exercises]] [[exercises]]
name = "traits2" name = "traits2"
path = "exercises/traits/traits2.rs" path = "exercises/14_traits/traits2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Notice how the trait takes ownership of 'self',and returns `Self'. Notice how the trait takes ownership of 'self',and returns `Self'.
@ -653,7 +653,7 @@ the documentation at: https://doc.rust-lang.org/std/vec/struct.Vec.html"""
[[exercises]] [[exercises]]
name = "tests1" name = "tests1"
path = "exercises/tests/tests1.rs" path = "exercises/15_tests/tests1.rs"
mode = "test" mode = "test"
hint = """ hint = """
You don't even need to write any code to test -- you can just test values and run that, even You don't even need to write any code to test -- you can just test values and run that, even
@ -664,7 +664,7 @@ to `assert!` and see which ones compile, which ones pass, and which ones fail :)
[[exercises]] [[exercises]]
name = "tests2" name = "tests2"
path = "exercises/tests/tests2.rs" path = "exercises/15_tests/tests2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Like the previous exercise, you don't need to write any code to get this test to compile and Like the previous exercise, you don't need to write any code to get this test to compile and
@ -674,7 +674,7 @@ that are of different types! Try switching which argument comes first and which
[[exercises]] [[exercises]]
name = "tests3" name = "tests3"
path = "exercises/tests/tests3.rs" path = "exercises/15_tests/tests3.rs"
mode = "test" mode = "test"
hint = """ hint = """
You can call a function right where you're passing arguments to `assert!` -- so you could do You can call a function right where you're passing arguments to `assert!` -- so you could do
@ -693,7 +693,7 @@ hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "box1" name = "box1"
path = "exercises/standard_library_types/box1.rs" path = "exercises/16_standard_library_types/box1.rs"
mode = "test" mode = "test"
hint = """ hint = """
Step 1 Step 1
@ -711,7 +711,7 @@ and try other types!
[[exercises]] [[exercises]]
name = "arc1" name = "arc1"
path = "exercises/standard_library_types/arc1.rs" path = "exercises/16_standard_library_types/arc1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Make `shared_numbers` be an `Arc` from the numbers vector. Then, in order Make `shared_numbers` be an `Arc` from the numbers vector. Then, in order
@ -728,7 +728,7 @@ https://doc.rust-lang.org/stable/book/ch16-00-concurrency.html
[[exercises]] [[exercises]]
name = "iterators1" name = "iterators1"
path = "exercises/standard_library_types/iterators1.rs" path = "exercises/16_standard_library_types/iterators1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Step 1: Step 1:
@ -745,7 +745,7 @@ https://doc.rust-lang.org/std/iter/trait.Iterator.html for some ideas.
[[exercises]] [[exercises]]
name = "iterators2" name = "iterators2"
path = "exercises/standard_library_types/iterators2.rs" path = "exercises/16_standard_library_types/iterators2.rs"
mode = "test" mode = "test"
hint = """ hint = """
Step 1 Step 1
@ -766,7 +766,7 @@ and very general. Rust just needs to know the desired type."""
[[exercises]] [[exercises]]
name = "iterators3" name = "iterators3"
path = "exercises/standard_library_types/iterators3.rs" path = "exercises/16_standard_library_types/iterators3.rs"
mode = "test" mode = "test"
hint = """ hint = """
The divide function needs to return the correct error when even division is not The divide function needs to return the correct error when even division is not
@ -784,7 +784,7 @@ the `FromIterator` trait is used in `collect()`."""
[[exercises]] [[exercises]]
name = "iterators4" name = "iterators4"
path = "exercises/standard_library_types/iterators4.rs" path = "exercises/16_standard_library_types/iterators4.rs"
mode = "test" mode = "test"
hint = """ hint = """
In an imperative language, you might write a for loop that updates In an imperative language, you might write a for loop that updates
@ -794,7 +794,7 @@ approach, computing the factorial elegantly with ranges and iterators."""
[[exercises]] [[exercises]]
name = "iterators5" name = "iterators5"
path = "exercises/standard_library_types/iterators5.rs" path = "exercises/16_standard_library_types/iterators5.rs"
mode = "test" mode = "test"
hint = """ hint = """
The documentation for the std::iter::Iterator trait contains numerous methods The documentation for the std::iter::Iterator trait contains numerous methods
@ -815,7 +815,7 @@ a different method that could make your code more compact than using fold."""
[[exercises]] [[exercises]]
name = "threads1" name = "threads1"
path = "exercises/threads/threads1.rs" path = "exercises/17_threads/threads1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
`Arc` is an Atomic Reference Counted pointer that allows safe, shared access `Arc` is an Atomic Reference Counted pointer that allows safe, shared access
@ -854,7 +854,7 @@ what you've learned :)"""
[[exercises]] [[exercises]]
name = "macros1" name = "macros1"
path = "exercises/macros/macros1.rs" path = "exercises/18_macros/macros1.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
When you call a macro, you need to add something special compared to a When you call a macro, you need to add something special compared to a
@ -863,7 +863,7 @@ regular function call. If you're stuck, take a look at what's inside
[[exercises]] [[exercises]]
name = "macros2" name = "macros2"
path = "exercises/macros/macros2.rs" path = "exercises/18_macros/macros2.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
Macros don't quite play by the same rules as the rest of Rust, in terms of Macros don't quite play by the same rules as the rest of Rust, in terms of
@ -874,7 +874,7 @@ Unlike other things in Rust, the order of "where you define a macro" versus
[[exercises]] [[exercises]]
name = "macros3" name = "macros3"
path = "exercises/macros/macros3.rs" path = "exercises/18_macros/macros3.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
In order to use a macro outside of its module, you need to do something In order to use a macro outside of its module, you need to do something
@ -885,7 +885,7 @@ exported macros, if you've seen any of those around."""
[[exercises]] [[exercises]]
name = "macros4" name = "macros4"
path = "exercises/macros/macros4.rs" path = "exercises/18_macros/macros4.rs"
mode = "compile" mode = "compile"
hint = """ hint = """
You only need to add a single character to make this compile. You only need to add a single character to make this compile.
@ -904,7 +904,7 @@ hint = "No hints this time ;)"
[[exercises]] [[exercises]]
name = "clippy1" name = "clippy1"
path = "exercises/clippy/clippy1.rs" path = "exercises/19_clippy/clippy1.rs"
mode = "clippy" mode = "clippy"
hint = """ hint = """
Not every floating point value can be represented exactly in binary values in Not every floating point value can be represented exactly in binary values in
@ -919,7 +919,7 @@ https://doc.rust-lang.org/stable/std/primitive.f32.html#associatedconstant.EPSIL
[[exercises]] [[exercises]]
name = "clippy2" name = "clippy2"
path = "exercises/clippy/clippy2.rs" path = "exercises/19_clippy/clippy2.rs"
mode = "clippy" mode = "clippy"
hint = """ hint = """
`for` loops over Option values are more clearly expressed as an `if let`""" `for` loops over Option values are more clearly expressed as an `if let`"""
@ -928,7 +928,7 @@ hint = """
[[exercises]] [[exercises]]
name = "using_as" name = "using_as"
path = "exercises/conversions/using_as.rs" path = "exercises/20_conversions/using_as.rs"
mode = "test" mode = "test"
hint = """ hint = """
Use the `as` operator to cast one of the operands in the last line of the Use the `as` operator to cast one of the operands in the last line of the
@ -936,14 +936,14 @@ Use the `as` operator to cast one of the operands in the last line of the
[[exercises]] [[exercises]]
name = "from_into" name = "from_into"
path = "exercises/conversions/from_into.rs" path = "exercises/20_conversions/from_into.rs"
mode = "test" mode = "test"
hint = """ hint = """
Follow the steps provided right before the `From` implementation""" Follow the steps provided right before the `From` implementation"""
[[exercises]] [[exercises]]
name = "try_from_into" name = "try_from_into"
path = "exercises/conversions/try_from_into.rs" path = "exercises/20_conversions/try_from_into.rs"
mode = "test" mode = "test"
hint = """ hint = """
Follow the steps provided right before the `TryFrom` implementation. Follow the steps provided right before the `TryFrom` implementation.
@ -963,14 +963,14 @@ type for returning from the function."""
[[exercises]] [[exercises]]
name = "as_ref_mut" name = "as_ref_mut"
path = "exercises/conversions/as_ref_mut.rs" path = "exercises/20_conversions/as_ref_mut.rs"
mode = "test" mode = "test"
hint = """ hint = """
Add AsRef<str> as a trait bound to the functions.""" Add AsRef<str> as a trait bound to the functions."""
[[exercises]] [[exercises]]
name = "from_str" name = "from_str"
path = "exercises/conversions/from_str.rs" path = "exercises/20_conversions/from_str.rs"
mode = "test" mode = "test"
hint = """ hint = """
The implementation of FromStr should return an Ok with a Person object, The implementation of FromStr should return an Ok with a Person object,