From 6ddf37f5142151639c3e9948a62d6c0abd77d3b9 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Fri, 1 Jan 2021 16:10:59 +0000 Subject: [rust] Triangle --- rust/triangle/src/lib.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 rust/triangle/src/lib.rs (limited to 'rust/triangle/src/lib.rs') 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 @@ +use std::ops::Add; + +pub struct Triangle([T; 3]); + +impl Triangle +where + T: Add + PartialOrd + Copy, +{ + pub fn build(sides: [T; 3]) -> Option> { + 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()) + } +} -- cgit v1.2.3