package generators import ( "encoding/json" "math/rand" "os" "time" ) type CentaurData struct { Male 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"` } `json:"male"` Female struct { Nm8 []string `json:"nm8"` Nm9 []string `json:"nm9"` Nm10 []string `json:"nm10"` Nm11 []string `json:"nm11"` Nm12 []string `json:"nm12"` Nm13 []string `json:"nm13"` Nm14 []string `json:"nm14"` } `json:"female"` Surname1 []string `json:"surname1"` Surname2 []string `json:"surname2"` } var centaurData CentaurData func LoadCentaurData(path string) error { file, err := os.Open(path) if err != nil { return err } defer file.Close() return json.NewDecoder(file).Decode(¢aurData) } func GenerateCentaurName(gender string) string { rand.Seed(time.Now().UnixNano()) var nMs string if gender == "female" { nMs = generateCentaurFemaleName() } else { nMs = generateCentaurMaleName() } sur1 := centaurData.Surname1[rand.Intn(len(centaurData.Surname1))] sur2 := centaurData.Surname2[rand.Intn(len(centaurData.Surname2))] return nMs + " " + sur1 + sur2 } func generateCentaurMaleName() string { m := centaurData.Male nTp := rand.Intn(5) rnd := rand.Intn(len(m.Nm1)) rnd2 := rand.Intn(len(m.Nm2)) rnd5 := rand.Intn(len(m.Nm7)) if nTp == 0 { for m.Nm1[rnd] == "" { rnd = rand.Intn(len(m.Nm1)) } for m.Nm7[rnd5] == "" { rnd5 = rand.Intn(len(m.Nm7)) } return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm7[rnd5] } else { rnd3 := rand.Intn(len(m.Nm3)) rnd4 := rand.Intn(len(m.Nm4)) for m.Nm3[rnd3] == m.Nm1[rnd] || m.Nm3[rnd3] == m.Nm7[rnd5] { rnd3 = rand.Intn(len(m.Nm3)) } if rnd2 == 0 { for rnd4 == 0 { rnd4 = rand.Intn(len(m.Nm4)) } } if nTp < 4 { return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm7[rnd5] } else { rnd6 := rand.Intn(len(m.Nm5)) rnd7 := rand.Intn(len(m.Nm6)) for m.Nm3[rnd3] == m.Nm5[rnd6] || m.Nm5[rnd6] == m.Nm7[rnd5] { rnd6 = rand.Intn(len(m.Nm5)) } return m.Nm1[rnd] + m.Nm2[rnd2] + m.Nm3[rnd3] + m.Nm4[rnd4] + m.Nm5[rnd6] + m.Nm6[rnd7] + m.Nm7[rnd5] } } } func generateCentaurFemaleName() string { f := centaurData.Female nTp := rand.Intn(3) rnd := rand.Intn(len(f.Nm8)) rnd2 := rand.Intn(len(f.Nm9)) rnd3 := rand.Intn(len(f.Nm10)) rnd4 := rand.Intn(len(f.Nm13)) rnd5 := rand.Intn(len(f.Nm14)) if nTp < 2 { for f.Nm8[rnd] == f.Nm10[rnd3] || f.Nm10[rnd3] == f.Nm14[rnd5] { rnd3 = rand.Intn(len(f.Nm10)) } return f.Nm8[rnd] + f.Nm9[rnd2] + f.Nm10[rnd3] + f.Nm13[rnd4] + f.Nm14[rnd5] } else { rnd6 := rand.Intn(len(f.Nm11)) rnd7 := rand.Intn(len(f.Nm12)) for f.Nm12[rnd7] == f.Nm10[rnd3] || f.Nm12[rnd7] == f.Nm14[rnd5] { rnd7 = rand.Intn(len(f.Nm12)) } return f.Nm8[rnd] + f.Nm9[rnd2] + f.Nm10[rnd3] + f.Nm11[rnd6] + f.Nm12[rnd7] + f.Nm13[rnd4] + f.Nm14[rnd5] } }