package generators import ( "encoding/json" "math/rand" "os" ) type MinotaurArrays struct { NmFF []string `json:"nmFF"` NmFL []string `json:"nmFL"` NmMF []string `json:"nmMF"` NmML []string `json:"nmML"` NmSF []string `json:"nmSF"` NmSL []string `json:"nmSL"` } func LoadMinotaurArrays(path string) (MinotaurArrays, error) { var arrays MinotaurArrays 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 MinotaurNameFem(arr *MinotaurArrays, swearFilter func(string) bool) string { rnd := rand.Intn(len(arr.NmFF)) rnd2 := rand.Intn(len(arr.NmFL)) nMs := arr.NmFF[rnd] + arr.NmFL[rnd2] if swearFilter != nil && swearFilter(nMs) { return "" } return nMs } func MinotaurNameMas(arr *MinotaurArrays, i int, swearFilter func(string) bool) string { var nMs string if i < 5 { rnd := rand.Intn(len(arr.NmFF)) rnd2 := rand.Intn(len(arr.NmFL)) nMs = arr.NmFF[rnd] + arr.NmFL[rnd2] } else { rnd := rand.Intn(len(arr.NmMF)) rnd2 := rand.Intn(len(arr.NmML)) nMs = arr.NmMF[rnd] + arr.NmML[rnd2] } if swearFilter != nil && swearFilter(nMs) { return "" } return nMs } func MinotaurSurname(arr *MinotaurArrays) string { rnd := rand.Intn(len(arr.NmSF)) rnd2 := rand.Intn(len(arr.NmSL)) return arr.NmSF[rnd] + arr.NmSL[rnd2] } func GenerateMinotaurNames(arr *MinotaurArrays, gender string, swearFilter func(string) bool) []string { names := make([]string, 0, 10) for i := 0; i < 10; i++ { var nMs string if gender == "female" { nMs = MinotaurNameFem(arr, swearFilter) for nMs == "" { nMs = MinotaurNameFem(arr, swearFilter) } } else { nMs = MinotaurNameMas(arr, i, swearFilter) for nMs == "" { nMs = MinotaurNameMas(arr, i, swearFilter) } } nMs = nMs + " " + MinotaurSurname(arr) names = append(names, nMs) } return names }