mirror of
https://github.com/Egida/EndGame0.git
synced 2025-08-12 16:15:35 -04:00
EndGame v3
This commit is contained in:
commit
9e36ba54ee
646 changed files with 271674 additions and 0 deletions
63
sourcecode/gobalance/vendor/github.com/xrash/smetrics/soundex.go
generated
vendored
Normal file
63
sourcecode/gobalance/vendor/github.com/xrash/smetrics/soundex.go
generated
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
package smetrics
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// The Soundex encoding. It is a phonetic algorithm that considers how the words sound in English. Soundex maps a string to a 4-byte code consisting of the first letter of the original string and three numbers. Strings that sound similar should map to the same code.
|
||||
func Soundex(s string) string {
|
||||
b := strings.Builder{}
|
||||
b.Grow(4)
|
||||
|
||||
p := s[0]
|
||||
if p <= 'z' && p >= 'a' {
|
||||
p -= 32 // convert to uppercase
|
||||
}
|
||||
b.WriteByte(p)
|
||||
|
||||
n := 0
|
||||
for i := 1; i < len(s); i++ {
|
||||
c := s[i]
|
||||
|
||||
if c <= 'z' && c >= 'a' {
|
||||
c -= 32 // convert to uppercase
|
||||
} else if c < 'A' || c > 'Z' {
|
||||
continue
|
||||
}
|
||||
|
||||
if c == p {
|
||||
continue
|
||||
}
|
||||
|
||||
p = c
|
||||
|
||||
switch c {
|
||||
case 'B', 'P', 'F', 'V':
|
||||
c = '1'
|
||||
case 'C', 'S', 'K', 'G', 'J', 'Q', 'X', 'Z':
|
||||
c = '2'
|
||||
case 'D', 'T':
|
||||
c = '3'
|
||||
case 'L':
|
||||
c = '4'
|
||||
case 'M', 'N':
|
||||
c = '5'
|
||||
case 'R':
|
||||
c = '6'
|
||||
default:
|
||||
continue
|
||||
}
|
||||
|
||||
b.WriteByte(c)
|
||||
n++
|
||||
if n == 3 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for i := n; i < 3; i++ {
|
||||
b.WriteByte('0')
|
||||
}
|
||||
|
||||
return b.String()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue