package generators import ( "encoding/json" "math/rand" "os" ) type GithzeraiArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` } func LoadGithzeraiArrays(path string) (GithzeraiArrays, error) { var arrays GithzeraiArrays 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 GithzeraiNameFem(arr *GithzeraiArrays, swearFilter func(string) bool) string { for { rnd := rand.Intn(len(arr.Nm3)) rnd2 := rand.Intn(len(arr.Nm4)) charL := arr.Nm3[rnd][len(arr.Nm3[rnd])-1] charF := arr.Nm4[rnd2][0] for charL == charF { rnd2 = rand.Intn(len(arr.Nm4)) charF = arr.Nm4[rnd2][0] } nMs := arr.Nm3[rnd] + arr.Nm4[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } } } func GithzeraiNameMas(arr *GithzeraiArrays, swearFilter func(string) bool) string { for { rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) charL := arr.Nm1[rnd][len(arr.Nm1[rnd])-1] charF := arr.Nm2[rnd2][0] for charL == charF { rnd2 = rand.Intn(len(arr.Nm2)) charF = arr.Nm2[rnd2][0] } nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } } } func GenerateGithzeraiNames(arr *GithzeraiArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var n string if gender == "female" { n = GithzeraiNameFem(arr, swearFilter) } else { n = GithzeraiNameMas(arr, swearFilter) } names = append(names, n) } return names }