Skip to content

Instantly share code, notes, and snippets.

@EncodeTheCode
Last active February 13, 2026 06:48
Show Gist options
  • Select an option

  • Save EncodeTheCode/a92a6ff62d1eff0b26eb7a087e863d84 to your computer and use it in GitHub Desktop.

Select an option

Save EncodeTheCode/a92a6ff62d1eff0b26eb7a087e863d84 to your computer and use it in GitHub Desktop.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Deterministic Name Combiner — Real-name Pool</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
:root{--accent:#ff7a18;--bg:#0f1724;--muted:#9aa6b2;--glass:rgba(255,255,255,0.03);font-family:Inter, system-ui, -apple-system, "Segoe UI", Roboto, Arial}
*{box-sizing:border-box}
body{margin:0;background:linear-gradient(180deg,#071022 0%,#081327 60%);color:#e6eef6}
.wrap{max-width:980px;margin:36px auto;padding:28px;border-radius:16px;background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));box-shadow:0 8px 30px rgba(2,6,23,0.7)}
h1{margin:0 0 12px;font-size:20px}
.inputs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:12px}
input[type=text]{padding:12px;border-radius:10px;border:1px solid rgba(255,255,255,0.06);background:var(--glass);color:inherit}
.controls{display:flex;gap:10px}
button{padding:10px 14px;border-radius:10px;border:0;background:var(--accent);color:#fff;cursor:pointer}
button.secondary{background:transparent;border:1px solid rgba(255,255,255,0.06);color:var(--muted)}
.recent-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(56px,auto);gap:12px}
.slot{border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));padding:12px;display:flex;align-items:center;justify-content:center;transition:transform .35s,opacity .35s}
.txt{font-weight:700;color:var(--accent);text-shadow:0 3px 18px rgba(255,122,24,0.12)}
.note{color:var(--muted);font-size:13px}
@media (max-width:720px){.inputs{grid-template-columns:1fr}.recent-grid{grid-template-columns:1fr}}
</style>
</head>
<body>
<div class="wrap">
<h1>Deterministic Name Combiner — Real-name Pool</h1>
<p class="note">Uses curated lists of common modern male and female names. If either input is detected as female, the output will be a female name. Output is chosen deterministically from name pools and biased by the computed weights; results are normal, human names — not sci-fi gibberish.</p>
<div class="inputs">
<input id="name1" type="text" placeholder="Name 1" autocomplete="off">
<input id="name2" type="text" placeholder="Name 2" autocomplete="off">
<input id="name3" type="text" placeholder="Generated name" readonly>
</div>
<div style="display:flex;align-items:center;gap:12px;margin-bottom:12px;">
<div class="controls"><button id="generate">Generate</button><button id="clear" class="secondary">Clear</button><button id="copy" class="secondary">Copy</button></div>
<div style="flex:1"></div>
<div id="weights" class="note">Weights: —</div>
</div>
<div class="recent-grid" id="recentGrid"></div>
</div>
<script>
// Deterministic RNG helpers
function xmur3(str){ for(var i=0,h=1779033703^str.length;i<str.length;i++){h=Math.imul(h^str.charCodeAt(i),3432918353);h=(h<<13)|(h>>>19);} return function(){ h=Math.imul(h^(h>>>16),2246822507); h=Math.imul(h^(h>>>13),3266489909); return (h^=h>>>16)>>>0; }; }
function mulberry32(a){ return function(){ var t=a+=0x6D2B79F5; t=Math.imul(t^t>>>15,t|1); t^=t+Math.imul(t^t>>>7,t|61); return ((t^t>>>14)>>>0)/4294967296; }; }
function capitalize(s){ return s.length? s.charAt(0).toUpperCase()+s.slice(1):s; }
function stripNonLetters(s){ return (s||'').replace(/[^A-Za-zÀ-ɏ]/g,''); }
// ----------
// Common modern name pools (curated). These lists are intentionally representative, not exhaustive.
// Add or reduce names as you like. Names are lowercased for lookup.
// Female names
var FEMALE = [ 'emma','olivia','ava','isabella','sophia','mia','amelia','harper','evelyn','abigail','emily','ella','elizabeth','camila','luna','sofia','avery','mila','aria','scarlett','penelope','layla','chloe','victoria','madison','eleanor','grace','nora','riley','zoey','hannah','hazel','lily','ellie','violet','aurora','savannah','leah','stella','nataleigh','natalie','zoe','paisley','audrey','brooklyn','bella','claire','skylar','lucy','anna','samantha','caroline','kennedy','genesis','aaliyah','alice','sarah','allison','hailey','eva','adeline','gabriella','serenity','autumn','quinn','nevaeh','peyton','lydia','josephine','emery','julia','ruby','sophie','elena','isla','mary','margaret','madelyn','naomi','alina','katherine','morgan','valentina','michaela','sara','rebecca','maria','helena','laura','piper','marie','diana','angela','kelly','taylor','heidi','ashley','megan','jasmine','catherine','ivy','cora','annabelle','elise','roxanne','nina','brianna','kimberly','jerse','salma','ada','adelaide','adriana','adrienne','aisha','alanna','alaya','alba','aleah','alejandra','alessandra','alicia','alison','alyssa','amanda','amaya','amelie','amina','anabel','anastasia','andrea','angelina','ann','anne','annalise','annika','antonia','anya','april','arabella','ariana','ariel','arielle','astrid','athena','aubrey','audra','augustina','bailey','beatrice','beatrix','belinda','bianca','blair','blanca','bonnie','brielle','bridget','bridgette','britney','brittany','brooke','brynn','cambria','camille','camryn','cameron','candace','candice','cara','carina','carissa','carlotta','carolina','carolyn','casey','cassandra','cassie','catalina','celeste','celia','celina','chantal','chantelle','charlotte','charlene','charity','charmaine','chastity','chelsea','cherie','cheryl','chiara','christa','christiana','christine','christy','cindy','clarissa','clara','claudia','cleo','coco','colette','colleen','connie','constance','coral','coraline','corinne','cordelia','cornelia','courtney','crystal','cynthia','dahlia','daisy','dakota','dana','danica','daniela','danielle','daphne','daria','dawn','deana','deanna','deborah','delaney','delia','delilah','della','demi','denise','desiree','diane','dianne','dina','dionne','dominique','donna','dora','dorothy','dottie','drusilla','dulce','eden','edie','edith','edna','effie','emilia','emilie','emmaline','emmanuelle','emory','ena','enid','enya','esme','estelle','esther','eugenia','eunice','evangeline','eve','evie','evita','faith','fay','faye','felicia','felicity','fernanda','ferne','fiona','flora','florence','frances','francesca','freya','frida','gabriela','gabrielle','gail','gemma','genevieve','georgia','geraldine','gia','giana','gina','giovanna','giselle','gladys','gloria','greta','gretchen','guinevere','gwendolyn','hana','harley','harriet','hayley','heather','helga','hilda','hollie','holly','honor','hope','ida','ilaria','iliana','imelda','india','ines','ingrid','irene','iris','irma','isabel','isabela','isobel','izabela','izzy','jacinta','jacqueline','jade','jaden','jael','jaina','jane','janelle','janet','janice','janie','janine','janna','jasmin','jayda','jayde','jean','jeanette','jeanine','jeanne','jeannie','jena','jenna','jennifer','jenny','jerica','jess','jessica','jessa','jillian','jill','joan','joanna','joanne','jocelyn','jodie','jody','johanna','joleen','jolene','jolie','jordan','jorja','joselyn','josie','joy','joyce','judith','juliana','julianne','julie','juliet','julieta','julissa','justine','kacey','kaitlin','kaitlyn','kali','kallie','kamila','kami','kamryn','karen','karina','karissa','karla','katelyn','katharine','kathleen','kathryn','katie','katia','katrina','kaya','keira','kelsey','kendall','kendra','kenya','keri','kerry','keyla','kia','kiana','kiara','kiera','kim','kimberley','kira','kirsten','kirstin','kirsty','kisha','klaudia','kori','kourtney','kris','krystal','kyla','kylie','kyra','lacy','laia','lainey','laila','laisha','laken','lalita','lamia','lana','lanae','lara','larissa','laurel','lauren','lavender','leanna','leila','leilani','lenora','lena','lesley','leslie','leticia','letitia','lexi','lia','liana','libby','lidia','lila','lilah','lillian','liliana','lilith','linda','lindsey','linnea','lisa','livia','liz','lola','lori','lorena','lorraine','louisa','louise','lucia','luciana','lucille','macey','mackenzie','macy','madalyn','madeline','madelene','maggie','magdalena','mai','maia','malia','malika','mama','manuela','marcia','margot','mariah','mariana','maribel','marigold','marina','marisol','marissa','maritza','marjorie','marlene','marsha','marta','martina','maryann','marybeth','matilda','maude','maxine','maya','mayra','meadow','melanie','melina','melissa','melody','mercedes','meredith','michele','michelle','mika','mikaela','mildred','milena','mina','miranda','mirielle','miriam','mirna','misha','missy','misty','moira','molly','monica','monique','mora','morwenna','mya','myla','nadia','nadine','naima','nancy','natalia','natasha','naya','neha','neve','nicola','nicole','nika','noelle','noemi','norah','norma','nova','nuria','nyla','olga','olive','opal','ophelia','ora','orchid','orla','oriana','osanna','ozella','paloma','pamela','paola','pauline','paxton','pearl','peggy','perla','philippa','phoebe','pia','polly','polina','poncia','priscilla','priya','prudence','qiana','quiana','quinta','quita','rachel','rachael','rachelle','rain','raisa','ramona','randi','raven','reagan','reba','regina','reina','renata','renee','rhea','rhiannon','rhoda','rhonda','rita','roberta','robin','robyn','rochelle','romina','roni','ronnie','rosa','rosalind','rosalinda','rosalia','rosalyn','rosanna','rose','roselyn','rosie','roxana','roxie','royce','ruth','ruthie','ryann','sabrina','sade','saige','salome','sally','samara','samira','sandra','sandy','sasha','satya','scarlet','selena','selina','serena','serra','shaina','shakira','shana','shania','shannon','shari','sharon','shauna','shawna','shea','shelby','shelia','shelly','sheridan','sherri','sheryl','shirley','shoshana','siobhan','sienna','sierra','simone','sisley','skye','sonia','sonja','soraya','stacey','stacia','stacy','stephanie','storm','sue','susan','susana','susanna','suzanne','suzy','sybil','sylvia','sylvie','tabitha','talia','talitha','tamara','tami','tamika','tammy','tanya','tara','taryn','tasha','tate','tatiana','tatum','tawny','tea','tedra','tegan','teri','teresa','teresita','terri','terry','tess','tessa','thaïs','thalia','thea','theodora','theresa','thirza','tia','tiana','tianna','tiffany','tilda','tilly','timea','tina','tish','tori','tory','traci','tracy','trina','trisha','trinity','trudy','tula','twyla','tyra','udita','ulrika','ulrike','ulyana','uma','una','ursula','uta','valeria','valerie','vanessa','vania','vanna','varda','vera','verity','veronica','vesta','vicki','vida','viktoria','violeta','virginia','vivian','viviana','vivien','vivienne','willa','willow','wilma','winifred','winnie','wynne','wynter','xandra','xanthe','xenia','ximena','xin','xia','xochitl','xylia','xena','yasmin','yasmine','yolanda','yomi','yvette','yvonne','yulia','yuna','yuri','zahra','zaida','zaira','zaina','zara','zaria','zasha','zella','zelda','zelina','zenobia','zeni','zenna','zephyr','zera','zeta','zina','zion','zira','zola','zolanda','zoya','sissy'
];
// Male names
var MALE = [ 'liam','noah','oliver','elijah','james','william','benjamin','lucas','henry','alexander','mason','michael','ethan','daniel','jacob','logan','jackson','levi','sebastian','mateo','jack','owen','theodore','aiden','samuel','joseph','john','david','wyatt','matthew','luke','asher','carter','julian','grayson','leo','jayden','gabriel','isaac','lincoln','anthony','hudson','dylan','ezra','thomas','charles','christopher','jaxon','maverick','josiah','isaiah','andrew','elias','joshua','nathan','caleb','ryan','adrian','miles','eli','nolan','christian','aaron','cameron','ezekiel','colton','luca','landon','hunter','jonah','silas','adam','nicholas','cooper','brayden','ryker','blake','carson','cade','henrik','omar','roman','zachary','kevin','peter','kyle','steven','bryce','tyler','simon','santiago','angel','waylon','eastón','kai','axel','brooks','jonathan','robert','jameson','ian','everett','greyson','wesley','jeremiah','leonardo','jordan','jose','bennett','parker','beau','weston','austin','connor','dominick','xavier','jaxson','jace','emmett','declan','rowan','micah','kayden','gael','river','kingston','damian','sawyer','vincent','legend','myles','harrison','august','bryson','amir','giovanni','chase','diego','milo','jasper','walker','jason','cole','nathaniel','george','luis','arlo','ryder','arthur','calvin','braxton','elliot','rhett','enzo','judah','elliott','malachi','beckett','theo','hayden','kaiden','zion','matteo','jesse','luka','emmanuel','zayden','king','alex','brody','eric','ace','victor','abraham','edward','maddox','kaleb','timothy','jude','elli','finley','jesus','kameron','alan','maxwell','miguel','antonio','abel','beckham','brandon','judson','richard','avery','caden','brantley','tristan','mohamed','brady','colin','malcolm','cedric','paul','erick','andre','martin','tobias','marcus','emilio','andres','colt','braylen','jeremy','manuel','prince','karter','dante','rylan','atlas','remington','mohammad','mario','philip','jesiah','kyrie','eduardo','zane','gregory','preston','jaden','derek','bruce','raymond','cyrus','leon','caiden','israel','ronan','kingsley','alec','knox','griffin','warren','keegan','solomon','ruben','alvaro','cody','khalil','dakota','bodhi','harvey','abdullah','finnegan','kayson','raul','drew','damon','hugo','wade','mohammed','sullivan','orion','spencer','darius','dean','keith','muhammad','aarav','alejandro','tyson','karson','lawrence','francisco','rohan','sean','kane','ali','lane','travis','chance','colby','malik','cory','julio','max','moses','zayn','abdul','quinn','rory','saint','leland','roy','boone','russell','kellen','marshall','nehemiah','ozzy','reed','shane','ulises','vance','wes','xander','yusuf','zaid','abdiel','cash','dorian','eliseo','frank','gavin','hector','jairo','kaden','leonel','matias','niko','oscar','pierce','quincy','raphael','salvatore','tate','uriah','vicente','will','zachariah','albert','bryant','clayton','drake','edwin','fabian','gordon','harold','ivan','jensen','keaton','lamar','mitchell','nelson','otto','paxton','quentin','ricardo','santino','trevor','ulysses','valentin','wallace','zavier'
];
// lower-case lookup sets for detection
var FEMALE_SET = {};
var MALE_SET = {};
FEMALE.forEach(function(n){ FEMALE_SET[n.toLowerCase()]=true; });
MALE.forEach(function(n){ MALE_SET[n.toLowerCase()]=true; });
function detectGender(name){
var s = stripNonLetters(name).toLowerCase();
if (!s) return 'unknown';
if (FEMALE_SET[s]) return 'female';
if (MALE_SET[s]) return 'male';
return 'unknown';
}
// similarity helpers
function longestCommonSubstring(a,b){ a=(a||'').toLowerCase(); b=(b||'').toLowerCase(); var m=a.length,n=b.length; if(!m||!n) return 0; var dp=new Array(n+1).fill(0),best=0; for(var i=1;i<=m;i++){ for(var j=n;j>=1;j--){ if(a.charAt(i-1)===b.charAt(j-1)){ dp[j]=dp[j-1]+1; if(dp[j]>best) best=dp[j]; } else dp[j]=0; } } return best; }
// main deterministic generator: selects from name pools and biases by weights
function generateCombined(aRaw, bRaw){
var a = (aRaw||'').trim();
var b = (bRaw||'').trim();
if (!a || !b) return {name:'', w1:0, w2:0};
var seed = a.toLowerCase() + '|' + b.toLowerCase();
var h = xmur3(seed)();
var rng = mulberry32(h);
// deterministic weight 10..90
var wA = Math.floor(rng()*81) + 10;
var wB = 100 - wA;
// detect gender
var g1 = detectGender(a), g2 = detectGender(b);
var targetGender = 'mixed';
if (g1 === 'female' || g2 === 'female') targetGender = 'female';
else if (g1 === 'male' || g2 === 'male') targetGender = 'male';
// choose pools
var pool;
if (targetGender === 'female') pool = FEMALE.slice();
else if (targetGender === 'male') pool = MALE.slice();
else pool = FEMALE.concat(MALE);
// deterministic selection: compute two indices then mix by weights
var idxA = Math.floor(rng()*pool.length);
var idxB = Math.floor(rng()*pool.length);
var mixedIndex = Math.round((idxA * (wA/100)) + (idxB * (wB/100))) % pool.length;
// avoid near-match: reject names that share substring length >=3 with either input OR LCS >30%
var attempts = 0;
var step = Math.max(1, Math.floor(rng()* (pool.length-1) ) );
var candidate = null;
var a_clean = stripNonLetters(a).toLowerCase();
var b_clean = stripNonLetters(b).toLowerCase();
while (attempts < pool.length){
var idx = (mixedIndex + attempts * step) % pool.length;
var name = pool[idx];
var name_clean = stripNonLetters(name).toLowerCase();
var tooSimilar = false;
// reject if contains any 3+ contiguous substring from input names
function hasSubstrK(k, text, pattern){ if (!text || !pattern) return false; if (pattern.length < k || text.length < k) return false; for (var i=0;i<=pattern.length-k;i++){ if (text.indexOf(pattern.substr(i,k)) !== -1) return true; } return false; }
for (var k=3;k<=Math.min(6, name_clean.length); k++){
if (hasSubstrK(k, name_clean, a_clean) || hasSubstrK(k, name_clean, b_clean)) { tooSimilar = true; break; }
}
if (tooSimilar){ attempts++; continue; }
// LCS check
var lcsA = longestCommonSubstring(name_clean,a_clean);
var lcsB = longestCommonSubstring(name_clean,b_clean);
var threshold = Math.max(2, Math.floor(name_clean.length * 0.30));
if (lcsA > threshold || lcsB > threshold){ attempts++; continue; }
// passed checks
candidate = capitalize(name_clean);
break;
}
// fallback: if none found, pick a deterministic name by mapping hash to alphabet (6 letters)
if (!candidate){
var alt = '';
for (var i=0;i<6;i++){ alt += String.fromCharCode(97 + Math.floor(rng()*26)); }
candidate = capitalize(alt);
}
return {name: candidate, w1: wA, w2: wB};
}
// recent list UI
var recent = [], MAX_RECENT = 6;
function renderRecent(){ var $g=$('#recentGrid'); $g.empty(); for(var i=0;i<MAX_RECENT;i++){ (function(idx){ var it = recent[idx]; var $slot = $('<div class="slot">'); if(!it){ $slot.html('<div class="note" style="opacity:.45">— empty —</div>'); } else { var $txt = $('<div class="txt">').text(it.n1 + ' + ' + it.n2 + ' = ' + it.n3); var $sm = $('<div class="note">').text('Weights: ' + it.w1 + '% / ' + it.w2 + '%'); $slot.append($('<div>').append($txt).append($sm)); $slot.css('cursor','pointer'); $slot.on('click', function(){ $('#name1').val(it.n1); $('#name2').val(it.n2); $('#name3').val(it.n3); $('#weights').text('Weights: ' + it.w1 + '% / ' + it.w2 + '%'); }); } $g.append($slot); })(i); } }
function addRecent(n1,n2,n3,w1,w2,seed){ var idx = recent.findIndex(function(x){ return x && x.n1.toLowerCase()===n1.toLowerCase() && x.n2.toLowerCase()===n2.toLowerCase() && x.n3===n3; }); if (idx !== -1){ var it = recent.splice(idx,1)[0]; recent.unshift(it); } else recent.unshift({n1:n1,n2:n2,n3:n3,w1:w1,w2:w2,seed:seed}); if (recent.length>MAX_RECENT) recent = recent.slice(0,MAX_RECENT); renderRecent(); }
// UI wiring
$(function(){ renderRecent(); $('#generate').on('click', function(){ var n1 = $('#name1').val(); var n2 = $('#name2').val(); var res = generateCombined(n1,n2); if (!res.name){ alert('Please enter both Name 1 and Name 2.'); return; } $('#name3').val(res.name); $('#weights').text('Weights: ' + res.w1 + '% / ' + res.w2 + '%'); addRecent(n1,n2,res.name,res.w1,res.w2,(n1+'|'+n2).toLowerCase()); }); $('#clear').on('click', function(){ $('#name1').val(''); $('#name2').val(''); $('#name3').val(''); $('#weights').text('Weights: —'); }); $('#copy').on('click', function(){ var v = $('#name3').val(); if (!v){ alert('No result to copy'); return; } navigator.clipboard && navigator.clipboard.writeText(v).then(function(){ alert('Copied: ' + v); }, function(){ var $t = $('<input>'); $('body').append($t); $t.val(v).select(); document.execCommand('copy'); $t.remove(); alert('Copied: ' + v); }); }); $('#name1,#name2').on('keypress', function(e){ if (e.which === 13) $('#generate').click(); }); window.generateCombined = generateCombined; });
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment