Utils.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package main
  2. import (
  3. "container/list"
  4. "fmt"
  5. "math/rand"
  6. "strings"
  7. "time"
  8. )
  9. const (
  10. letterIdxBits = 6
  11. letterIdxMask = 1<<letterIdxBits - 1
  12. letterIdxMax = 63 / letterIdxBits
  13. )
  14. type speedPair struct {
  15. index uint64
  16. speed float64
  17. }
  18. const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  19. var SpeedQueue = list.New()
  20. var SpeedIndex uint64 = 0
  21. type header struct {
  22. key, value string
  23. }
  24. type headersList []header
  25. func (h *headersList) String() string {
  26. return fmt.Sprint(*h)
  27. }
  28. func (h *headersList) IsCumulative() bool {
  29. return true
  30. }
  31. func (h *headersList) Set(value string) error {
  32. res := strings.SplitN(value, ":", 2)
  33. if len(res) != 2 {
  34. return nil
  35. }
  36. *h = append(*h, header{
  37. res[0], strings.Trim(res[1], " "),
  38. })
  39. return nil
  40. }
  41. type ipArray []string
  42. func (i *ipArray) String() string {
  43. return strings.Join(*i, ",")
  44. }
  45. func (i *ipArray) Set(value string) (err error) {
  46. *i = append(*i, strings.TrimSpace(value))
  47. return nil
  48. }
  49. func RandStringBytesMaskImpr(n int) string {
  50. b := make([]byte, n)
  51. for i, cache, remain := n-1, rand.Int63(), letterIdxMax; i >= 0; {
  52. if remain == 0 {
  53. cache, remain = rand.Int63(), letterIdxMax
  54. }
  55. if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
  56. b[i] = letterBytes[idx]
  57. i--
  58. }
  59. cache >>= letterIdxBits
  60. remain--
  61. }
  62. return string(b)
  63. }
  64. func generateRandomIPAddress() string {
  65. rand.Seed(time.Now().Unix())
  66. ip := fmt.Sprintf("%d.%d.%d.%d", rand.Intn(255), rand.Intn(255), rand.Intn(255), rand.Intn(255))
  67. return ip
  68. }
  69. func LeastSquares(x []float64, y []float64) (a float64, b float64) {
  70. xi := float64(0)
  71. x2 := float64(0)
  72. yi := float64(0)
  73. xy := float64(0)
  74. if len(x) != len(y) {
  75. a = 0
  76. b = 0
  77. return
  78. } else {
  79. length := float64(len(x))
  80. for i := 0; i < len(x); i++ {
  81. xi += x[i]
  82. x2 += x[i] * x[i]
  83. yi += y[i]
  84. xy += x[i] * y[i]
  85. }
  86. a = (yi*xi - xy*length) / (xi*xi - x2*length)
  87. b = (yi*x2 - xy*xi) / (x2*length - xi*xi)
  88. }
  89. return
  90. }