Advertisement
Guest User

Untitled

a guest
Mar 31st, 2023
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // map.go
  2. package main
  3.  
  4. import (
  5.     "bytes"
  6.     "fmt"
  7.     "strconv"
  8.  
  9.     "github.com/alphadose/haxmap"
  10. )
  11.  
  12. const MAX_DATA = 12000000
  13.  
  14. var i2ch []byte
  15.  
  16. func init() {
  17.     i2ch = []byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'B', 'c', 'D', 'e', 'F'}
  18. }
  19. func get_first_digit(d float64) int {
  20.     for d > 10 {
  21.         d /= 10
  22.     }
  23.     return int(d)
  24. }
  25. func to_rhex(v int) string {
  26.     hex := bytes.Buffer{}
  27.     for v > 0 {
  28.         hex.WriteByte(i2ch[v%16])
  29.         v /= 16
  30.     }
  31.     return hex.String()
  32. }
  33. func set_or_inc(m *haxmap.Map[string, float64], key string, set, inc int, ctr *int) {
  34.     if old, ok := m.Get(key); !ok {
  35.         m.Set(key, float64(set))
  36.     } else {
  37.         m.Set(key, old+float64(inc))
  38.         *ctr += 1
  39.     }
  40. }
  41. func main() {
  42.     m := haxmap.New[string, float64]()
  43.     m.Grow(MAX_DATA)
  44.     dup1, dup2, dup3 := 0, 0, 0
  45.     for z := MAX_DATA; z > 0; z-- {
  46.         val2 := MAX_DATA - z
  47.         val3 := MAX_DATA*2 - z
  48.         key1 := strconv.Itoa(z)
  49.         key2 := strconv.Itoa(val2)
  50.         key3 := to_rhex(val3)
  51.         set_or_inc(m, key1, z, val2, &dup1)
  52.         set_or_inc(m, key2, val2, val3, &dup2)
  53.         set_or_inc(m, key3, val3, z, &dup3)
  54.     }
  55.     fmt.Println(dup1, dup2, dup3)
  56.     total, verify, count := 0, 0, 0
  57.     m.ForEach(func(k string, v float64) bool {
  58.         total += get_first_digit(v)
  59.         verify += len(k)
  60.         count += 1
  61.         return true
  62.     })
  63.     fmt.Println(total, verify, count)
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement