diff options
| author | Hunter Kvalevog <hunter@kvog.sh> | 2026-09-18 16:12:53 -0500 |
|---|---|---|
| committer | Hunter Kvalevog <hunter@kvog.sh> | 2026-09-18 16:22:39 -0500 |
| commit | 84c3c20d440f724cc08b8ef80e16379e84c64cdf (patch) | |
| tree | c6745162467dc6245044cd1d6a55140e34eefdc5 | |
| parent | 226a48c93ad9ce05ae7b3075d5b4258eedef8d6e (diff) | |
rustlings: complete 03
| -rw-r--r-- | rustlings/.rustlings-state.txt | 8 | ||||
| -rw-r--r-- | rustlings/exercises/03_if/if1.rs | 10 | ||||
| -rw-r--r-- | rustlings/exercises/03_if/if2.rs | 4 | ||||
| -rw-r--r-- | rustlings/exercises/03_if/if3.rs | 5 | ||||
| -rw-r--r-- | rustlings/exercises/quizzes/quiz1.rs | 10 | ||||
| -rw-r--r-- | rustlings/solutions/03_if/if1.rs | 28 | ||||
| -rw-r--r-- | rustlings/solutions/03_if/if2.rs | 35 | ||||
| -rw-r--r-- | rustlings/solutions/03_if/if3.rs | 53 | ||||
| -rw-r--r-- | rustlings/solutions/quizzes/quiz1.rs | 30 |
9 files changed, 161 insertions, 22 deletions
diff --git a/rustlings/.rustlings-state.txt b/rustlings/.rustlings-state.txt index ce94351..1edd88f 100644 --- a/rustlings/.rustlings-state.txt +++ b/rustlings/.rustlings-state.txt @@ -1,6 +1,6 @@ DON'T EDIT THIS FILE! -if1 +primitive_types1 intro1 intro2 @@ -14,4 +14,8 @@ functions1 functions2 functions3 functions4 -functions5
\ No newline at end of file +functions5 +if1 +if2 +if3 +quiz1
\ No newline at end of file diff --git a/rustlings/exercises/03_if/if1.rs b/rustlings/exercises/03_if/if1.rs index e5a3c5a..079c671 100644 --- a/rustlings/exercises/03_if/if1.rs +++ b/rustlings/exercises/03_if/if1.rs @@ -1,9 +1,9 @@ fn bigger(a: i32, b: i32) -> i32 { - // TODO: Complete this function to return the bigger number! - // If both numbers are equal, any of them can be returned. - // Do not use: - // - another function call - // - additional variables + if a > b { + a + } else { + b + } } fn main() { diff --git a/rustlings/exercises/03_if/if2.rs b/rustlings/exercises/03_if/if2.rs index ca8493c..8104487 100644 --- a/rustlings/exercises/03_if/if2.rs +++ b/rustlings/exercises/03_if/if2.rs @@ -2,8 +2,10 @@ fn picky_eater(food: &str) -> &str { if food == "strawberry" { "Yummy!" + } else if food == "potato" { + "I guess I can eat that." } else { - 1 + "No thanks!" } } diff --git a/rustlings/exercises/03_if/if3.rs b/rustlings/exercises/03_if/if3.rs index 89164eb..fee96f8 100644 --- a/rustlings/exercises/03_if/if3.rs +++ b/rustlings/exercises/03_if/if3.rs @@ -1,13 +1,12 @@ fn animal_habitat(animal: &str) -> &str { - // TODO: Fix the compiler error in the statement below. let identifier = if animal == "crab" { 1 } else if animal == "gopher" { - 2.0 + 2 } else if animal == "snake" { 3 } else { - "Unknown" + 0 }; // Don't change the expression below! diff --git a/rustlings/exercises/quizzes/quiz1.rs b/rustlings/exercises/quizzes/quiz1.rs index 04fb2aa..b787d7e 100644 --- a/rustlings/exercises/quizzes/quiz1.rs +++ b/rustlings/exercises/quizzes/quiz1.rs @@ -8,9 +8,13 @@ // - However, if Mary buys more than 40 apples, the price of each apple in the // entire order is reduced to only 1 rustbuck! -// TODO: Write a function that calculates the price of an order of apples given -// the quantity bought. -// fn calculate_price_of_apples(???) -> ??? { ??? } +fn calculate_price_of_apples(n: i32) -> i32 { + if n > 40 { + n + } else { + 2 * n + } +} fn main() { // You can optionally experiment here. diff --git a/rustlings/solutions/03_if/if1.rs b/rustlings/solutions/03_if/if1.rs index dcf2377..8512a60 100644 --- a/rustlings/solutions/03_if/if1.rs +++ b/rustlings/solutions/03_if/if1.rs @@ -1,4 +1,28 @@ +fn bigger(a: i32, b: i32) -> i32 { + if a > b { a } else { b } +} + fn main() { - // DON'T EDIT THIS SOLUTION FILE! - // It will be automatically filled after you finish the exercise. + // You can optionally experiment here. +} + +// Don't mind this for now :) +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ten_is_bigger_than_eight() { + assert_eq!(10, bigger(10, 8)); + } + + #[test] + fn fortytwo_is_bigger_than_thirtytwo() { + assert_eq!(42, bigger(32, 42)); + } + + #[test] + fn equal_numbers() { + assert_eq!(42, bigger(42, 42)); + } } diff --git a/rustlings/solutions/03_if/if2.rs b/rustlings/solutions/03_if/if2.rs index dcf2377..21c0dcd 100644 --- a/rustlings/solutions/03_if/if2.rs +++ b/rustlings/solutions/03_if/if2.rs @@ -1,4 +1,35 @@ +fn picky_eater(food: &str) -> &str { + if food == "strawberry" { + "Yummy!" + } else if food == "potato" { + "I guess I can eat that." + } else { + "No thanks!" + } +} + fn main() { - // DON'T EDIT THIS SOLUTION FILE! - // It will be automatically filled after you finish the exercise. + // You can optionally experiment here. +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn yummy_food() { + assert_eq!(picky_eater("strawberry"), "Yummy!"); + } + + #[test] + fn neutral_food() { + assert_eq!(picky_eater("potato"), "I guess I can eat that."); + } + + #[test] + fn default_disliked_food() { + assert_eq!(picky_eater("broccoli"), "No thanks!"); + assert_eq!(picky_eater("gummy bears"), "No thanks!"); + assert_eq!(picky_eater("literally anything"), "No thanks!"); + } } diff --git a/rustlings/solutions/03_if/if3.rs b/rustlings/solutions/03_if/if3.rs index dcf2377..571644d 100644 --- a/rustlings/solutions/03_if/if3.rs +++ b/rustlings/solutions/03_if/if3.rs @@ -1,4 +1,53 @@ +fn animal_habitat(animal: &str) -> &str { + let identifier = if animal == "crab" { + 1 + } else if animal == "gopher" { + 2 + } else if animal == "snake" { + 3 + } else { + // Any unused identifier. + 4 + }; + + // Instead of such an identifier, you would use an enum in Rust. + // But we didn't get into enums yet. + if identifier == 1 { + "Beach" + } else if identifier == 2 { + "Burrow" + } else if identifier == 3 { + "Desert" + } else { + "Unknown" + } +} + fn main() { - // DON'T EDIT THIS SOLUTION FILE! - // It will be automatically filled after you finish the exercise. + // You can optionally experiment here. +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn gopher_lives_in_burrow() { + assert_eq!(animal_habitat("gopher"), "Burrow") + } + + #[test] + fn snake_lives_in_desert() { + assert_eq!(animal_habitat("snake"), "Desert") + } + + #[test] + fn crab_lives_on_beach() { + assert_eq!(animal_habitat("crab"), "Beach") + } + + #[test] + fn unknown_animal() { + assert_eq!(animal_habitat("dinosaur"), "Unknown") + } } diff --git a/rustlings/solutions/quizzes/quiz1.rs b/rustlings/solutions/quizzes/quiz1.rs index dcf2377..5503c8c 100644 --- a/rustlings/solutions/quizzes/quiz1.rs +++ b/rustlings/solutions/quizzes/quiz1.rs @@ -1,4 +1,30 @@ +// Mary is buying apples. The price of an apple is calculated as follows: +// - An apple costs 2 rustbucks. +// - However, if Mary buys more than 40 apples, the price of each apple in the +// entire order is reduced to only 1 rustbuck! + +fn calculate_price_of_apples(n_apples: u64) -> u64 { + if n_apples > 40 { + n_apples + } else { + 2 * n_apples + } +} + fn main() { - // DON'T EDIT THIS SOLUTION FILE! - // It will be automatically filled after you finish the exercise. + // You can optionally experiment here. +} + +// Don't change the tests! +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn verify_test() { + assert_eq!(calculate_price_of_apples(35), 70); + assert_eq!(calculate_price_of_apples(40), 80); + assert_eq!(calculate_price_of_apples(41), 41); + assert_eq!(calculate_price_of_apples(65), 65); + } } |