exercism/go/pythagorean-triplet/pythagorean_triplet.go
2022-08-24 14:28:45 +02:00

40 lines
948 B
Go

package pythagorean
import "math"
type Triplet [3]int
func isTriplet(a, b, c int) bool {
return a*a + b*b == c*c && a < b && b < c
}
func Range(min, max int) []Triplet {
var triplets = []Triplet{}
for c := min; c <= max; c++ {
for b := min; b <= c - 1; b++ {
a := int(math.Sqrt(float64(c*c - b*b)))
if isTriplet(a, b, c) && a >= min {
triplets = append(triplets, Triplet{a,b,c})
}
}
}
return triplets
}
func Sum(p int) []Triplet {
temp_triplets := Range(1, p / 2)
triplets := make([]Triplet, 0, len(temp_triplets))
for _, triplet := range temp_triplets {
if triplet[0] + triplet[1] + triplet[2] == p {
triplets = append(triplets, triplet)
}
}
// Reverse slice..
for i, j := 0, len(triplets)-1; i < j; i, j = i+1, j-1 {
triplets[i], triplets[j] = triplets[j], triplets[i]
}
return triplets
}