package generators import ( "encoding/json" "math/rand" "os" ) type HarengonArrays 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 LoadHarengonArrays(path string) (HarengonArrays, error) { var arrays HarengonArrays file, err := os.Open(path) if err != nil { return arrays, err } defer file.Close() decoder := json.NewDecoder(file) err = decoder.Decode(&arrays) return arrays, err } func HarengonNameFemT(arr *HarengonArrays, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.Nm3)) rnd2 := rand.Intn(len(arr.Nm4)) nMs := arr.Nm3[rnd] + arr.Nm4[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" } func HarengonNameMasT(arr *HarengonArrays, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.Nm1)) rnd2 := rand.Intn(len(arr.Nm2)) nMs := arr.Nm1[rnd] + arr.Nm2[rnd2] if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" } func GenerateHarengonNames(arr *HarengonArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var nMs string if gender == "female" { if i < 6 { nMs = HarengonNameFem(arr, swearFilter) for nMs == "" { nMs = HarengonNameFem(arr, swearFilter) } } else { nMs = HarengonNameFemT(arr, swearFilter) for nMs == "" { nMs = HarengonNameFemT(arr, swearFilter) } } } else { if i < 6 { nMs = HarengonNameFem(arr, swearFilter) for nMs == "" { nMs = HarengonNameFem(arr, swearFilter) } } else { nMs = HarengonNameMasT(arr, swearFilter) for nMs == "" { nMs = HarengonNameMasT(arr, swearFilter) } } } names = append(names, nMs) } return names } func HarengonNameFem(arr *HarengonArrays, swearFilter func(string) bool) string { nTp := rand.Intn(3) rnd := rand.Intn(len(arr.Nm5)) rnd2 := rand.Intn(len(arr.Nm6)) rnd3 := rand.Intn(len(arr.Nm7)) rnd4 := rand.Intn(len(arr.Nm8)) rnd5 := rand.Intn(len(arr.Nm10)) for arr.Nm7[rnd3] == arr.Nm5[rnd] && arr.Nm10[rnd5] != "" { rnd3 = rand.Intn(len(arr.Nm7)) } var nMs string if nTp < 2 { nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm10[rnd5] } else { nTp = rand.Intn(2) rnd6 := rand.Intn(len(arr.Nm8)) rnd7 := rand.Intn(len(arr.Nm9)) if nTp == 0 { nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm9[rnd7] + arr.Nm8[rnd6] + arr.Nm10[rnd5] } else { nMs = arr.Nm5[rnd] + arr.Nm6[rnd2] + arr.Nm9[rnd7] + arr.Nm8[rnd6] + arr.Nm7[rnd3] + arr.Nm8[rnd4] + arr.Nm10[rnd5] } } if swearFilter == nil || !swearFilter(nMs) { return nMs } return "" }