From a54a7ba7c95965268d7a2a3c64a6a6c599fdb9da Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Fri, 17 Nov 2023 12:09:44 -0700 Subject: finish compiler! --- godel/js/godelWorker.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 godel/js/godelWorker.js (limited to 'godel/js/godelWorker.js') 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); +}); -- cgit v1.2.3-70-g09d2