summary refs log tree commit diff stats
path: root/javascript/triangle/triangle.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/triangle/triangle.js')
-rw-r--r--javascript/triangle/triangle.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/javascript/triangle/triangle.js b/javascript/triangle/triangle.js
new file mode 100644
index 0000000..dba1449
--- /dev/null
+++ b/javascript/triangle/triangle.js
@@ -0,0 +1,43 @@
+'use strict';
+
+export class Triangle {
+    constructor(s1, s2, s3) {
+        this.s1 = s1;
+        this.s2 = s2;
+        this.s3 = s3;
+    }
+
+    get isEquilateral() {
+        return (this.isTriangle()
+                && this.s1 === this.s2
+                && this.s2 === this.s3);
+    }
+
+    get isIsosceles() {
+        return (this.isTriangle()
+                && (
+                    this.s1 === this.s2
+                        || this.s2 === this.s3
+                        || this.s3 === this.s1
+                ));
+    }
+
+    get isScalene() {
+        return (this.isTriangle()
+                && this.s1 !== this.s2
+                && this.s2 !== this.s3
+                && this.s3 !== this.s1);
+    }
+
+    isTriangle() {
+        if (
+            // Triangle inequality.
+            !(this.s1 + this.s2 > this.s3
+             && this.s1 + this.s3 > this.s2
+             && this.s2 + this.s3 > this.s1)
+            // Sides of a triangle cannot be zero.
+                || (this.s1 === 0 || this.s2 === 0 || this.s3 === 0)
+        ) return false;
+        return true;
+    }
+}