From ad542a4892d0f670dda2eb888ab1e74b735ad882 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Tue, 4 Aug 2026 21:57:18 +0200 Subject: [PATCH] feat(options): completed options --- exercises/12_options/options1.rs | 10 +++++++++- exercises/12_options/options2.rs | 16 +++++++++++++--- exercises/12_options/options3.rs | 4 +++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/exercises/12_options/options1.rs b/exercises/12_options/options1.rs index d0c412a..4925190 100644 --- a/exercises/12_options/options1.rs +++ b/exercises/12_options/options1.rs @@ -4,6 +4,14 @@ // `hour_of_day` is higher than 23. fn maybe_ice_cream(hour_of_day: u16) -> Option { // TODO: Complete the function body. + + if hour_of_day < 22 { + Some(5) + } else if hour_of_day <= 23 { + Some(0) + } else { + None + } } fn main() { @@ -18,7 +26,7 @@ mod tests { fn raw_value() { // TODO: Fix this test. How do you get the value contained in the // Option? - let ice_creams = maybe_ice_cream(12); + let ice_creams = maybe_ice_cream(12).unwrap(); assert_eq!(ice_creams, 5); // Don't change this line. } diff --git a/exercises/12_options/options2.rs b/exercises/12_options/options2.rs index 07c27c6..edd74f7 100644 --- a/exercises/12_options/options2.rs +++ b/exercises/12_options/options2.rs @@ -10,8 +10,12 @@ mod tests { let optional_target = Some(target); // TODO: Make this an if-let statement whose value is `Some`. - word = optional_target { - assert_eq!(word, target); + // + // word = optional_target { + // assert_eq!(word, target); + // } + if let Some(word) = optional_target { + assert_eq!(word, target) } } @@ -29,7 +33,13 @@ mod tests { // TODO: Make this a while-let statement. Remember that `Vec::pop()` // adds another layer of `Option`. You can do nested pattern matching // in if-let and while-let statements. - integer = optional_integers.pop() { + // + // integer = optional_integers.pop() { + // assert_eq!(integer, cursor); + // cursor -= 1; + // } + + while let Some(Some(integer)) = optional_integers.pop() { assert_eq!(integer, cursor); cursor -= 1; } diff --git a/exercises/12_options/options3.rs b/exercises/12_options/options3.rs index c97b1d3..fa95358 100644 --- a/exercises/12_options/options3.rs +++ b/exercises/12_options/options3.rs @@ -9,7 +9,9 @@ fn main() { // TODO: Fix the compiler error by adding something to this match statement. match optional_point { - Some(p) => println!("Coordinates are {},{}", p.x, p.y), + Some(ref p) => { + println!("Coordinates are {},{}", p.x, p.y) + } _ => panic!("No match!"), }