package main import "fmt" func average(nums []float64) float64 { if len(nums) == 0 { return 0 } var sum float64 for _, i := range nums { sum += i } return sum / float64(len(nums)) } func filter(nums []float64, comp func(float64, float64) bool) []float64 { if len(nums) == 0 { return make([]float64, 0) } val, idxVal := nums[0], 0 for idx, num := range nums { if comp(num, val) { val, idxVal = num, idx } } nums = append(nums[:idxVal], nums[idxVal+1:]...) return nums } func centeredAverage(nums ...float64) float64 { nums = filter(nums, func(a float64, b float64) bool { return a > b }) nums = filter(nums, func(a float64, b float64) bool { return a < b }) return average(nums) } func main() { fmt.Println(centeredAverage()) fmt.Println(centeredAverage(1, 2, 3, 4, 100)) fmt.Println(centeredAverage(1)) fmt.Println(centeredAverage(1, 1)) fmt.Println(centeredAverage(1, 1, 1)) }