diff options
Diffstat (limited to 'godel/js/godelWorker.js')
-rw-r--r-- | godel/js/godelWorker.js | 27 |
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); +}); |