package generators import ( "encoding/json" "math/rand" "os" "time" ) type VerdanArrays 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"` } func LoadVerdanArrays(path string) (VerdanArrays, error) { var arr VerdanArrays file, err := os.Open(path) if err != nil { return arr, err } defer file.Close() decoder := json.NewDecoder(file) if err := decoder.Decode(&arr); err != nil { return arr, err } return arr, nil } func GenerateVerdanNames(arr *VerdanArrays, swearFilter func(string) bool) []string { names := make([]string, 0, 10) r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < 10; i++ { var nMs string nTp := r.Intn(5) rnd := r.Intn(len(arr.Nm1)) rnd2 := r.Intn(len(arr.Nm2)) rnd5 := r.Intn(len(arr.Nm7)) if nTp < 2 { for arr.Nm7[rnd5] == "" { rnd5 = r.Intn(len(arr.Nm7)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd5] } else if nTp < 4 { rnd3 := r.Intn(len(arr.Nm3)) rnd4 := r.Intn(len(arr.Nm4)) for arr.Nm3[rnd3] == arr.Nm7[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] { rnd3 = r.Intn(len(arr.Nm3)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm7[rnd5] } else { rnd3 := r.Intn(len(arr.Nm3)) rnd4 := r.Intn(len(arr.Nm4)) rnd6 := r.Intn(len(arr.Nm6)) rnd7 := r.Intn(len(arr.Nm5)) for arr.Nm3[rnd5] == arr.Nm5[rnd7] || arr.Nm5[rnd7] == arr.Nm7[rnd5] { rnd7 = r.Intn(len(arr.Nm5)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd7] + arr.Nm6[rnd6] + arr.Nm7[rnd5] } for nMs == "" || swearFilter(nMs) { nTp = r.Intn(5) rnd = r.Intn(len(arr.Nm1)) rnd2 = r.Intn(len(arr.Nm2)) rnd5 = r.Intn(len(arr.Nm7)) if nTp < 2 { for arr.Nm7[rnd5] == "" { rnd5 = r.Intn(len(arr.Nm7)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm7[rnd5] } else if nTp < 4 { rnd3 := r.Intn(len(arr.Nm3)) rnd4 := r.Intn(len(arr.Nm4)) for arr.Nm3[rnd3] == arr.Nm7[rnd5] || arr.Nm3[rnd3] == arr.Nm1[rnd] { rnd3 = r.Intn(len(arr.Nm3)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm7[rnd5] } else { rnd3 := r.Intn(len(arr.Nm3)) rnd4 := r.Intn(len(arr.Nm4)) rnd6 := r.Intn(len(arr.Nm6)) rnd7 := r.Intn(len(arr.Nm5)) for arr.Nm3[rnd5] == arr.Nm5[rnd7] || arr.Nm5[rnd7] == arr.Nm7[rnd5] { rnd7 = r.Intn(len(arr.Nm5)) } nMs = arr.Nm1[rnd] + arr.Nm2[rnd2] + arr.Nm3[rnd3] + arr.Nm4[rnd4] + arr.Nm5[rnd7] + arr.Nm6[rnd6] + arr.Nm7[rnd5] } } names = append(names, nMs) } return names }