summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-09-18 16:34:17 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-09-18 16:34:17 -0500
commit177787395f4179e8510adfba52e211b151774372 (patch)
tree2c7229af2b1214c649c8d02ee4eb94f7e58f2c12
parent8f0234e3a297d99c958e8b85e131ec9323cd53c7 (diff)
rustlings: complete 05
-rw-r--r--rustlings/exercises/05_vecs/vecs1.rs4
-rw-r--r--rustlings/exercises/05_vecs/vecs2.rs3
-rw-r--r--rustlings/solutions/05_vecs/vecs1.rs23
-rw-r--r--rustlings/solutions/05_vecs/vecs2.rs55
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<i32>) {
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<i32> {
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<i32> {
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<i32>) {
+ 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<i32> {
+ let mut output = Vec::new();
+
+ for element in input {
+ output.push(2 * element);
+ }
+
+ output
+}
+
+fn vec_map_example(input: &[i32]) -> Vec<i32> {
+ // 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<i32> {
+ // 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]);
+ }
}