aboutsummaryrefslogtreecommitdiff
path: root/challenge-169/roger-bell-west/javascript/ch-1.js
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-169/roger-bell-west/javascript/ch-1.js')
-rwxr-xr-xchallenge-169/roger-bell-west/javascript/ch-1.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/challenge-169/roger-bell-west/javascript/ch-1.js b/challenge-169/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..d1ba3034c6
--- /dev/null
+++ b/challenge-169/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,90 @@
+#! /usr/bin/node
+
+// by Frank Tan
+// https://stackoverflow.com/questions/38400594/javascript-deep-comparison
+function deepEqual(a,b)
+{
+ if( (typeof a == 'object' && a != null) &&
+ (typeof b == 'object' && b != null) )
+ {
+ var count = [0,0];
+ for( var key in a) count[0]++;
+ for( var key in b) count[1]++;
+ if( count[0]-count[1] != 0) {return false;}
+ for( var key in a)
+ {
+ if(!(key in b) || !deepEqual(a[key],b[key])) {return false;}
+ }
+ for( var key in b)
+ {
+ if(!(key in a) || !deepEqual(b[key],a[key])) {return false;}
+ }
+ return true;
+ }
+ else
+ {
+ return a === b;
+ }
+}
+
+function genprimes(mx) {
+ let primesh=new Set([2,3])
+ for (let i = 6; i <= mx; i += 6) {
+ for (let j = i-1; j <= i+1; j += 2) {
+ if (j <= mx) {
+ primesh.add(j);
+ }
+ }
+ }
+ let q=[2,3,5,7];
+ let p=q.shift();
+ let mr=Math.floor(Math.sqrt(mx));
+ while (p <= mr) {
+ if (primesh.has(p)) {
+ let i=p*p
+ for (let i=p*p; i <= mx; i += p) {
+ primesh.delete(i);
+ }
+ }
+ if (q.length < 2) {
+ q.push(q[q.length-1]+4);
+ q.push(q[q.length-1]+2);
+ }
+ p=q.shift();
+ }
+ let primes=[...primesh];
+ primes.sort(function(a,b) {
+ return a-b;
+ });
+ return primes;
+}
+
+function brilliant (ct) {
+ let base = 1;
+ let out = new Set;
+ while (true) {
+ let pv = genprimes(base * 10).filter(i => i >= base);
+ for (let ai = 0; ai < pv.length; ai++) {
+ for (let bi = ai; bi < pv.length; bi++) {
+ out.add(pv[ai] * pv[bi]);
+ }
+ }
+ if (out.size >= ct) {
+ break;
+ }
+ base *= 10;
+ }
+ let o = [...out];
+ o.sort((a,b) => a-b);
+ o.length = ct;
+ return o;
+}
+
+if (deepEqual(brilliant(20),[4, 6, 9, 10, 14, 15, 21, 25, 35, 49, 121,
+ 143, 169, 187, 209, 221, 247, 253, 289,
+ 299])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");