| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package adjacency
- import (
- "encoding/json"
- "log"
- // "fmt"
- "github.com/nbutton23/zxcvbn-go/data"
- )
- type AdjacencyGraph struct {
- Graph map[string][]string
- averageDegree float64
- Name string
- }
- var AdjacencyGph = make(map[string]AdjacencyGraph)
- func init() {
- AdjacencyGph["qwerty"] = BuildQwerty()
- AdjacencyGph["dvorak"] = BuildDvorak()
- AdjacencyGph["keypad"] = BuildKeypad()
- AdjacencyGph["macKeypad"] = BuildMacKeypad()
- AdjacencyGph["l33t"] = BuildLeet()
- }
- func BuildQwerty() AdjacencyGraph {
- data, err := zxcvbn_data.Asset("data/Qwerty.json")
- if err != nil {
- panic("Can't find asset")
- }
- return GetAdjancencyGraphFromFile(data, "qwerty")
- }
- func BuildDvorak() AdjacencyGraph {
- data, err := zxcvbn_data.Asset("data/Dvorak.json")
- if err != nil {
- panic("Can't find asset")
- }
- return GetAdjancencyGraphFromFile(data, "dvorak")
- }
- func BuildKeypad() AdjacencyGraph {
- data, err := zxcvbn_data.Asset("data/Keypad.json")
- if err != nil {
- panic("Can't find asset")
- }
- return GetAdjancencyGraphFromFile(data, "keypad")
- }
- func BuildMacKeypad() AdjacencyGraph {
- data, err := zxcvbn_data.Asset("data/MacKeypad.json")
- if err != nil {
- panic("Can't find asset")
- }
- return GetAdjancencyGraphFromFile(data, "mac_keypad")
- }
- func BuildLeet() AdjacencyGraph {
- data, err := zxcvbn_data.Asset("data/L33t.json")
- if err != nil {
- panic("Can't find asset")
- }
- return GetAdjancencyGraphFromFile(data, "keypad")
- }
- func GetAdjancencyGraphFromFile(data []byte, name string) AdjacencyGraph {
- var graph AdjacencyGraph
- err := json.Unmarshal(data, &graph)
- if err != nil {
- log.Fatal(err)
- }
- graph.Name = name
- return graph
- }
- //on qwerty, 'g' has degree 6, being adjacent to 'ftyhbv'. '\' has degree 1.
- //this calculates the average over all keys.
- //TODO double check that i ported this correctly scoring.coffee ln 5
- func (adjGrp AdjacencyGraph) CalculateAvgDegree() float64 {
- if adjGrp.averageDegree != float64(0) {
- return adjGrp.averageDegree
- }
- var avg float64
- var count float64
- for _, value := range adjGrp.Graph {
- for _, char := range value {
- if char != "" || char != " " {
- avg += float64(len(char))
- count++
- }
- }
- }
- adjGrp.averageDegree = avg / count
- return adjGrp.averageDegree
- }
|