diff --git a/2017-03-14/speedtest.js b/2017-03-14/speedtest.js new file mode 100644 index 0000000..6daa556 --- /dev/null +++ b/2017-03-14/speedtest.js @@ -0,0 +1,207 @@ +// speedtest script for project euler exercise 87 +// can be run from cli (V8 or SpiderMonkey 45+) or browser + +'use strict'; + +function isPrime(num) { + if (num === 3) { + return true; + } + + if (num % 2 === 0) { + return false; + } + + for (let i = 3; i <= Math.sqrt(num); i++) { + if (num % i === 0) { + return false; + } + } + return true; +} + +function mkPrimeSet(end) { + let primes = new Set([2,3,5,7]); + for(let i=10; i= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function primeSet_itemOf_432(primeSet, end) { + let sumSet = new Set(); + for(let item4 of primeSet) { + let fourth = item4 * item4 * item4 * item4; + for(let item3 of primeSet) { + let cube = item3 * item3 * item3; + for(let item2 of primeSet) { + let sum = fourth + cube + item2 * item2; + if (sum >= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function primeArray_index_234(primeArray, end) { + let sumSet = new Set(); + for(let index2=0; index2 < primeArray.length; index2++) { + let square = primeArray[index2] * primeArray[index2]; + for(let index3=0; index3 < primeArray.length; index3++) { + let cube = primeArray[index3] * primeArray[index3] * primeArray[index3]; + for(let index4=0; index4 < primeArray.length; index4++) { + let sum = square + cube + primeArray[index4] * primeArray[index4] * primeArray[index4] * primeArray[index4]; + if (sum >= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function primeArray_index_432(primeArray, end) { + let sumSet = new Set(); + for(let index4=0; index4 < primeArray.length; index4++) { + let fourth = primeArray[index4] * primeArray[index4] * primeArray[index4] * primeArray[index4]; + for(let index3=0; index3 < primeArray.length; index3++) { + let cube = primeArray[index3] * primeArray[index3] * primeArray[index3]; + for(let index2=0; index2 < primeArray.length; index2++) { + let sum = fourth + cube + primeArray[index2] * primeArray[index2]; + if (sum >= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function primeArray_itemOf_234(primeArray, end) { + let sumSet = new Set(); + for(let item2 of primeArray) { + let square = item2 * item2; + for(let item3 of primeArray) { + let cube = item3 * item3 * item3; + for(let item4 of primeArray) { + let sum = square + cube + item4 * item4 * item4 * item4; + if (sum >= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function primeArray_itemOf_432(primeArray, end) { + let sumSet = new Set(); + for(let item4 of primeArray) { + let fourth = item4 * item4 * item4 * item4; + for(let item3 of primeArray) { + let cube = item3 * item3 * item3; + for(let item2 of primeArray) { + let sum = fourth + cube + item2 * item2; + if (sum >= end) { + break; + } + sumSet.add(sum); + } + } + } + return sumSet.size; +} + +function testrunFunction(fun, args, iterCount, printResult) { + if (!Number.isInteger(iterCount) || iterCount < 1) { + iterCount = 10; + } + + if (printResult !== true) { + printResult = false; + } + + let totalTimeTaken = 0; + + for (let i = 0; i < iterCount; i++) { + let start = Date.now(), + funResult = fun(...args), + end = Date.now(); + + if (printResult) { + console.log("Got result: "+funResult+" in "+String(end - start)+" ms"); + } else { + console.log("Got result in "+String(end - start)+" ms"); + } + totalTimeTaken += (end - start); + } + + console.log("Average time after "+iterCount+" runs: "+totalTimeTaken/iterCount); +} + +function benchmark() { + const MAX = 5e7; + const MAX_ITER = 10; + + console.log("Testing prime number generation first."); + console.log("PrimeSet: "); + testrunFunction(mkPrimeSet, [MAX], MAX_ITER); + let primeSet = mkPrimeSet(MAX); + console.log("PrimeArray:"); + testrunFunction(mkPrimeArray, [MAX], MAX_ITER); + let primeArray = mkPrimeArray(MAX); + console.log("Finished number generation tests, testing now different implementations."); + console.log("PrimeSet, item of, 234:"); + testrunFunction(primeSet_itemOf_234, [primeSet, MAX], MAX_ITER, true); + console.log("PrimeSet, item of, 432:"); + testrunFunction(primeSet_itemOf_432, [primeSet, MAX], MAX_ITER, true); + console.log("PrimeArray, index, 234:"); + testrunFunction(primeArray_index_234, [primeArray, MAX], MAX_ITER, true); + console.log("PrimeArray, index, 432:"); + testrunFunction(primeArray_index_432, [primeArray, MAX], MAX_ITER, true); + console.log("PrimeArray, itemOf, 234:"); + testrunFunction(primeArray_itemOf_234, [primeArray, MAX], MAX_ITER, true); + console.log("PrimeArray, itemOf, 432:"); + testrunFunction(primeArray_itemOf_432, [primeArray, MAX], MAX_ITER, true); +} + +benchmark(); +/* +undefined +*/