In the previous challenge, you learned how to propagate errors using the Result<T, E>
type for file handling. Rust also lets you use the ?
operator to propagate Option<T>
values, but instead of propagating the error it will convert the Option<T>
into a None
value if it is None
.
This challenge focuses on propagating Option
values and handling scenarios where optional values might be missing.
Implement the function find_and_multiply
:
Vec<i32>
).usize
values).Option<i32>
.None
.?
operator to propagate None
values.pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value numbers.get(index1)?; numbers.get(index2)?; let num1 = numbers.get(index1).unwrap(); let num2 = numbers.get(index2).unwrap(); Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; let result = num1 * num2; Some(result)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value // let num1 = numbers.get(index1).unwrap(); // let num2 = numbers.get(index2).unwrap(); Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value numbers.get(index1)?; numbers.get(index2)?; let num1 = numbers.get(index1).unwrap(); let num2 = numbers.get(index2).unwrap(); Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { if index1 >= numbers.len() || index2 >= numbers.len() { return None; } let num1 = numbers[index1]; let num2 = numbers[index2]; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let len = numbers.len(); if len <= index1 || len <= index2 { return None; } let num1 = numbers.get(index1).unwrap(); let num2 = numbers.get(index2).unwrap(); Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}
pub fn find_and_multiply(numbers: Vec<i32>, index1: usize, index2: usize) -> Option<i32> { // TODO: Instead of using `unwrap`, use the `?` operator to propagate the option // HINT: `numbers.get` returns a Option<i32> value let num1 = numbers.get(index1)?; let num2 = numbers.get(index2)?; Some(num1 * num2)}// Example usagepub fn main() { let numbers = vec![1, 2, 3, 4, 5]; // Example 1: Both indices are valid let result = find_and_multiply(numbers.clone(), 1, 3); println!("{:?}", result); // Should print Some(8) // Example 2: One index is out of bounds let result = find_and_multiply(numbers.clone(), 1, 10); println!("{:?}", result); // Should print None}