Advertisement
Guest User

Untitled

a guest
Mar 31st, 2023
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.19 KB | None | 0 0
  1. // map.go
  2. package main
  3.  
  4. import (
  5.     "bytes"
  6.     "fmt"
  7.     "strconv"
  8. )
  9.  
  10. type MSD map[string]float64
  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 map[string]float64, key string, set, inc int, ctr *int) {
  34.     if _, ok := m[key]; !ok {
  35.         m[key] = float64(set)
  36.     } else {
  37.         m[key] += float64(inc)
  38.         *ctr += 1
  39.     }
  40. }
  41. func main() {
  42.     m := MSD{}
  43.     dup1, dup2, dup3 := 0, 0, 0
  44.     for z := MAX_DATA; z > 0; z-- {
  45.         val2 := MAX_DATA - z
  46.         val3 := MAX_DATA*2 - z
  47.         key1 := strconv.Itoa(z)
  48.         key2 := strconv.Itoa(val2)
  49.         key3 := to_rhex(val3)
  50.         set_or_inc(m, key1, z, val2, &dup1)
  51.         set_or_inc(m, key2, val2, val3, &dup2)
  52.         set_or_inc(m, key3, val3, z, &dup3)
  53.     }
  54.     fmt.Println(dup1, dup2, dup3)
  55.     total, verify, count := 0, 0, 0
  56.     for k, v := range m {
  57.         total += get_first_digit(v)
  58.         verify += len(k)
  59.         count += 1
  60.     }
  61.     fmt.Println(total, verify, count)
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement