exercism/zig/triangle/triangle.zig

32 lines
818 B
Zig
Raw Normal View History

2024-09-20 17:07:30 -04:00
pub const TriangleError = error{Invalid};
pub const Triangle = struct {
a: f64,
b: f64,
c: f64,
fn isValid(a: f64, b: f64, c: f64) bool {
return (a > 0 and b > 0 and c > 0) and (a + b >= c and b + c >= a and a + c >= b);
}
pub fn init(a: f64, b: f64, c: f64) TriangleError!Triangle {
if (!isValid(a, b, c)) {
return error.Invalid;
}
return Triangle{ .a = a, .b = b, .c = c };
}
pub fn isEquilateral(self: Triangle) bool {
return self.a == self.b and self.b == self.c;
}
pub fn isIsosceles(self: Triangle) bool {
return self.a == self.b or self.a == self.c or self.b == self.c;
}
pub fn isScalene(self: Triangle) bool {
return self.a != self.b and self.a != self.c and self.b != self.c;
}
};