package generators import ( "encoding/json" "math/rand" "os" ) type GoliathArrays struct { NmFF []string `json:"nmFF"` NmFL []string `json:"nmFL"` NmMF []string `json:"nmMF"` NmML []string `json:"nmML"` NmMdF []string `json:"nmMdF"` NmMdL []string `json:"nmMdL"` NmSF []string `json:"nmSF"` NmSL []string `json:"nmSL"` } func LoadGoliathArrays(path string) (GoliathArrays, error) { var arrays GoliathArrays file, err := os.Open(path) if err != nil { return arrays, err } defer file.Close() decoder := json.NewDecoder(file) err = decoder.Decode(&arrays) return arrays, err } func GoliathNameFem(arr *GoliathArrays, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.NmFF)) rnd2 := rand.Intn(len(arr.NmFL)) nMs := arr.NmFF[rnd] + arr.NmFL[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" } func GoliathNameMas(arr *GoliathArrays, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.NmMF)) rnd2 := rand.Intn(len(arr.NmML)) nMs := arr.NmMF[rnd] + arr.NmML[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" } func GoliathNameSur(arr *GoliathArrays) string { rnd := rand.Intn(len(arr.NmMdF)) rnd2 := rand.Intn(len(arr.NmMdL)) rnd3 := rand.Intn(len(arr.NmSF)) rnd4 := rand.Intn(len(arr.NmSL)) return arr.NmMdF[rnd] + arr.NmMdL[rnd2] + " " + arr.NmSF[rnd3] + arr.NmSL[rnd4] } func GenerateGoliathNames(arr *GoliathArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { nSr := GoliathNameSur(arr) var nMs string if gender == "female" { nMs = GoliathNameFem(arr, swearFilter) for nMs == "" { nMs = GoliathNameFem(arr, swearFilter) } } else { nMs = GoliathNameMas(arr, swearFilter) for nMs == "" { nMs = GoliathNameMas(arr, swearFilter) } } names = append(names, nMs+" "+nSr) } return names }