Skip to content

Instantly share code, notes, and snippets.

@Trard
Last active September 15, 2022 20:08
Show Gist options
  • Save Trard/2c36447c7e3ebc8f427d6af96038725f to your computer and use it in GitHub Desktop.
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.
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