package generators import ( "encoding/json" "math/rand" "os" ) type LoxodonArrays 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"` Nm9 []string `json:"nm9"` Nm10 []string `json:"nm10"` Nm11 []string `json:"nm11"` Nm12 []string `json:"nm12"` Nm13 []string `json:"nm13"` } func LoadLoxodonArrays(path string) (LoxodonArrays, error) { var arrays LoxodonArrays 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 LoxodonNameMas(arr *LoxodonArrays, swearFilter func(string) bool) string { nTp := rand.Intn(5) rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) rnd5 := rand.Intn(len(arr.Nm6)) var nMs string if nTp == 0 { for arr.Nm1[rnd] == "" { rnd = rand.Intn(len(arr.Nm1)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm6[rnd5] } else { rnd3 := rand.Intn(len(arr.Nm3)) rnd4 := rand.Intn(len(arr.Nm4)) for arr.Nm3[rnd3] == arr.Nm1[rnd] || arr.Nm3[rnd3] == arr.Nm6[rnd5] { rnd3 = rand.Intn(len(arr.Nm3)) } if rnd2 == 0 { for rnd4 == 0 { rnd4 = rand.Intn(len(arr.Nm4)) } } if nTp < 4 { nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm6[rnd5] } else { rnd6 := rand.Intn(len(arr.Nm5)) for arr.Nm3[rnd3] == arr.Nm5[rnd6] || arr.Nm5[rnd6] == arr.Nm6[rnd5] { rnd6 = rand.Intn(len(arr.Nm5)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd6] + "o" + arr.Nm6[rnd5] } } if swearFilter != nil && swearFilter(nMs) { return "" } return nMs } func LoxodonNameFem(arr *LoxodonArrays, swearFilter func(string) bool) string { nTp := rand.Intn(3) rnd := rand.Intn(len(arr.Nm7)) rnd2 := rand.Intn(len(arr.Nm8)) rnd3 := rand.Intn(len(arr.Nm9)) rnd4 := rand.Intn(len(arr.Nm12)) rnd5 := rand.Intn(len(arr.Nm13)) var nMs string if nTp < 2 { for arr.Nm7[rnd] == arr.Nm9[rnd3] || arr.Nm9[rnd3] == arr.Nm13[rnd5] { rnd3 = rand.Intn(len(arr.Nm9)) } nMs = arr.Nm7[rnd] + arr.Nm8[rnd2] + arr.Nm9[rnd3] + arr.Nm12[rnd4] + arr.Nm13[rnd5] } else { rnd7 := rand.Intn(len(arr.Nm11)) for arr.Nm11[rnd7] == arr.Nm9[rnd3] || arr.Nm11[rnd7] == arr.Nm13[rnd5] { rnd7 = rand.Intn(len(arr.Nm11)) } nMs = arr.Nm7[rnd] + arr.Nm8[rnd2] + arr.Nm9[rnd3] + arr.Nm12[rnd4] + arr.Nm13[rnd5] } if swearFilter != nil && swearFilter(nMs) { return "" } return nMs } func GenerateLoxodonNames(arr *LoxodonArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) if gender == "female" { for i := 0; i < 10; i++ { n := LoxodonNameFem(arr, swearFilter) for n == "" { n = LoxodonNameFem(arr, swearFilter) } names = append(names, n) } } else { for i := 0; i < 10; i++ { n := LoxodonNameMas(arr, swearFilter) for n == "" { n = LoxodonNameMas(arr, swearFilter) } names = append(names, n) } } return names }