blob: f4486fea7152c13ed56cef840b208b8f20c3c3e7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
use std::ops::Add;
pub struct Triangle<T>([T; 3]);
impl<T> Triangle<T>
where
T: Add<Output = T> + PartialOrd + Copy,
{
pub fn build(sides: [T; 3]) -> Option<Triangle<T>> {
Some(Triangle(sides))
.filter(|_| sides[0] + sides[1] > sides[2])
.filter(|_| sides[1] + sides[2] > sides[0])
.filter(|_| sides[0] + sides[2] > sides[1])
}
pub fn is_equilateral(&self) -> bool {
self.0[0] == self.0[1] && self.0[1] == self.0[2]
}
pub fn is_scalene(&self) -> bool {
self.0[0] != self.0[1] && self.0[1] != self.0[2] && self.0[0] != self.0[2]
}
pub fn is_isosceles(&self) -> bool {
!(self.is_equilateral() || self.is_scalene())
}
}
|