summary refs log blame commit diff stats
path: root/javascript/triangle/triangle.js
blob: dba1449b0bc1e3d304e4fc761cf8a7da6ef10fdc (plain) (tree)










































                                                                    
'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;
    }
}