summaryrefslogtreecommitdiff
path: root/src/toys/godel/js/godel-worker.js
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2026-01-07 19:29:30 -0800
committerElizabeth Hunt <me@liz.coffee>2026-01-07 19:29:30 -0800
commit91b7598b22f89319f64054daf42c950de3eb6451 (patch)
treeb337ad01c75e7ee88f287eda05522e72dd9a8dd5 /src/toys/godel/js/godel-worker.js
parent49012297ea792a69501b74d8d83bd4be44d177da (diff)
downloadlizdotcoffee-91b7598b22f89319f64054daf42c950de3eb6451.tar.gz
lizdotcoffee-91b7598b22f89319f64054daf42c950de3eb6451.zip
Adding some of my favorite toys
Diffstat (limited to 'src/toys/godel/js/godel-worker.js')
-rw-r--r--src/toys/godel/js/godel-worker.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/toys/godel/js/godel-worker.js b/src/toys/godel/js/godel-worker.js
new file mode 100644
index 0000000..1ba9da4
--- /dev/null
+++ b/src/toys/godel/js/godel-worker.js
@@ -0,0 +1,42 @@
+const isPrime = (n) => {
+ if (n < 2) {
+ return false;
+ }
+ if (n === 2) {
+ return true;
+ }
+ if (n % 2 === 0) {
+ return false;
+ }
+ const limit = Math.floor(Math.sqrt(n));
+ for (let i = 3; i <= limit; i += 2) {
+ if (n % i === 0) {
+ return false;
+ }
+ }
+ return true;
+};
+
+const primes = [2];
+const primeAt = (index) => {
+ while (primes.length < index) {
+ let candidate = primes[primes.length - 1] + 1;
+ while (!isPrime(candidate)) {
+ candidate += 1;
+ }
+ primes.push(candidate);
+ }
+ return primes[index - 1];
+};
+
+const computeGodelNumber = (sequence) => {
+ return sequence.reduce((acc, exponent, idx) => {
+ const prime = BigInt(primeAt(idx + 1));
+ return acc * prime ** BigInt(exponent);
+ }, BigInt(1)) - BigInt(1);
+};
+
+self.addEventListener("message", (event) => {
+ const result = computeGodelNumber(event.data);
+ self.postMessage(result.toString());
+});