From 177787395f4179e8510adfba52e211b151774372 Mon Sep 17 00:00:00 2001 From: Hunter Kvalevog Date: Fri, 18 Sep 2026 16:34:17 -0500 Subject: rustlings: complete 05 --- rustlings/exercises/05_vecs/vecs1.rs | 4 +-- rustlings/exercises/05_vecs/vecs2.rs | 3 +- rustlings/solutions/05_vecs/vecs1.rs | 23 +++++++++++++-- rustlings/solutions/05_vecs/vecs2.rs | 55 ++++++++++++++++++++++++++++++++++-- 4 files changed, 77 insertions(+), 8 deletions(-) diff --git a/rustlings/exercises/05_vecs/vecs1.rs b/rustlings/exercises/05_vecs/vecs1.rs index 68e1aff..f976c84 100644 --- a/rustlings/exercises/05_vecs/vecs1.rs +++ b/rustlings/exercises/05_vecs/vecs1.rs @@ -1,9 +1,7 @@ fn array_and_vec() -> ([i32; 4], Vec) { let a = [10, 20, 30, 40]; // Array - // TODO: Create a vector called `v` which contains the exact same elements as in the array `a`. - // Use the vector macro. - // let v = ???; + let v = vec![10, 20, 30, 40]; (a, v) } diff --git a/rustlings/exercises/05_vecs/vecs2.rs b/rustlings/exercises/05_vecs/vecs2.rs index a9be258..1ec77f7 100644 --- a/rustlings/exercises/05_vecs/vecs2.rs +++ b/rustlings/exercises/05_vecs/vecs2.rs @@ -4,6 +4,7 @@ fn vec_loop(input: &[i32]) -> Vec { for element in input { // TODO: Multiply each element in the `input` slice by 2 and push it to // the `output` vector. + output.push(element * 2); } output @@ -24,7 +25,7 @@ fn vec_map(input: &[i32]) -> Vec { input .iter() .map(|element| { - // ??? + element * 2 }) .collect() } diff --git a/rustlings/solutions/05_vecs/vecs1.rs b/rustlings/solutions/05_vecs/vecs1.rs index dcf2377..55b5676 100644 --- a/rustlings/solutions/05_vecs/vecs1.rs +++ b/rustlings/solutions/05_vecs/vecs1.rs @@ -1,4 +1,23 @@ +fn array_and_vec() -> ([i32; 4], Vec) { + let a = [10, 20, 30, 40]; // Array + + // Used the `vec!` macro. + let v = vec![10, 20, 30, 40]; + + (a, v) +} + 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 test_array_and_vec_similarity() { + let (a, v) = array_and_vec(); + assert_eq!(a, *v); + } } diff --git a/rustlings/solutions/05_vecs/vecs2.rs b/rustlings/solutions/05_vecs/vecs2.rs index dcf2377..87f7625 100644 --- a/rustlings/solutions/05_vecs/vecs2.rs +++ b/rustlings/solutions/05_vecs/vecs2.rs @@ -1,4 +1,55 @@ +fn vec_loop(input: &[i32]) -> Vec { + let mut output = Vec::new(); + + for element in input { + output.push(2 * element); + } + + output +} + +fn vec_map_example(input: &[i32]) -> Vec { + // An example of collecting a vector after mapping. + // We map each element of the `input` slice to its value plus 1. + // If the input is `[1, 2, 3]`, the output is `[2, 3, 4]`. + input.iter().map(|element| element + 1).collect() +} + +fn vec_map(input: &[i32]) -> Vec { + // We will dive deeper into iterators, but for now, this is all what you + // had to do! + // Advanced note: This method is more efficient because it automatically + // preallocates enough capacity. This can be done manually in `vec_loop` + // using `Vec::with_capacity(input.len())` instead of `Vec::new()`. + input.iter().map(|element| 2 * element).collect() +} + 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 test_vec_loop() { + let input = [2, 4, 6, 8, 10]; + let ans = vec_loop(&input); + assert_eq!(ans, [4, 8, 12, 16, 20]); + } + + #[test] + fn test_vec_map_example() { + let input = [1, 2, 3]; + let ans = vec_map_example(&input); + assert_eq!(ans, [2, 3, 4]); + } + + #[test] + fn test_vec_map() { + let input = [2, 4, 6, 8, 10]; + let ans = vec_map(&input); + assert_eq!(ans, [4, 8, 12, 16, 20]); + } } -- cgit v1.2.3