You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
3.5 KiB
187 lines
3.5 KiB
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strings"
|
|
)
|
|
|
|
var maleFirstNames = []string{
|
|
"Александр",
|
|
"Алексей",
|
|
"Андрей",
|
|
"Антон",
|
|
"Арсений",
|
|
"Артур",
|
|
"Артём",
|
|
"Богдан",
|
|
"Валерий",
|
|
"Василий",
|
|
"Виктор",
|
|
"Владислав",
|
|
"Глеб",
|
|
"Григорий",
|
|
"Даниил",
|
|
"Денис",
|
|
"Дмитрий",
|
|
"Евгений",
|
|
"Егор",
|
|
"Иван",
|
|
"Игорь",
|
|
"Илья",
|
|
"Кирилл",
|
|
"Леонид",
|
|
"Максим",
|
|
"Марк",
|
|
"Матвей",
|
|
"Михаил",
|
|
"Никита",
|
|
"Николай",
|
|
"Олег",
|
|
"Павел",
|
|
"Пётр",
|
|
"Роман",
|
|
"Руслан",
|
|
"Сергей",
|
|
"Станислав",
|
|
"Тимофей",
|
|
"Фёдор",
|
|
}
|
|
|
|
var femaleFirstNames = []string{
|
|
"Алина",
|
|
"Алёна",
|
|
"Анастасия",
|
|
"Ангелина",
|
|
"Анна",
|
|
"Вера",
|
|
"Вероника",
|
|
"Виктория",
|
|
"Дарья",
|
|
"Ева",
|
|
"Екатерина",
|
|
"Елена",
|
|
"Елизавета",
|
|
"Ирина",
|
|
"Кира",
|
|
"Кристина",
|
|
"Ксения",
|
|
"Любовь",
|
|
"Маргарита",
|
|
"Марина",
|
|
"Мария",
|
|
"Милана",
|
|
"Надежда",
|
|
"Наталья",
|
|
"Ольга",
|
|
"Полина",
|
|
"Светлана",
|
|
"София",
|
|
"Татьяна",
|
|
"Юлия",
|
|
"Яна",
|
|
}
|
|
|
|
var lastNames = []string{
|
|
"Алексеев",
|
|
"Андреев",
|
|
"Антонов",
|
|
"Баранов",
|
|
"Белов",
|
|
"Белый",
|
|
"Бельский",
|
|
"Беляев",
|
|
"Борисов",
|
|
"Васильев",
|
|
"Великий",
|
|
"Волков",
|
|
"Воробьёв",
|
|
"Григорьев",
|
|
"Давыдов",
|
|
"Егоров",
|
|
"Жуков",
|
|
"Зайцев",
|
|
"Захаров",
|
|
"Иванов",
|
|
"Калинин",
|
|
"Ковалёв",
|
|
"Козлов",
|
|
"Комаров",
|
|
"Крамской",
|
|
"Кузнецов",
|
|
"Кузьмин",
|
|
"Лебедев",
|
|
"Макаров",
|
|
"Медведев",
|
|
"Михайлов",
|
|
"Морозов",
|
|
"Никитин",
|
|
"Николаев",
|
|
"Новиков",
|
|
"Орлов",
|
|
"Островский",
|
|
"Павлов",
|
|
"Петров",
|
|
"Покровский",
|
|
"Попов",
|
|
"Раевский",
|
|
"Романов",
|
|
"Семёнов",
|
|
"Сергеев",
|
|
"Смирнов",
|
|
"Соколов",
|
|
"Соловьёв",
|
|
"Степанов",
|
|
"Тарасов",
|
|
"Титов",
|
|
"Толстой",
|
|
"Трубецкой",
|
|
"Филиппов",
|
|
"Фролов",
|
|
"Фёдоров",
|
|
"Чайковский",
|
|
"Черный",
|
|
"Яковлев",
|
|
}
|
|
|
|
// convertToFemaleSurname handles Russian suffix rules
|
|
func convertToFemaleSurname(surname string) string {
|
|
// Handle adjective-style surnames:
|
|
if strings.HasSuffix(surname, "ий") || strings.HasSuffix(surname, "ый") || strings.HasSuffix(surname, "ой") {
|
|
return surname[:len(surname)-4] + "ая"
|
|
}
|
|
|
|
// Handle standard possessive surnames:
|
|
if strings.HasSuffix(surname, "ов") || strings.HasSuffix(surname, "ев") ||
|
|
strings.HasSuffix(surname, "ин") || strings.HasSuffix(surname, "ын") ||
|
|
strings.HasSuffix(surname, "ёв") {
|
|
return surname + "а"
|
|
}
|
|
|
|
// Foreign or unchangeable
|
|
return surname
|
|
}
|
|
|
|
func generateName() string {
|
|
// Decide gender first
|
|
isFemale := rand.Intn(2) == 0
|
|
|
|
var fn string
|
|
if isFemale {
|
|
fn = femaleFirstNames[rand.Intn(len(femaleFirstNames))]
|
|
} else {
|
|
fn = maleFirstNames[rand.Intn(len(maleFirstNames))]
|
|
}
|
|
|
|
// 70% chance to have a last name
|
|
if rand.Float32() < 0.3 {
|
|
return fn
|
|
}
|
|
|
|
ln := lastNames[rand.Intn(len(lastNames))]
|
|
if isFemale {
|
|
ln = convertToFemaleSurname(ln)
|
|
}
|
|
|
|
return fmt.Sprintf("%s %s", fn, ln)
|
|
}
|
|
|