From c1d4f3b5a474e012cc1391e23967078def3df0a8 Mon Sep 17 00:00:00 2001 From: Burke Mamlin Date: Sun, 10 Dec 2023 22:28:08 -0500 Subject: [PATCH] Support 1, 2, and 3-digit chains --- index.html | 42 ++++++++++++++++++++++++++++++++++++------ pi-chain.html | 34 +++++++++++++++++++++++----------- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/index.html b/index.html index e96cdc9..875293a 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,16 @@ #graph { opacity: 0.5; float: right; + display: block; + } + #size { + opacity: 0.1; + clear: right; + float: right; + width: 12%; + text-align: center; + font-size: 4em; + cursor: pointer; } #counter { position: absolute; @@ -46,6 +56,9 @@
+
+ 3 +
@@ -65,6 +78,11 @@ var counter; var currValue = -1; + var numDigits = 3; + + function size() { + return document.getElementById("size"); + } function inp() { return document.getElementById("n"); @@ -78,12 +96,18 @@ return document.getElementById("output"); } - function next(p) { + // Get digit following p for chain size s (1, 2, or 3) + function next(p, s) { if (p < 1) return 0; - return parseInt(pi.substring(p - 1, p + 2)); + if (![1,2,3].includes(s)) s = 3; + return parseInt(pi.substring(p - 1, p + (s - 1))); } - function rand() { + // Get random number with up to s digits + function rand(s) { + if (![1,2,3].includes(s)) s = 3; + if (s == 1) return Math.floor(Math.random() * 9)+1; + if (s == 2) return Math.floor(Math.random() * 99)+1; // Pick randomly from weighted digits (favors digits that are less often encountered in pichains) return weightedDigits[Math.floor(Math.random() * weightedDigits.length)]; } @@ -99,7 +123,7 @@ } function openPiChain(event) { - window.open('pi-chain.html?q=' + (event ? event.target.innerText : inp().value)); + window.open('pi-chain.html?q=' + (event ? event.target.innerText : inp().value) + '&s=' + numDigits); } function reset(keepValue) { @@ -111,7 +135,7 @@ emptyDiv.innerHTML = " "; output().appendChild(emptyDiv); } - if (!keepValue) setValue(rand()); + if (!keepValue) setValue(rand(numDigits)); } function log(x) { @@ -122,6 +146,12 @@ scrollDown(); } + function toggleSize() { + numDigits = (numDigits % 3) + 1; + size().innerText = numDigits; + reset(false); + } + setTimeout(reset, 10); function clicked() { @@ -132,7 +162,7 @@ var n = parseInt(inp().value); if (n != currValue) reset(1); log(n); - var nextValue = next(n); + var nextValue = next(n, numDigits); counter++; updateCounter(); inp().value = nextValue; diff --git a/pi-chain.html b/pi-chain.html index a5d2dcc..42d60fd 100644 --- a/pi-chain.html +++ b/pi-chain.html @@ -24,29 +24,38 @@ const pi = "14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893"; -const mainLoop = [1, 141, 535, 224, 756, 721, 864, 875, 332, 628, 342, 171, 852, 101, 821, 425, 861, 783, 973]; +const mainLoop = [ + [], + [2, 41, 69, 64, 30, 95, 17, 38, 97, 6, 26, 83, 28, 27, 32], + [1, 141, 535, 224, 756, 721, 864, 875, 332, 628, 342, 171, 852, 101, 821, 425, 861, 783, 973] +]; const groupColors = { "main": "red", 0: "pink", 1: "grey", + 2: "grey", + 4: "grey", + 7: "blue", + 19: "grey", 46: "yellow", + 79: "grey", 92: "blue" } -function next(p) { +function next(p, s) { if (p < 1) return 0; - return parseInt(pi.substring(p - 1, p + 2)); + return parseInt(pi.substring(p - 1, p + (s-1))); } -function group(p) { +function group(p, s) { // Trace until chain then assign lowest value in chain let sequence = [p]; let found = false; let chain; let n = p; while (!found) { - n = next(n); + n = next(n, s); if (!sequence.includes(n)) { sequence.push(n); } else { @@ -59,22 +68,25 @@ let params = new URLSearchParams(document.location.search); let q = params.get('q'); +let s = parseInt(params.get('s')); +console.log(s); +if (![1,2,3].includes(s)) s = 3; +console.log(s); let nodes = []; let links = []; let groups = []; -for (var i=1; i<1000; i++) { - let g = group(i); - if (mainLoop.includes(i)) { - g = "main"; - } +for (var i=1; i