Skip to content

Instantly share code, notes, and snippets.

@jmikedupont2
Created April 3, 2026 18:53
Show Gist options
  • Select an option

  • Save jmikedupont2/544e87ce3af06f08e22960bca168303f to your computer and use it in GitHub Desktop.

Select an option

Save jmikedupont2/544e87ce3af06f08e22960bca168303f to your computer and use it in GitHub Desktop.
Monster Orbifold Analyzer HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Monster Orbifold Analyzer</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;600&display=swap');
:root {
--bg: #0a0a0f;
--text: #e8e8f0;
--accent: #6366f1;
--panel: #12121a;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'JetBrains Mono', monospace;
background: var(--bg);
color: var(--text);
min-height: 100vh;
padding: 1rem;
}
h1 { font-size: 1.5rem; color: var(--accent); margin-bottom: 0.5rem; }
.subtitle { color: #666; font-size: 0.8rem; margin-bottom: 1rem; }
.controls {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
margin-bottom: 1rem;
}
input, button, select {
padding: 0.5rem;
background: var(--panel);
border: 1px solid #333;
color: var(--text);
border-radius: 4px;
font-family: inherit;
}
button { background: var(--accent); border-color: var(--accent); cursor: pointer; }
#output {
background: var(--panel);
border: 1px solid #333;
border-radius: 6px;
padding: 1rem;
font-size: 0.85rem;
line-height: 1.6;
white-space: pre-wrap;
}
.orbifold-display {
display: flex;
gap: 1rem;
margin: 1rem 0;
padding: 1rem;
background: rgba(99, 102, 241, 0.1);
border-radius: 8px;
}
.coord {
text-align: center;
padding: 1rem;
background: var(--panel);
border-radius: 6px;
min-width: 80px;
}
.coord-label { font-size: 0.7rem; color: #666; }
.coord-value { font-size: 1.5rem; color: var(--accent); font-weight: 600; }
table { width: 100%; border-collapse: collapse; margin-top: 1rem; }
th, td { padding: 0.5rem; text-align: left; border-bottom: 1px solid #333; }
th { color: #666; }
.cell-occupied { background: rgba(99, 102, 241, 0.3); }
</style>
</head>
<body>
<h1>MONSTER ORBIFOLD ANALYZER</h1>
<p class="subtitle">Coordinates (mod 71, mod 59, mod 47) = 196,883 cells</p>
<div class="controls">
<input type="number" id="input-n" placeholder="Enter number" value="196883">
<button onclick="computeOrbifold()">Compute Orbifold</button>
<button onclick="showOrbit()">Show Orbit</button>
<button onclick="showGrid()">Full Grid</button>
</div>
<div class="orbifold-display" id="orbifold-display" style="display:none;">
<div class="coord">
<div class="coord-label">mod 71</div>
<div class="coord-value" id="coord-71">-</div>
</div>
<div class="coord">
<div class="coord-label">mod 59</div>
<div class="coord-value" id="coord-59">-</div>
</div>
<div class="coord">
<div class="coord-label">mod 47</div>
<div class="coord-value" id="coord-47">-</div>
</div>
</div>
<div id="output"></div>
<script>
const ORB_DIM = { 71: 71, 59: 59, 47: 47 };
const SSP = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 41, 47, 59, 71];
const MONSTER_REPS = [
1, 196883, 21296876, 842609326, 18538750076, 19360062527, 293553734298,
3879214937598, 36173193327999, 125510727015275, 190292345709543, 222879856734249,
1044868466775133, 1109944460516150, 2374124840062976, 8980616927734375, 8980616927734375,
15178147608537368, 39660520552077425, 60359800576579350, 251098487132187500, 290568421805921077,
336041615485626050, 2500435234254428856, 2986480825407204125, 3503434660075044981, 3503434660075044981,
3605718753596953125, 8456836343580310400, 8754193822112578125, 28585990950721640625, 30815545786259524745,
31569817307122699605, 47377503606648784400, 49609712911192813665, 77316619273928125000, 130415350420342968750,
155943076739182582850, 172399434201593354756, 172399434201593354756, 286243267692724486144,
286243267692724486144, 379913824694312370176, 640558364167263622626, 640558364167263622626,
643356925889917747200, 691170144025469730622, 691170144025469730622, 776097192277137500000,
918438233727730974720, 1201241700908448332364, 1353006807137391674268, 1480279477146615234375,
1480279477146615234375, 1768130802583126953125, 1768130802583126953125, 2351753641814605348320,
2382987417506242421875, 4567199176912486400000, 4567199176912486400000, 5578077210155766091776,
6566555764392010419123, 7226910362631220625000, 10145274012943412428800, 12810005542623250817856,
19795913912408993711352, 21803647757861753437500, 24670833602960142274950, 31714653744947491918600,
41209556844092914062500, 42940402913709544921875, 42940402913709544921875, 60683762052057587326065,
70660346341309333984375, 70660346341309333984375, 86551489469233273849000, 91068387388302451493925,
114212876389603002704448, 115192831837135016250000, 146575737439884098045700, 149614794149226010902528,
149614794149226010902528, 161649111002260792968750, 161649111002260792968750, 191259085113459945312500,
191259085113459945312500, 218028402153522030021875, 220326476909636307378168, 260799524107083767968750,
260799524107083767968750, 261575621299360905468750, 277540481294528814140625, 303379038247015811718750,
331150814995116217581480, 351532203382732066094400, 391009081837477378329600, 392611651975065600000000,
433528694560598978525184, 597787522207315571077947, 597787522207315571077947, 600020772685064502392907,
626877403613887304040448, 626877403613887304040448, 655159231073705404921875, 689763222744895005949242,
689763222744895005949242, 689766726179555080994223, 689766726179555080994223, 1037605886984697481755304,
1361549126105752982272875, 1599110387863558882812500, 1662686180483865572016128, 2181694185821505680397072,
2216343020913351966796875, 2477548750555298068681032, 3282510540283631442175104, 3537292796538741415074900,
3619209050774375426792424, 4004308274823270400000000, 4239315652979009728125000, 4926670174323484069683200,
5334046162969208352215625, 5514132424881463208443904, 5514132424881463208443904, 5514132424881463208443904,
7118465328761788475375616, 7375892500409609408203125, 7567151576542452425781250, 7567151576542452425781250,
7850934959207940600000000, 8394037047155083487634450, 8874260875527017936065100, 9416031858681585751556096,
9479495745805305653125000, 9592298143650890255171584, 9592298143650890255171584, 9592584386918582979657728,
10023854998171489083984375, 12650882100466187033706250, 14930164283563048960000000, 16109407269221032565630370,
22626621365160537099927552, 24546384719289825598186695, 27501917609709102247187500, 29734941419909382162874368,
33684388830359981044531200, 33722191327002668157047380, 37310715211546624000000000, 38471795739256565080575180,
41738941151243953804687500, 41762322738385820195625000, 42001454087954515167503490, 42601474860639579669896397,
43527130990147981755651072, 50572542024949598403750000, 51324350389558097414062500, 56356433273146675005489152,
58437394633227526183321600, 62038057486792249132974080, 63750812845035828079008441, 64326163427522624205703125,
66550339514356152000000000, 69084859008005036431224066, 74612213529720383654779356, 77423398454853064646282250,
83974774459050335630859375, 86206621680977834911875000, 88943820620288343261672393, 103354104243912727763091456,
115165062362004433625000000, 121170799240938738783416925, 124058385593021471188320256, 124982156072747647257292800,
125517264890136048242396811, 129572518017902934396764160, 130287135266837289237316743, 135226984222789977095703125,
136107644194473772613203125, 136574874874360806036041889, 136574874874360806036041889, 138988549876584520148320256,
161561864971171113287540625, 163216709667196367710937500, 172248852397651745653437500, 173865305251972140447265625,
175867626988794162227008203, 177966317773633111417870812, 198203900044423845494482560, 200390867219082687273984375,
203314261261157852274218750, 207467089840006711558593750, 212490247553365721772656250, 241866941438795926688759808,
258823477531055064045234375
];
function orbifoldCoords(n) {
return {
71: n % 71,
59: n % 59,
47: n % 47
};
}
function computeOrbifold() {
const n = parseInt(document.getElementById('input-n').value);
const coords = orbifoldCoords(n);
document.getElementById('orbifold-display').style.display = 'flex';
document.getElementById('coord-71').textContent = coords[71];
document.getElementById('coord-59').textContent = coords[59];
document.getElementById('coord-47').textContent = coords[47];
let output = 'Orbifold Analysis for n = ' + n.toLocaleString() + '\n';
output += '='.repeat(50) + '\n\n';
output += 'Orbifold coordinates: (' + coords[71] + ' mod 71, ' + coords[59] + ' mod 59, ' + coords[47] + ' mod 47)\n';
output += 'Total cells: ' + (71 * 59 * 47).toLocaleString() + ' = 196,883\n\n';
// Check if n maps to any Monster irreps
let matchingIrreps = [];
MONSTER_REPS.forEach((rep, idx) => {
if (orbifoldCoords(rep)[71] === coords[71] &&
orbifoldCoords(rep)[59] === coords[59] &&
orbifoldCoords(rep)[47] === coords[47]) {
matchingIrreps.push({idx, rep});
}
});
if (matchingIrreps.length > 0) {
output += 'Matching Monster Irreps on this orbifold point:\n';
matchingIrreps.forEach(m => {
output += ' Irrep ' + m.idx + ': ' + m.rep.toLocaleString() + '\n';
});
} else {
output += 'No Monster irreps map to this orbifold point.\n';
}
document.getElementById('output').textContent = output;
}
function showOrbit() {
const n = parseInt(document.getElementById('input-n').value);
let output = 'Orbit of ' + n + ' under orbifold action\n';
output += '='.repeat(50) + '\n\n';
// Show first 20 irreps with their orbifold coords
output += 'First 20 Monster Irreps orbifold mapping:\n\n';
output += 'Idx | Dimension | Orbifold (71, 59, 47)\n';
output += '-'.repeat(55) + '\n';
for (let i = 0; i < 20; i++) {
const c = orbifoldCoords(MONSTER_REPS[i]);
output += String(i).padStart(3) + ' | ' + MONSTER_REPS[i].toLocaleString().padStart(14) + ' | (' + c[71] + ', ' + c[59] + ', ' + c[47] + ')\n';
}
document.getElementById('output').textContent = output;
}
function showGrid() {
// Build a sample grid showing orbifold distribution
const grid = {};
// Sample first 50 irreps
for (let i = 0; i < 50; i++) {
const c = orbifoldCoords(MONSTER_REPS[i]);
const key = c[71] + ',' + c[59] + ',' + c[47];
if (!grid[key]) grid[key] = [];
grid[key].push(i);
}
let output = 'Orbifold Grid (first 50 irreps)\n';
output += '='.repeat(50) + '\n';
output += '71,59,47 coords -> irrep indices\n\n';
Object.keys(grid).slice(0, 20).forEach(key => {
output += '(' + key + ') -> [' + grid[key].join(', ') + ']\n';
});
output += '\nTotal unique orbifold points (from 50 irreps): ' + Object.keys(grid).length + '\n';
output += 'Total possible: 196,883\n';
document.getElementById('output').textContent = output;
}
// Initial run
computeOrbifold();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment