package generators import ( "encoding/json" "math/rand" "os" "time" ) type SimicHybridArrays 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"` } func LoadSimicHybridArrays(path string) (SimicHybridArrays, error) { var arr SimicHybridArrays 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 simicHybridNameMas(a SimicHybridArrays) (string, int) { rand.Seed(time.Now().UnixNano()) nTp := rand.Intn(4) rnd := rand.Intn(len(a.Nm1)) rnd2 := rand.Intn(len(a.Nm2)) if nTp < 2 { if nTp == 0 { return a.Nm1[rnd], nTp } else { return a.Nm1[rnd] + a.Nm2[rnd2], nTp } } else { rnd3 := rand.Intn(len(a.Nm3)) rnd4 := rand.Intn(len(a.Nm4)) if nTp == 2 { return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3], nTp } else { return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm4[rnd4], nTp } } } func simicHybridNameFir(a SimicHybridArrays) string { rand.Seed(time.Now().UnixNano()) rnd := rand.Intn(len(a.Nm7)) rnd2 := rand.Intn(len(a.Nm8)) return a.Nm7[rnd] + a.Nm8[rnd2] } func simicHybridNameSec(a SimicHybridArrays) string { rand.Seed(time.Now().UnixNano()) rnd := rand.Intn(len(a.Nm9)) rnd2 := rand.Intn(len(a.Nm10)) return a.Nm9[rnd] + a.Nm10[rnd2] } func GenerateSimicHybridNames(arr *SimicHybridArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var nMs string if i < 5 { var nTp int nMs, nTp = simicHybridNameMas(*arr) if gender == "female" { rnd := rand.Intn(3) if nTp == 0 || nTp == 3 { nMs = nMs + arr.Nm6[rnd] } else { rnd += 3 nMs = nMs + arr.Nm6[rnd] } } else { if nTp == 0 || nTp == 3 { nMs = nMs + arr.Nm5[0] } else { rnd := rand.Intn(5) nMs = nMs + arr.Nm5[rnd+1] } } } else { if gender == "female" { nMs = simicHybridNameSec(*arr) } else { nMs = simicHybridNameFir(*arr) } } for nMs == "" || swearFilter(nMs) { if i < 5 { var nTp int nMs, nTp = simicHybridNameMas(*arr) if gender == "female" { rnd := rand.Intn(3) if nTp == 0 || nTp == 3 { nMs = nMs + arr.Nm6[rnd] } else { rnd += 3 nMs = nMs + arr.Nm6[rnd] } } else { if nTp == 0 || nTp == 3 { nMs = nMs + arr.Nm5[0] } else { rnd := rand.Intn(5) nMs = nMs + arr.Nm5[rnd+1] } } } else { if gender == "female" { nMs = simicHybridNameSec(*arr) } else { nMs = simicHybridNameFir(*arr) } } } names = append(names, nMs) } return names }