package generators import ( "encoding/json" "math/rand" "os" "time" ) type TritonArrays 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 LoadTritonArrays(path string) (TritonArrays, error) { var arr TritonArrays 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 tritonSurname(a TritonArrays, r *rand.Rand) string { for { rnd := r.Intn(len(a.Nm9)) rnd2 := r.Intn(len(a.Nm10)) rnd3 := r.Intn(len(a.Nm11)) rnd4 := r.Intn(len(a.Nm12)) rnd5 := r.Intn(len(a.Nm13)) if a.Nm11[rnd3] != a.Nm9[rnd] && a.Nm11[rnd3] != a.Nm13[rnd5] { return a.Nm9[rnd] + a.Nm10[rnd2] + a.Nm11[rnd3] + a.Nm12[rnd4] + a.Nm13[rnd5] + "ath" } } } func tritonNameFem(a TritonArrays, r *rand.Rand, i int) string { for { rnd := r.Intn(len(a.Nm4)) rnd2 := r.Intn(len(a.Nm5)) rnd3 := r.Intn(len(a.Nm6)) rnd4 := r.Intn(len(a.Nm8)) if a.Nm6[rnd3] != a.Nm4[rnd] { if i < 5 { return a.Nm4[rnd] + a.Nm5[rnd2] + a.Nm6[rnd3] + a.Nm8[rnd4] + "n" } else { rnd5 := r.Intn(len(a.Nm5)) rnd6 := r.Intn(len(a.Nm7)) if a.Nm7[rnd6] != a.Nm6[rnd3] { return a.Nm4[rnd] + a.Nm5[rnd2] + a.Nm6[rnd3] + a.Nm5[rnd5] + a.Nm7[rnd6] + a.Nm8[rnd4] + "n" } } } } } func tritonNameMas(a TritonArrays, r *rand.Rand) string { for { rnd := r.Intn(len(a.Nm1)) rnd2 := r.Intn(len(a.Nm2)) rnd3 := r.Intn(len(a.Nm3)) if a.Nm1[rnd] != a.Nm3[rnd3] { return a.Nm1[rnd] + a.Nm2[rnd2] + a.Nm3[rnd3] + a.Nm2[rnd2] + "s" } } } func GenerateTritonNames(arr *TritonArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < 10; i++ { surname := tritonSurname(*arr, r) var name string if gender == "female" { name = tritonNameFem(*arr, r, i) + " " + surname } else { name = tritonNameMas(*arr, r) + " " + surname } for name == "" || swearFilter(name) { surname = tritonSurname(*arr, r) if gender == "female" { name = tritonNameFem(*arr, r, i) + " " + surname } else { name = tritonNameMas(*arr, r) + " " + surname } } names = append(names, name) } return names }