problems(rs): add “1232. Check If It Is a Straight Line”
Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
parent
35252ff989
commit
2d63ead6b8
1 changed files with 58 additions and 0 deletions
58
problems/rs/check-if-it-is-a-straight-line.rs
Normal file
58
problems/rs/check-if-it-is-a-straight-line.rs
Normal file
|
@ -0,0 +1,58 @@
|
|||
struct Solution {}
|
||||
impl Solution {
|
||||
fn x_diff(a: &[i32], b: &[i32]) -> i32 {
|
||||
a[0] - b[0]
|
||||
}
|
||||
|
||||
fn y_diff(a: &[i32], b: &[i32]) -> i32 {
|
||||
a[1] - b[1]
|
||||
}
|
||||
|
||||
pub fn check_straight_line(coordinates: Vec<Vec<i32>>) -> bool {
|
||||
assert!(coordinates.len() > 1);
|
||||
|
||||
let (dx, dy) = (
|
||||
Solution::x_diff(&coordinates[0], &coordinates[1]),
|
||||
Solution::y_diff(&coordinates[0], &coordinates[1]),
|
||||
);
|
||||
|
||||
coordinates.iter().all(|pt| {
|
||||
dx * Solution::y_diff(pt, &coordinates[0]) == dy * Solution::x_diff(pt, &coordinates[0])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
// Input: coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
|
||||
// Output: true
|
||||
#[test]
|
||||
fn example_1() {
|
||||
assert!(Solution::check_straight_line(vec![
|
||||
vec![1, 2],
|
||||
vec![2, 3],
|
||||
vec![3, 4],
|
||||
vec![4, 5],
|
||||
vec![5, 6],
|
||||
vec![6, 7]
|
||||
]));
|
||||
}
|
||||
|
||||
// Input: coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
|
||||
// Output: false
|
||||
#[test]
|
||||
fn example_2() {
|
||||
assert!(!Solution::check_straight_line(vec![
|
||||
vec![1, 1],
|
||||
vec![2, 2],
|
||||
vec![3, 4],
|
||||
vec![4, 5],
|
||||
vec![5, 6],
|
||||
vec![7, 7]
|
||||
]));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue