diff options
Diffstat (limited to 'check-if-it-is-a-straight-line/src')
| -rw-r--r-- | check-if-it-is-a-straight-line/src/main.rs | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/check-if-it-is-a-straight-line/src/main.rs b/check-if-it-is-a-straight-line/src/main.rs new file mode 100644 index 0000000..711e12e --- /dev/null +++ b/check-if-it-is-a-straight-line/src/main.rs @@ -0,0 +1,37 @@ +fn main() { +    let tests = [ +        (vec![[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]], true), +        (vec![[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]], false), +        (vec![[0,0],[0,1],[0,-1]], true) +    ]; + +    for test in tests { +        println!("{:?} is {} should be {}",  +                 test.0,  +                 check_straight_line(test.0.iter().map(|c| c.to_vec()).collect()),  +                 test.1); +    } +} + +pub fn check_straight_line(coordinates: Vec<Vec<i32>>) -> bool { +    let base = get_lin_fn(coordinates[0].clone(), coordinates[1].clone()); +    println!("{:?} base", base); +    for c in 1..coordinates.len() { +        let lin_fn = get_lin_fn(coordinates[0].clone(), coordinates[c].clone()); +        println!("{} {:?}", c, lin_fn); +        if lin_fn != base { +            return false; +        } +    } +    return true; +} + +pub fn get_lin_fn(a: Vec<i32>, b: Vec<i32>) -> (f32, f32) { +    let mx = b[0] - a[0]; +    let my = b[1] - a[1]; +    let m = my as f32/mx as f32; +    let b = a[1] as f32 - m*a[0] as f32; + +    return (m,b); +} +  | 
