summaryrefslogtreecommitdiff
path: root/godel/js/godelWorker.js
diff options
context:
space:
mode:
Diffstat (limited to 'godel/js/godelWorker.js')
-rw-r--r--godel/js/godelWorker.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/godel/js/godelWorker.js b/godel/js/godelWorker.js
new file mode 100644
index 0000000..594a4ad
--- /dev/null
+++ b/godel/js/godelWorker.js
@@ -0,0 +1,27 @@
+const isPrime = (n) =>
+ !Array(Math.ceil(Math.sqrt(n)))
+ .fill(0)
+ .map((_, i) => i + 2) // first prime is 2
+ .some((i) => n !== i && n % i === 0);
+
+const primesCache = [2];
+const p = (i) => {
+ if (primesCache.length <= i) {
+ let x = primesCache.at(-1);
+ while (primesCache.length <= i) {
+ if (isPrime(++x)) primesCache.push(x);
+ }
+ }
+ return primesCache.at(i - 1);
+};
+
+const computeGodelNumber = (godelSequence) =>
+ godelSequence.reduce((acc, num, i) => {
+ const prime = p(i + 1);
+ return BigInt(acc) * BigInt(prime) ** BigInt(num);
+ }, 1) - BigInt(1);
+
+self.addEventListener("message", (e) => {
+ const godelNumber = computeGodelNumber(e.data);
+ postMessage(godelNumber);
+});