diff options
| author | Federico Igne <git@federicoigne.com> | 2021-01-01 16:10:59 +0000 |
|---|---|---|
| committer | Federico Igne <git@federicoigne.com> | 2021-11-03 18:55:08 +0000 |
| commit | 6ddf37f5142151639c3e9948a62d6c0abd77d3b9 (patch) | |
| tree | 80040e3f95813d119cc297a3d10a462b2f030c12 /rust/triangle/src | |
| parent | 63122ddc672e2d287b9cc0e7752675cb0f70f7cf (diff) | |
| download | exercism-6ddf37f5142151639c3e9948a62d6c0abd77d3b9.tar.gz exercism-6ddf37f5142151639c3e9948a62d6c0abd77d3b9.zip | |
[rust] Triangle
Diffstat (limited to 'rust/triangle/src')
| -rw-r--r-- | rust/triangle/src/lib.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/rust/triangle/src/lib.rs b/rust/triangle/src/lib.rs new file mode 100644 index 0000000..f4486fe --- /dev/null +++ b/rust/triangle/src/lib.rs | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | use std::ops::Add; | ||
| 2 | |||
| 3 | pub struct Triangle<T>([T; 3]); | ||
| 4 | |||
| 5 | impl<T> Triangle<T> | ||
| 6 | where | ||
| 7 | T: Add<Output = T> + PartialOrd + Copy, | ||
| 8 | { | ||
| 9 | pub fn build(sides: [T; 3]) -> Option<Triangle<T>> { | ||
| 10 | Some(Triangle(sides)) | ||
| 11 | .filter(|_| sides[0] + sides[1] > sides[2]) | ||
| 12 | .filter(|_| sides[1] + sides[2] > sides[0]) | ||
| 13 | .filter(|_| sides[0] + sides[2] > sides[1]) | ||
| 14 | } | ||
| 15 | |||
| 16 | pub fn is_equilateral(&self) -> bool { | ||
| 17 | self.0[0] == self.0[1] && self.0[1] == self.0[2] | ||
| 18 | } | ||
| 19 | |||
| 20 | pub fn is_scalene(&self) -> bool { | ||
| 21 | self.0[0] != self.0[1] && self.0[1] != self.0[2] && self.0[0] != self.0[2] | ||
| 22 | } | ||
| 23 | |||
| 24 | pub fn is_isosceles(&self) -> bool { | ||
| 25 | !(self.is_equilateral() || self.is_scalene()) | ||
| 26 | } | ||
| 27 | } | ||
