package generators import ( "encoding/json" "math/rand" "os" "strings" ) type GrungArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` Nm5 []string `json:"nm5"` Nm6 []string `json:"nm6"` Nm7 []string `json:"nm7"` Nm8 []string `json:"nm8"` } func LoadGrungArrays(path string) (GrungArrays, error) { var arrays GrungArrays 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 GrungName(arr *GrungArrays, swearFilter func(string) bool) string { for { nTp := rand.Intn(8) rnd := rand.Intn(len(arr.Nm1)) rnd3 := rand.Intn(len(arr.Nm3)) rnd4 := rand.Intn(len(arr.Nm4)) var nMs string if nTp < 4 { rnd2 := rand.Intn(len(arr.Nm2)) for arr.Nm1[rnd] == arr.Nm2[rnd2] { rnd2 = rand.Intn(len(arr.Nm2)) } nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] nTmp = strings.Title(nTmp) nMs = arr.Nm1[rnd] + "'" + nTmp } else if nTp < 6 { rnd2 := rand.Intn(len(arr.Nm1)) nTmp := arr.Nm3[rnd3] nTmp = strings.Title(nTmp) nMs = arr.Nm1[rnd] + "'" + nTmp + arr.Nm4[rnd4] + "'" + arr.Nm1[rnd2] + "'" + nTmp + arr.Nm4[rnd4] } else { rnd2 := rand.Intn(len(arr.Nm2)) rnd5 := rand.Intn(len(arr.Nm5)) rnd6 := rand.Intn(len(arr.Nm6)) rnd7 := rand.Intn(len(arr.Nm7)) rnd8 := rand.Intn(len(arr.Nm8)) rnd9 := rand.Intn(len(arr.Nm4)) if nTp == 6 { for rnd7 < 3 && rnd9 < 3 { rnd9 = rand.Intn(len(arr.Nm4)) } nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + "-" + arr.Nm5[rnd5] + arr.Nm6[rnd6] + arr.Nm7[rnd7] + arr.Nm8[rnd8] + arr.Nm4[rnd9] nTmp = strings.Title(nTmp) nMs = arr.Nm1[rnd] + "'" + nTmp } else { for rnd5 < 3 && rnd9 < 3 { rnd9 = rand.Intn(len(arr.Nm4)) } for rnd5 < 3 && rnd4 < 3 { rnd4 = rand.Intn(len(arr.Nm4)) } nTmp := arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm7[rnd7] + arr.Nm8[rnd8] + arr.Nm4[rnd9] + "'" + arr.Nm5[rnd5] + arr.Nm6[rnd6] + arr.Nm4[rnd4] nTmp = strings.Title(nTmp) nMs = arr.Nm1[rnd] + "'" + nTmp } } if swearFilter == nil || !swearFilter(nMs) { return nMs } } } func GenerateGrungNames(arr *GrungArrays, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for range 10 { n := GrungName(arr, swearFilter) names = append(names, n) } return names }