aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/roger-bell-west/javascript
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-01-11 06:16:46 +0000
committerdrbaggy <js5@sanger.ac.uk>2022-01-11 06:16:46 +0000
commitf7d69a81862d0ff686fefd288191c26f2e153803 (patch)
tree5a584a9b56fd79ea806c48cfcf3175ee05540cb3 /challenge-147/roger-bell-west/javascript
parent80a1b64153ca8fcde1b2f59b98fd21ecf0ac716a (diff)
parentd5aef342008aa2a96e8085194e3a3dc6975a723b (diff)
downloadperlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.tar.gz
perlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.tar.bz2
perlweeklychallenge-club-f7d69a81862d0ff686fefd288191c26f2e153803.zip
vi ch-1.plMerge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-147/roger-bell-west/javascript')
-rwxr-xr-xchallenge-147/roger-bell-west/javascript/ch-1.js97
-rwxr-xr-xchallenge-147/roger-bell-west/javascript/ch-2.js38
2 files changed, 135 insertions, 0 deletions
diff --git a/challenge-147/roger-bell-west/javascript/ch-1.js b/challenge-147/roger-bell-west/javascript/ch-1.js
new file mode 100755
index 0000000000..3ad09c3efd
--- /dev/null
+++ b/challenge-147/roger-bell-west/javascript/ch-1.js
@@ -0,0 +1,97 @@
+#! /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+1; 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 tos(n) {
+ return n.toString();
+}
+
+function ltruncprimes(count) {
+ let out=[];
+ let lt=0;
+ let p=genprimes(500).map(tos);
+ let pp=new Set(p);
+ for (let pc of p) {
+ let l=pc.length;
+ let c=true;
+ for (let i=1;i<l;i++) {
+ if (!pp.has(pc.slice(i))) {
+ c=false;
+ break;
+ }
+ }
+ if (c) {
+ out.push(parseInt(pc));
+ lt++;
+ if (lt >= count) {
+ break;
+ }
+ }
+ }
+ return out;
+}
+
+if (deepEqual(ltruncprimes(20),[2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");
+
diff --git a/challenge-147/roger-bell-west/javascript/ch-2.js b/challenge-147/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..2cbfbc98a8
--- /dev/null
+++ b/challenge-147/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,38 @@
+#! /usr/bin/node
+
+function pentagon(n) {
+ return Math.floor(n*(3*n-1)/2);
+}
+
+function pentpair() {
+ let fpent=[0];
+ let rpent=new Map();
+ let mx=0;
+ let a=1;
+ while (true) {
+ while (mx < a) {
+ mx++;
+ fpent.push(pentagon(mx));
+ rpent.set(fpent[mx],mx);
+ }
+ for (b = 1; b < a; b++) {
+ let d=fpent[a]-fpent[b];
+ if (rpent.has(d)) {
+ let s=fpent[a]+fpent[b];
+ while (s > fpent[mx]) {
+ mx++;
+ fpent.push(pentagon(mx));
+ rpent.set(fpent[mx],mx);
+ }
+ if (rpent.has(s)) {
+ console.log("P(%d) + P(%d) = %d + %d = %d = P(%d)",a,b,fpent[a],fpent[b],s,rpent.get(s));
+ console.log("P(%d) - P(%d) = %d - %d = %d = P(%d)",a,b,fpent[a],fpent[b],d,rpent.get(d));
+ throw '';
+ }
+ }
+ }
+ a++;
+ }
+}
+
+pentpair();