Last active
September 15, 2022 20:08
-
-
Save Trard/2c36447c7e3ebc8f427d6af96038725f to your computer and use it in GitHub Desktop.
https://www.youtube.com/watch?v=JtMuXmmDl9s. I coded it myself without any hints.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::cmp; | |
pub fn find_pairs(numbers: &[i32], k: i32) -> Option<(i32, i32)> { | |
let math_mid = numbers.len()/2; | |
let mut large_numbers = numbers[math_mid as usize..].iter(); | |
let mut small_numbers = numbers[..math_mid as usize].iter().rev(); | |
let mut small_numbers_to_larger = large_numbers.clone(); | |
let mut big_numbers_to_smaller = small_numbers.clone(); | |
let mut small_number = small_numbers.next()?; | |
let mut large_number = large_numbers.next()?; | |
loop { | |
let sum = small_number + large_number; | |
match sum.cmp(&k) { | |
cmp::Ordering::Equal => { | |
return Some((large_number.clone(), small_number.clone())); | |
}, | |
cmp::Ordering::Less => { | |
match large_numbers.next() { | |
Some(number) => { | |
large_number = number; | |
}, | |
None => { | |
small_number = small_numbers_to_larger.next()?; | |
} | |
}; | |
continue; | |
} | |
cmp::Ordering::Greater => { | |
match small_numbers.next() { | |
Some(number) => { | |
small_number = number; | |
}, | |
None => { | |
large_number = big_numbers_to_smaller.next()?; | |
} | |
}; | |
continue; | |
} | |
} | |
} | |
} | |
mod tests { | |
use super::*; | |
fn test_pair(array: &[i32], k: i32) { | |
let pair = find_pairs(&array, k).unwrap(); | |
assert!(array.contains(&pair.0)); | |
assert!(array.contains(&pair.1)); | |
assert_eq!(pair.0+pair.1, k); | |
} | |
#[test] | |
fn first_test() { | |
let array = [-1, 2, 5, 8]; | |
let k = 7; | |
test_pair(&array, k); | |
} | |
#[test] | |
fn second_test() { | |
let array = [-3, -1, 0, 2, 6]; | |
let k = 6; | |
test_pair(&array, k); | |
} | |
#[test] | |
fn third_test() { | |
let array = [2, 4, 5]; | |
let k = 8; | |
let pair = find_pairs(&array, k); | |
assert_eq!(pair, None); | |
} | |
#[test] | |
fn fourth_test() { | |
let array = [-2, -1, 1, 2]; | |
let k = 0; | |
test_pair(&array, k); | |
} | |
#[test] | |
fn fifth_test() { | |
let array = [-9, -5, -2, -1, 1, 4, 9, 11]; | |
let k = 3; | |
test_pair(&array, k) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment