package generators import ( "encoding/json" "math/rand" "os" ) type DeepGnomeData struct { Male struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` Nm5 []string `json:"nm5"` } `json:"male"` Female struct { 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"` } `json:"female"` Surname1 []string `json:"surname1"` Surname2 []string `json:"surname2"` } var deepGnomeData DeepGnomeData func LoadDeepGnomeData(path string) error { file, err := os.Open(path) if err != nil { return err } defer file.Close() return json.NewDecoder(file).Decode(&deepGnomeData) } func GenerateDeepGnomeName(gender string) string { var nMs string if gender == "female" { nMs = generateDeepGnomeFemaleName() } else { nMs = generateDeepGnomeMaleName() } sur1 := deepGnomeData.Surname1[rand.Intn(len(deepGnomeData.Surname1))] sur2 := deepGnomeData.Surname2[rand.Intn(len(deepGnomeData.Surname2))] return nMs + " " + sur1 + sur2 } func generateDeepGnomeMaleName() string { m := deepGnomeData.Male rnd := rand.Intn(len(m.Nm1)) rnd2 := rand.Intn(len(m.Nm2)) rnd3 := rand.Intn(len(m.Nm3)) rnd4 := rand.Intn(len(m.Nm4)) rnd5 := rand.Intn(len(m.Nm5)) for m.Nm3[rnd3] == m.Nm1[rnd] || m.Nm3[rnd3] == m.Nm5[rnd5] { rnd3 = rand.Intn(len(m.Nm3)) } return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm5[rnd5] } func generateDeepGnomeFemaleName() string { f := deepGnomeData.Female i := rand.Intn(10) if i < 5 { rnd := rand.Intn(len(f.Nm6)) rnd2 := rand.Intn(len(f.Nm7)) rnd3 := rand.Intn(len(f.Nm8)) rnd4 := rand.Intn(len(f.Nm9)) rnd5 := rand.Intn(len(f.Nm12)) if rnd < 5 && rnd5 < 7 { for rnd5 < 7 { rnd5 = rand.Intn(len(f.Nm12)) } } for f.Nm8[rnd3] == f.Nm6[rnd] || f.Nm8[rnd3] == f.Nm12[rnd5] { rnd3 = rand.Intn(len(f.Nm8)) } return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm12[rnd5] } else { rnd := rand.Intn(len(f.Nm6)) rnd2 := rand.Intn(len(f.Nm7)) rnd3 := rand.Intn(len(f.Nm8)) rnd4 := rand.Intn(len(f.Nm9)) rnd5 := rand.Intn(len(f.Nm10)) rnd6 := rand.Intn(len(f.Nm11)) for f.Nm10[rnd5] == f.Nm8[rnd3] || f.Nm8[rnd3] == f.Nm6[rnd] { rnd3 = rand.Intn(len(f.Nm8)) } return f.Nm6[rnd] + f.Nm7[rnd2] + f.Nm8[rnd3] + f.Nm9[rnd4] + f.Nm10[rnd5] + f.Nm11[rnd6] } }