smoothretro1982

Number list generator 2.2

Mar 18th, 2026 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.07 KB | None | 0 0
  1. (function() {
  2. if (document.getElementById("numHUD")) return;
  3. const MAX_OUTPUT = 100000;
  4.  
  5. const alphaToNum = s => {
  6. if (!isNaN(s) && s !== "") return parseInt(s);
  7. s = s.toLowerCase().replace(/[^a-z]/g, "");
  8. if (!s) return 0;
  9. let n = 0;
  10. for (let i = 0; i < s.length; i++) n = n * 26 + (s.charCodeAt(i) - 96);
  11. return n - 1;
  12. };
  13.  
  14. const numToAlpha = n => {
  15. let r = "",
  16. num = Math.max(0, n);
  17. do {
  18. r = String.fromCharCode(97 + (num % 26)) + r;
  19. num = Math.floor(num / 26) - 1;
  20. } while (num >= 0);
  21. return r;
  22. };
  23.  
  24. const isPrime = n => {
  25. if (n < 2) return false;
  26. for (let i = 2, s = Math.sqrt(n); i <= s; i++)
  27. if (n % i === 0) return false;
  28. return true;
  29. };
  30.  
  31. const getPermutations = (str) => {
  32. if (str.length <= 1) return [str];
  33. let perms = new Set();
  34. for (let i = 0; i < str.length; i++) {
  35. let char = str[i];
  36. let remainingChars = str.slice(0, i) + str.slice(i + 1);
  37. for (let p of getPermutations(remainingChars)) {
  38. perms.add(char + p);
  39. if (perms.size >= MAX_OUTPUT) return Array.from(perms);
  40. }
  41. }
  42. return Array.from(perms);
  43. };
  44.  
  45. const hud = document.createElement("div");
  46. hud.id = "numHUD";
  47. hud.style.cssText = `position:fixed; top:40px; left:40px; width:260px; background:rgba(20,20,20,0.98); color:#eee; font-family:sans-serif; padding:10px; border-radius:8px; z-index:2147483647; box-shadow:0 10px 30px rgba(0,0,0,0.5); border:1px solid #444; font-size:11px;`;
  48.  
  49. const header = document.createElement("div");
  50. // Added a 'cnt' span for the word count
  51. header.innerHTML = `
  52. <b style="color:#0f0">Number List Generator 2.2</b>
  53. <span id="nh_count" style="margin-left:10px; color:#888; font-size:9px;">[0 items]</span>
  54. <span style="float:right; cursor:pointer; color:#888; margin-left:10px;">✕</span>`;
  55. header.style.cssText = "cursor:move; padding-bottom:8px; margin-bottom:8px; border-bottom:1px solid #333;";
  56. header.querySelector('span:last-child').onclick = () => hud.remove();
  57. hud.appendChild(header);
  58.  
  59. const countDisp = header.querySelector("#nh_count");
  60.  
  61. const grid = document.createElement("div");
  62. grid.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap:6px; margin-bottom:8px;";
  63. hud.appendChild(grid);
  64.  
  65. const inputs = {};
  66. const addField = (id, label, val) => {
  67. const w = document.createElement("div");
  68. w.innerHTML = `<label style="color:#888; display:block; font-size:9px;">${label}</label>`;
  69. const i = document.createElement("input");
  70. i.id = "nh_" + id;
  71. i.value = val;
  72. i.style.cssText = "width:100%; background:#000; border:1px solid #444; color:#fff; padding:3px; border-radius:3px; box-sizing:border-box;";
  73. w.appendChild(i);
  74. grid.appendChild(w);
  75. inputs[id] = i;
  76. };
  77.  
  78. addField("start", "Start", "0");
  79. addField("end", "End", "10");
  80. addField("step", "Step", "1");
  81. addField("pad", "Pad", "0");
  82. addField("prefix", "Prefix", "");
  83. addField("suffix", "Suffix", "");
  84. addField("source", "Source Word", "abc");
  85.  
  86. const modeRow = document.createElement("div");
  87. modeRow.style.cssText = "margin-bottom:8px;";
  88. const modeSelect = document.createElement("select");
  89. modeSelect.style.cssText = "width:100%; background:#000; color:#fff; border:1px solid #444; padding:2px; border-radius:3px;";
  90. ["Numeric", "Alphabetic", "Roman", "Hex", "Color", "Prime", "Word Scramble"].forEach(m => {
  91. const o = document.createElement("option");
  92. o.value = m;
  93. o.textContent = m;
  94. modeSelect.appendChild(o);
  95. });
  96. modeRow.appendChild(modeSelect);
  97. hud.appendChild(modeRow);
  98.  
  99. const checkRow = document.createElement("div");
  100. checkRow.style.cssText = "margin-bottom:8px; padding:0 5px;";
  101. checkRow.innerHTML = `<label><input type="checkbox" id="nh_vert"> Vertical Output (Newline)</label>`;
  102. hud.appendChild(checkRow);
  103. const vertT = hud.querySelector("#nh_vert");
  104.  
  105. const output = document.createElement("textarea");
  106. output.style.cssText = "width:100%; height:70px; background:#050505; color:#0f0; border:1px solid #333; border-radius:3px; font-family:monospace; font-size:10px; margin-bottom:8px; box-sizing:border-box; resize:vertical;";
  107. hud.appendChild(output);
  108.  
  109. const btnGrid = document.createElement("div");
  110. btnGrid.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap:4px;";
  111. const genBtn = document.createElement("button");
  112. genBtn.textContent = "GENERATE";
  113. genBtn.style.cssText = "grid-column: span 2; background:#007bff; color:#fff; border:none; padding:6px; border-radius:3px; cursor:pointer; font-weight:bold;";
  114. const copyBtn = document.createElement("button");
  115. copyBtn.textContent = "COPY";
  116. copyBtn.style.cssText = "background:#444; color:#fff; border:none; padding:4px; border-radius:3px; cursor:pointer;";
  117. const saveBtn = document.createElement("button");
  118. saveBtn.textContent = "SAVE";
  119. saveBtn.style.cssText = "background:#444; color:#fff; border:none; padding:4px; border-radius:3px; cursor:pointer;";
  120.  
  121. btnGrid.append(genBtn, copyBtn, saveBtn);
  122. hud.appendChild(btnGrid);
  123.  
  124. genBtn.onclick = () => {
  125. let res = [],
  126. m = modeSelect.value;
  127. const pre = inputs.prefix.value,
  128. suf = inputs.suffix.value;
  129.  
  130. if (m === "Word Scramble") {
  131. const word = inputs.source.value;
  132. if (word.length > 8) {
  133. alert("Word too long for browser memory!");
  134. return;
  135. }
  136. res = getPermutations(word).map(w => pre + w + suf);
  137. } else {
  138. const p = parseInt(inputs.pad.value) || 0;
  139. const format = v => {
  140. let str = v.toString();
  141. if (p > str.length) str = str.padStart(p, "0");
  142. return pre + str + suf;
  143. };
  144.  
  145. let s = isNaN(inputs.start.value) ? alphaToNum(inputs.start.value) : (parseInt(inputs.start.value) || 0);
  146. let e = isNaN(inputs.end.value) ? alphaToNum(inputs.end.value) : (parseInt(inputs.end.value) || 0);
  147. const st = Math.max(1, Math.abs(parseInt(inputs.step.value) || 1));
  148.  
  149. const convert = v => {
  150. if (m === "Alphabetic") return numToAlpha(v);
  151. if (m === "Roman") {
  152. let n = v;
  153. const rom = [
  154. ["M", 1000],
  155. ["CM", 900],
  156. ["D", 500],
  157. ["CD", 400],
  158. ["C", 100],
  159. ["XC", 90],
  160. ["L", 50],
  161. ["XL", 40],
  162. ["X", 10],
  163. ["IX", 9],
  164. ["V", 5],
  165. ["IV", 4],
  166. ["I", 1]
  167. ];
  168. let r = "";
  169. for (let [rs, rv] of rom) {
  170. while (n >= rv) {
  171. r += rs;
  172. n -= rv;
  173. }
  174. }
  175. return r || "0";
  176. }
  177. if (m === "Color") return "#" + Math.abs(v).toString(16).padStart(6, '0').slice(-6);
  178. if (m === "Hex") return v.toString(16);
  179. return v;
  180. };
  181.  
  182. const fwd = s <= e;
  183. for (let i = s; fwd ? i <= e : i >= e; fwd ? i += st : i -= st) {
  184. if (res.length >= MAX_OUTPUT) break;
  185. if (m === "Prime" && !isPrime(i)) continue;
  186. res.push(format(convert(i)));
  187. }
  188. }
  189.  
  190. output.value = vertT.checked ? res.join("\n") : res.join(", ");
  191.  
  192. // Update the Counter Display
  193. countDisp.textContent = `[${res.length.toLocaleString()} items]`;
  194. countDisp.style.color = res.length >= MAX_OUTPUT ? "#f80" : "#888";
  195. };
  196.  
  197. copyBtn.onclick = () => {
  198. output.select();
  199. document.execCommand("copy");
  200. copyBtn.textContent = "DONE";
  201. setTimeout(() => copyBtn.textContent = "COPY", 800);
  202. };
  203.  
  204. saveBtn.onclick = () => {
  205. const a = document.createElement("a");
  206. a.href = URL.createObjectURL(new Blob([output.value], {
  207. type: "text/plain"
  208. }));
  209. a.download = "sequence_list.txt";
  210. a.click();
  211. };
  212.  
  213. let d = false,
  214. ox, oy;
  215. header.onmousedown = e => {
  216. d = true;
  217. ox = e.clientX - hud.offsetLeft;
  218. oy = e.clientY - hud.offsetTop;
  219. };
  220. document.onmousemove = e => {
  221. if (d) {
  222. hud.style.left = (e.clientX - ox) + "px";
  223. hud.style.top = (e.clientY - oy) + "px";
  224. }
  225. };
  226. document.onmouseup = () => d = false;
  227. document.body.appendChild(hud);
  228. })();
Advertisement
Add Comment
Please, Sign In to add comment