Created
June 3, 2021 18:58
-
-
Save snewcomer/85b45f738b9a9fddcc6c0d7193e1ca91 to your computer and use it in GitHub Desktop.
Interview Question in Rust!!
This file contains hidden or 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
fn find_positive_sum(vec: &Vec<[i32; 5]>, coords: Vec<(i32, i32)>) -> i32 { | |
let mut sum = 0; | |
let mut coords_sorted = coords.clone(); | |
coords_sorted.sort(); // sort to get duplicates as neighbors | |
coords_sorted.dedup(); | |
for (x, y) in coords_sorted.iter() { | |
if let Some(inner) = vec.get(*y as usize) { // Some(inner) or None | |
if let Some(inner_x) = inner.get(*x as usize) { // Some(inner) or None | |
sum += inner_x; | |
} | |
} | |
} | |
sum | |
} | |
fn find_diagonal(vec: &Vec<[u32; 5]>, starting_point: (usize, usize)) -> Vec<u32> { | |
// backwards | |
let mut x = starting_point.0; | |
let mut y = starting_point.1; | |
let mut result = vec![]; | |
loop { | |
if x < 1 { | |
break; // overflow | |
} | |
if y < 1 { | |
break; | |
} | |
x = x - 1; | |
y = y - 1; | |
result.push(vec[y][x]); | |
} | |
result.push(vec[starting_point.1][starting_point.0]); | |
// forwards | |
let mut x = starting_point.0; | |
let mut y = starting_point.1; | |
loop { | |
if x > vec[0].len() - 1 { // x length = 5; | |
break; // overflow | |
} | |
if y >= vec.len() - 1 { // y == 3 | |
break; | |
} | |
dbg!(x, y, vec.len()); | |
x = x + 1; | |
y = y + 1; | |
result.push(vec[y][x]); | |
} | |
result | |
} | |
fn main() { | |
let vec = vec![ | |
[3, 5, 1, 8, 2], | |
[4, 9, 7, 2, 1], | |
[1, 6, 6, 2, 8], | |
[5, 4, 9, 1, 3], | |
]; | |
let res = find_positive_sum(&vec, vec![(1, 3), (4, 0), (2,2), (1,3), (4, 0), (4, 0)]); | |
dbg!(res); | |
let res = find_positive_sum(&vec, vec![(1, 4)]); | |
dbg!(res); | |
let res = find_positive_sum(&vec, vec![(5, 3)]); | |
dbg!(res); | |
let res = find_positive_sum(&vec, vec![(-1, 3)]); | |
dbg!(res); | |
let vec = vec![ | |
[3, 5, 1, 8, 2], | |
[4, 9, 7, 2, 1], | |
[1, 6, 6, 2, 8], | |
[5, 4, 9, 1, 3], | |
]; | |
let res = find_diagonal(&vec, (1, 3)); | |
dbg!(res); | |
let res = find_diagonal(&vec, (1, 1)); | |
dbg!(res); | |
let res = find_diagonal(&vec, (2, 1)); | |
dbg!(res); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment