Guest User

Untitled

a guest
Apr 26th, 2018
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "bytes"
  6. "fmt"
  7. "io"
  8. "os"
  9. "strings"
  10. )
  11.  
  12. const filePath string = "./data/users.txt"
  13.  
  14. //easyjson:json
  15. type User struct {
  16. Name string `json:"name"`
  17. Email string `json:"email"`
  18. Browsers []string `json:"browsers"`
  19. }
  20.  
  21. // Only for easyjson generation
  22. func main() {
  23. u := &User{}
  24. u.UnmarshalJSON([]byte(`{"browsers":["Mozilla","Second","Linux"],
  25. "company":"Flashpoint",
  26. "country":"Dominican Republic",
  27. "email":"JonathanMorris@Muxo.edu",
  28. "job":"Programmer",
  29. "name":"Sharon Crawford",
  30. "phone":"176-88-49"}`))
  31. fmt.Println(u)
  32. }
  33.  
  34. // Fastest IntToStr
  35. func String(i int) string {
  36. buf := [11]byte{}
  37. pos := len(buf)
  38. signed := i < 0
  39. if signed {
  40. i = -i
  41. }
  42. for {
  43. pos--
  44. buf[pos], i = '0'+byte(i%10), i/10
  45. if i == 0 {
  46. if signed {
  47. pos--
  48. buf[pos] = '-'
  49. }
  50. return string(buf[pos:])
  51. }
  52. }
  53. }
  54.  
  55. func FastSearch(out io.Writer) {
  56.  
  57. var q struct{}
  58. var buffer bytes.Buffer
  59.  
  60. file, err := os.Open(filePath)
  61. defer file.Close()
  62. if err != nil {
  63. panic(err)
  64. }
  65.  
  66. user := &User{}
  67. seenBrowsers := make(map[string]struct{}, 0)
  68. scanner := bufio.NewScanner(file)
  69. buffer.WriteString("found users:\n")
  70. idx := 0
  71.  
  72. for scanner.Scan() {
  73.  
  74. err := user.UnmarshalJSON(scanner.Bytes())
  75. if err != nil {
  76. panic(err)
  77. }
  78.  
  79. isAndroid := false
  80. isMSIE := false
  81.  
  82. for _, browser := range user.Browsers {
  83. if strings.Contains(browser, "Android") {
  84. isAndroid = true
  85. if _, ok := seenBrowsers[browser]; !ok {
  86. seenBrowsers[browser] = q
  87. }
  88. }
  89. if strings.Contains(browser, "MSIE") {
  90. isMSIE = true
  91. if _, ok := seenBrowsers[browser]; !ok {
  92. seenBrowsers[browser] = q
  93. }
  94. }
  95. }
  96.  
  97. if isAndroid && isMSIE {
  98. email := strings.Replace(user.Email, "@", " [at] ", -1)
  99. buffer.WriteString("[" + String(idx) + "] " + user.Name + " <" + email + ">\n")
  100. }
  101.  
  102. idx++
  103. }
  104.  
  105. buffer.WriteString("\nTotal unique browsers " + String(len(seenBrowsers)))
  106. fmt.Fprintln(out, buffer.String())
  107. }
Add Comment
Please, Sign In to add comment