Skip to content

Instantly share code, notes, and snippets.

@ramonsmits
Last active September 23, 2025 16:08
Show Gist options
  • Save ramonsmits/3f39680741cabb0546781f68d6a2e8e5 to your computer and use it in GitHub Desktop.
Save ramonsmits/3f39680741cabb0546781f68d6a2e8e5 to your computer and use it in GitHub Desktop.
Generate readable/memorable random names
using System;
using System.Numerics;
class FriendlyNames
{
static readonly string[] Adj =
[
"brave","silent","curious","mighty","witty","gloomy","rapid","fuzzy",
"gentle","arcane","rusty","lunar","zen","feral","candid","sleek",
"fiery","icy","stormy","cosmic","sinister","savage","naughty","vicious",
"grim","cheeky","reckless","dirty","twisted","bloody","shadowy","morbid",
"chaotic","lusty","toxic","doomed","iron","obsidian","thorny","volatile",
"gritty","haunted","mad","drunken","demonic","warped","sinful","cruel",
"pervy","smug","angry","wicked","warlike","cursed","nuclear","suave",
"hungry", "thirsty", "loving", "stingy", "mad", "evil",
"crimson","scarlet","violet","emerald","azure","golden","silver","copper",
"black","white","gray","amber","jade","ruby","sapphire","onyx",
"burgundy","coral","indigo","magenta","cyan","lime","orange","pink",
"bronze","steel","titanium","platinum","diamond","crystal","marble","granite",
"electric","neon","plasma","laser","quantum","atomic","digital","cyber",
"frozen","molten","blazing","smoking","glowing","burning","flaming","scorching",
"ancient","primal","eternal","infinite","ultimate","supreme","legendary","epic",
"broken","shattered","cracked","bent","twisted","ruined","damaged","scarred",
"wild","untamed","savage","brutal","ruthless","merciless","relentless","vicious",
"secret","hidden","shadow","ghost","phantom","spectral","invisible","cloaked",
"thunder","lightning","storm","hurricane","tornado","blizzard","avalanche","earthquake"
];
static readonly string[] Noun =
[
"lion","otter","falcon","dragon","monkey","wolf","panda","tiger",
"phoenix","badger","eagle","yak","orca","mamba","serval","vulture",
"shark","rat","crow","hyena","boar","scorpion","spider","serpent",
"donkey", "whale","cobra","viper","panther","leopard","cheetah","jaguar",
"bear","rhino","hippo","gorilla","chimp","octopus","squid","mantis",
"demon","angel","warlock","witch","wizard","goblin","troll","orc",
"nymph","giant","djinn","sphinx","vampire","zombie","ghoul","lich",
"wraith","specter","banshee","necromancer","paladin","assassin","rogue","thief",
"tank","missile","grenade","bomb","rifle","dagger","blade","sword",
"mace","arrow","cannon","warrior","berserker","raider","sniper","pirate",
"axe","spear","katana","scythe","hammer","crossbow","pistol","shotgun",
"devil","temptress","minx","seducer","playboy","bastard","rogue","villain",
"joker","clown","drunkard","pervert","hustler","fiend","pimp","outlaw",
"daddy","kitten","bunny","stud","vixen","freak","beast","savage",
"knight","samurai","ninja","ronin","gladiator","champion","crusader","hunter",
"reaper","slayer","executioner","butcher","mercenary","bounty","assassin","killer",
"fortress","castle","tower","citadel","bastion","stronghold","keep","bunker",
"storm","thunder","lightning","blizzard","tornado","hurricane","avalanche","inferno",
"machine","engine","reactor","generator","turbine","motor","dynamo","forge"
];
readonly long _n;
readonly long _b;
readonly long _m;
long _index;
public FriendlyNames() : this(Random.Shared.Next()) { }
public FriendlyNames(int seed)
{
_n = (long)Adj.Length * Noun.Length;
if (_n == 0)
throw new InvalidOperationException("Empty word list.");
_b = seed % _n;
_m = MakeCoprimeMultiplier(seed, _n);
_index = 0;
}
public string Generate(char separator = '-')
{
var k = _index++;
var p = ((k * _m) + _b) % _n;
var a = (int)(p / Noun.Length);
var s = (int)(p % Noun.Length);
return $"{Adj[a]}{separator}{Noun[s]}";
}
static long MakeCoprimeMultiplier(int seed, long n)
{
var m = ((long)seed * 2 + 1) % n;
if (m == 0) m = 1;
while (BigInteger.GreatestCommonDivisor(m, n) != 1)
m = (m + 2) % n;
return m;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment