View difference between Paste ID: SBZXSPFb and QSyy5uBG
SHOW: | | - or go back to the newest paste.
1-
// map.go
1+
2
3
import (
4
	"bytes"
5
	"fmt"
6
	"strconv"
7
8
	"github.com/dolthub/swiss"
9
)
10-
type MSD map[string]float64
10+
11
const MAX_DATA = 12000000
12
13
var i2ch []byte
14
15
func init() {
16
	i2ch = []byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'B', 'c', 'D', 'e', 'F'}
17
}
18
func get_first_digit(d float64) int {
19
	for d > 10 {
20
		d /= 10
21
	}
22
	return int(d)
23
}
24
func to_rhex(v int) string {
25
	hex := bytes.Buffer{}
26
	for v > 0 {
27
		hex.WriteByte(i2ch[v%16])
28
		v /= 16
29
	}
30
	return hex.String()
31
}
32
func set_or_inc(m *swiss.Map[string, float64], key string, set, inc int, ctr *int) {
33-
func set_or_inc(m map[string]float64, key string, set, inc int, ctr *int) {
33+
	if old, ok := m.Get(key); !ok {
34-
	if _, ok := m[key]; !ok {
34+
		m.Put(key, float64(set))
35-
		m[key] = float64(set)
35+
36
		m.Put(key, old+float64(inc))
37-
		m[key] += float64(inc)
37+
38
	}
39
}
40
func main() {
41
	m := swiss.NewMap[string, float64](MAX_DATA)
42-
	m := MSD{}
42+
43
	for z := MAX_DATA; z > 0; z-- {
44
		val2 := MAX_DATA - z
45
		val3 := MAX_DATA*2 - z
46
		key1 := strconv.Itoa(z)
47
		key2 := strconv.Itoa(val2)
48
		key3 := to_rhex(val3)
49
		set_or_inc(m, key1, z, val2, &dup1)
50
		set_or_inc(m, key2, val2, val3, &dup2)
51
		set_or_inc(m, key3, val3, z, &dup3)
52
	}
53
	fmt.Println(dup1, dup2, dup3)
54
	total, verify, count := 0, 0, 0
55
	m.Iter(func(k string, v float64) bool {
56-
	for k, v := range m {
56+
57
		verify += len(k)
58
		count += 1
59
		return true
60
	})
61
	fmt.Println(total, verify, count)
62
}
63