75 lines
3.2 KiB
Go
75 lines
3.2 KiB
Go
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 {
|
||
if strings.HasSuffix(surname, "ий") || strings.HasSuffix(surname, "ый") || strings.HasSuffix(surname, "ой") {
|
||
return surname[:len(surname)-4] + "ая"
|
||
}
|
||
if strings.HasSuffix(surname, "ов") || strings.HasSuffix(surname, "ев") ||
|
||
strings.HasSuffix(surname, "ин") || strings.HasSuffix(surname, "ын") ||
|
||
strings.HasSuffix(surname, "ёв") {
|
||
return surname + "а"
|
||
}
|
||
return surname
|
||
}
|
||
|
||
func generateName() string {
|
||
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)
|
||
}
|