Sha256: f86aecfbc24839a4e0c319591494d3641d46d88fa1dfb0e2e06886eede81f01c

Contents?: true

Size: 962 Bytes

Versions: 395

Compression:

Stored size: 962 Bytes

Contents

use std::iter::FromIterator;
use std::collections::BTreeSet;

pub struct Triangle {
    sides: [u16; 3],
}

impl Triangle {
    #[cfg_attr(rustfmt, rustfmt_skip)]
    fn valid_sides(&self) -> bool {
        (self.sides.iter().all(|&s| s > 0)) &&
            (self.sides[0] + self.sides[1] >= self.sides[2]) &&
            (self.sides[1] + self.sides[2] >= self.sides[0]) &&
            (self.sides[2] + self.sides[0] >= self.sides[1])
    }

    pub fn build(sides: [u16; 3]) -> Result<Self, ()> {
        let t = Triangle { sides: sides };

        if t.valid_sides() {
            Ok(t)
        } else {
            Err(())
        }
    }

    pub fn is_equilateral(&self) -> bool {
        BTreeSet::from_iter(self.sides.iter()).len() == 1
    }

    pub fn is_isosceles(&self) -> bool {
        BTreeSet::from_iter(self.sides.iter()).len() == 2
    }

    pub fn is_scalene(&self) -> bool {
        BTreeSet::from_iter(self.sides.iter()).len() == 3
    }
}

Version data entries

395 entries across 395 versions & 1 rubygems

Version Path
trackler-2.2.1.179 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.178 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.177 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.176 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.175 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.174 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.173 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.172 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.171 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.170 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.169 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.167 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.166 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.165 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.164 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.163 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.162 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.161 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.160 tracks/rust/exercises/triangle/example.rs
trackler-2.2.1.159 tracks/rust/exercises/triangle/example.rs