gitee.com/lonely0422/gometalinter.git@v3.0.1-0.20190307123442-32416ab75314+incompatible/_linters/src/github.com/nbutton23/zxcvbn-go/adjacency/adjcmartix.go (about) 1 package adjacency 2 3 import ( 4 "encoding/json" 5 "log" 6 // "fmt" 7 "github.com/nbutton23/zxcvbn-go/data" 8 ) 9 10 type AdjacencyGraph struct { 11 Graph map[string][]string 12 averageDegree float64 13 Name string 14 } 15 16 var AdjacencyGph = make(map[string]AdjacencyGraph) 17 18 func init() { 19 AdjacencyGph["qwerty"] = BuildQwerty() 20 AdjacencyGph["dvorak"] = BuildDvorak() 21 AdjacencyGph["keypad"] = BuildKeypad() 22 AdjacencyGph["macKeypad"] = BuildMacKeypad() 23 AdjacencyGph["l33t"] = BuildLeet() 24 } 25 26 func BuildQwerty() AdjacencyGraph { 27 data, err := zxcvbn_data.Asset("data/Qwerty.json") 28 if err != nil { 29 panic("Can't find asset") 30 } 31 return GetAdjancencyGraphFromFile(data, "qwerty") 32 } 33 func BuildDvorak() AdjacencyGraph { 34 data, err := zxcvbn_data.Asset("data/Dvorak.json") 35 if err != nil { 36 panic("Can't find asset") 37 } 38 return GetAdjancencyGraphFromFile(data, "dvorak") 39 } 40 func BuildKeypad() AdjacencyGraph { 41 data, err := zxcvbn_data.Asset("data/Keypad.json") 42 if err != nil { 43 panic("Can't find asset") 44 } 45 return GetAdjancencyGraphFromFile(data, "keypad") 46 } 47 func BuildMacKeypad() AdjacencyGraph { 48 data, err := zxcvbn_data.Asset("data/MacKeypad.json") 49 if err != nil { 50 panic("Can't find asset") 51 } 52 return GetAdjancencyGraphFromFile(data, "mac_keypad") 53 } 54 func BuildLeet() AdjacencyGraph { 55 data, err := zxcvbn_data.Asset("data/L33t.json") 56 if err != nil { 57 panic("Can't find asset") 58 } 59 return GetAdjancencyGraphFromFile(data, "keypad") 60 } 61 62 func GetAdjancencyGraphFromFile(data []byte, name string) AdjacencyGraph { 63 64 var graph AdjacencyGraph 65 err := json.Unmarshal(data, &graph) 66 if err != nil { 67 log.Fatal(err) 68 } 69 graph.Name = name 70 return graph 71 } 72 73 //on qwerty, 'g' has degree 6, being adjacent to 'ftyhbv'. '\' has degree 1. 74 //this calculates the average over all keys. 75 //TODO double check that i ported this correctly scoring.coffee ln 5 76 func (adjGrp AdjacencyGraph) CalculateAvgDegree() float64 { 77 if adjGrp.averageDegree != float64(0) { 78 return adjGrp.averageDegree 79 } 80 var avg float64 81 var count float64 82 for _, value := range adjGrp.Graph { 83 84 for _, char := range value { 85 if char != "" || char != " " { 86 avg += float64(len(char)) 87 count++ 88 } 89 } 90 91 } 92 93 adjGrp.averageDegree = avg / count 94 95 return adjGrp.averageDegree 96 }