@@ -43,9 +43,9 @@ An atom.
4343---
4444### `++mug`
4545
46−FNV-1a scrambler
46+murmur3 scrambler
4747
48−Hashes `a` with the 31-bit nonzero FNV-1a non-cryptographic hash algorithm,
48+Hashes `a` with the 31-bit murmur3 non-cryptographic hash algorithm,
4949producing an atom.
5050
5151#### Accepts
@@ -59,45 +59,37 @@ An atom.
5959#### Source
6060
6161```hoon
62− ++ mug
63− ~/ %mug
64− |= a=*
65− ?^ a
66− =+ b=[p=$(a -.a) q=$(a +.a)]
67− |- ^- @
68− =+ c=(fnv (mix p.b (fnv q.b)))
69− =+ d=(mix (rsh 0 31 c) (end 0 31 c))
70− ?. =(0 d) d
71− $(q.b +(q.b))
72− =+ b=2.166.136.261
73− |- ^- @
74− =+ c=b
75− =+ [d=0 e=(met 3 a)]
76− |- ^- @
77− ?: =(d e)
78− =+ f=(mix (rsh 0 31 c) (end 0 31 c))
79− ?. =(0 f) f
80− ^$(b +(b))
81− $(c (fnv (mix c (cut 3 [d 1] a))), d +(d))
62+++ mug :: mug with murmur3
63+ ~/ %mug
64+ |= a/*
65+ |^ (trim ?@(a a (mix $(a -.a) (mix 0x7fff.ffff $(a +.a)))))
66+ ++ trim :: 31-bit nonzero
67+ |= key/@
68+ =+ syd=0xcafe.babe
69+ |- ^- @
70+ =+ haz=(muk syd (met 3 key) key)
71+ =+ ham=(mix (rsh 0 31 haz) (end 0 31 haz))
72+ ?.(=(0 ham) ham $(syd +(syd)))
73+ --
8274```
8375
8476#### Examples
8577
8678```
8779 > (mug 10.000)
88− 178.152.889
80+ 795.713.195
8981
9082 > (mug 10.001)
91− 714.838.017
83+ 420.521.697
9284
9385 > (mug 1)
94− 67.918.732
86+ 1.901.865.568
9587
9688 > (mug (some 10))
97− 1.872.403.737
89+ 2.099.076.946
9890
9991 > (mug [1 2 3 4 5 ~])
100− 1.067.931.605
92+ 1.719.833.228
10193```
10294
10395
@@ -273,4 +265,4 @@ An atom.
273265```
274266
275267
276−---
268+---