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; } };