summaryrefslogtreecommitdiff
path: root/check-if-it-is-a-straight-line/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'check-if-it-is-a-straight-line/src/main.rs')
-rw-r--r--check-if-it-is-a-straight-line/src/main.rs37
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);
+}
+