summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-08-25 03:47:11 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-08-25 03:47:11 +0200
commitfd484ec9cb380646a2b4017e64de2be16c04ed2a (patch)
tree5e9a882a39c6e36e5a3a39ac0b73a4a81f363ca8
parent8d991ede51ab1c898350ea7094e8dd07fe9cfae3 (diff)
Triangle
-rw-r--r--go/triangle/.triangle.go.swpbin12288 -> 0 bytes
-rw-r--r--go/triangle/triangle.go38
2 files changed, 27 insertions, 11 deletions
diff --git a/go/triangle/.triangle.go.swp b/go/triangle/.triangle.go.swp
deleted file mode 100644
index d58a2a8..0000000
--- a/go/triangle/.triangle.go.swp
+++ /dev/null
Binary files differ
diff --git a/go/triangle/triangle.go b/go/triangle/triangle.go
index 7243375..482cb60 100644
--- a/go/triangle/triangle.go
+++ b/go/triangle/triangle.go
@@ -1,17 +1,33 @@
package triangle
-const testVersion = 2
+import "math"
-// Code this function.
-func KindFromSides(a, b, c float64) Kind
+const testVersion = 2
-// Notice it returns this type. Pick something suitable.
-type Kind
+func KindFromSides(a, b, c float64) Kind {
+ invalid := func(n float64) bool {
+ return math.IsNaN(n) || math.IsInf(n, 0) || n <= 0
+ }
+ if invalid(a) || invalid(b) || invalid(c) {
+ return NaT
+ }
+ if a+b < c || a+c < b || b+c < a {
+ return NaT
+ }
+ if a == b && b == c {
+ return Equ
+ }
+ if a == b || b == c || a == c {
+ return Iso
+ }
+ return Sca
+}
-// Pick values for the following identifiers used by the test program.
-NaT // not a triangle
-Equ // equilateral
-Iso // isosceles
-Sca // scalene
+type Kind string
-// Organize your code for readability.
+const (
+ NaT Kind = "not a triangle"
+ Equ Kind = "equilateral"
+ Iso Kind = "isosceles"
+ Sca Kind = "scalene"
+)