From 3e8508dd04c20584999cc7de0c2012f2ade589dc Mon Sep 17 00:00:00 2001 From: Enrico Bozzolini Date: Thu, 4 Jun 2020 21:48:23 +0200 Subject: [PATCH] Solve box and iterators --- exercises/standard_library_types/box1.rs | 8 +++----- exercises/standard_library_types/iterators3.rs | 12 +++++++++--- exercises/standard_library_types/iterators4.rs | 11 +++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/exercises/standard_library_types/box1.rs b/exercises/standard_library_types/box1.rs index 2248962e..70b98e40 100644 --- a/exercises/standard_library_types/box1.rs +++ b/exercises/standard_library_types/box1.rs @@ -16,11 +16,9 @@ // // Execute `rustlings hint box1` for hints :) -// I AM NOT DONE - #[derive(PartialEq, Debug)] pub enum List { - Cons(i32, List), + Cons(i32, Box), Nil, } @@ -30,11 +28,11 @@ fn main() { } pub fn create_empty_list() -> List { - unimplemented!() + List::Nil } pub fn create_non_empty_list() -> List { - unimplemented!() + List::Cons(1, Box::new(List::Nil)) } #[cfg(test)] diff --git a/exercises/standard_library_types/iterators3.rs b/exercises/standard_library_types/iterators3.rs index 353cea62..d2b5387c 100644 --- a/exercises/standard_library_types/iterators3.rs +++ b/exercises/standard_library_types/iterators3.rs @@ -7,8 +7,6 @@ // Execute `rustlings hint iterators3` to get some hints! // Have fun :-) -// I AM NOT DONE - #[derive(Debug, PartialEq, Eq)] pub enum DivisionError { NotDivisible(NotDivisibleError), @@ -24,7 +22,15 @@ pub struct NotDivisibleError { // This function should calculate `a` divided by `b` if `a` is // evenly divisible by b. // Otherwise, it should return a suitable error. -pub fn divide(a: i32, b: i32) -> Result {} +pub fn divide(a: i32, b: i32) -> Result { + if b == 0 { + Err(DivisionError::DivideByZero) + } else if a % b != 0 { + Err(DivisionError::NotDivisible(NotDivisibleError{dividend: a, divisor: b})) + } else { + Ok(a / b) + } +} #[cfg(test)] mod tests { diff --git a/exercises/standard_library_types/iterators4.rs b/exercises/standard_library_types/iterators4.rs index 88862838..e1e4de5b 100644 --- a/exercises/standard_library_types/iterators4.rs +++ b/exercises/standard_library_types/iterators4.rs @@ -1,7 +1,5 @@ // iterators4.rs -// I AM NOT DONE - pub fn factorial(num: u64) -> u64 { // Complete this function to return the factorial of num // Do not use: @@ -12,6 +10,15 @@ pub fn factorial(num: u64) -> u64 { // For an extra challenge, don't use: // - recursion // Execute `rustlings hint iterators4` for hints. + + // Recusive + // match num { + // 0 | 1 => 1, + // num => num * factorial(num - 1), + // } + + // Functional + (1..num+1).product() } #[cfg(test)]