helpers.go (1215B)
1 package helpers 2 3 import "golang.org/x/exp/constraints" 4 5 func Abs[T constraints.Integer](x T) T { 6 if x < 0 { 7 return -x 8 } 9 return x 10 } 11 12 func Torben(m [][]float64, numRows, numCols int) float64 { 13 n := numRows * numCols 14 midn := (n + 1) / 2 15 less := 0 16 greater := 0 17 equal := 0 18 min := m[0][0] 19 max := m[0][0] 20 guess := float64(0.0) 21 maxltguess := float64(0.0) 22 mingtguess := float64(0.0) 23 for i := 0; i < numRows; i++ { 24 for j := 0; j < numCols; j++ { 25 v := m[i][j] 26 if v < min { 27 min = v 28 } 29 30 if v > max { 31 max = v 32 } 33 } 34 } 35 36 for { 37 guess = (min + max) / 2 38 less = 0 39 greater = 0 40 equal = 0 41 maxltguess = min 42 mingtguess = max 43 44 for i := 0; i < numRows; i++ { 45 for j := 0; j < numCols; j++ { 46 v := m[i][j] 47 if v < guess { 48 less++ 49 if v > maxltguess { 50 maxltguess = v 51 } 52 } else if v > guess { 53 greater++ 54 if v < mingtguess { 55 mingtguess = v 56 } 57 } else { 58 equal++ 59 } 60 } 61 } 62 63 if less <= midn && greater <= midn { 64 break 65 } else if less > greater { 66 max = maxltguess 67 } else { 68 min = mingtguess 69 } 70 } 71 72 if less >= midn { 73 return maxltguess 74 } else if less+equal >= midn { 75 return guess 76 } else { 77 return mingtguess 78 } 79 }