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>) -> 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, b: Vec) -> (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); }