diff options
Diffstat (limited to 'challenge-159/roger-bell-west/javascript')
| -rwxr-xr-x | challenge-159/roger-bell-west/javascript/ch-1.js | 97 | ||||
| -rwxr-xr-x | challenge-159/roger-bell-west/javascript/ch-2.js | 94 |
2 files changed, 191 insertions, 0 deletions
diff --git a/challenge-159/roger-bell-west/javascript/ch-1.js b/challenge-159/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..c18b03883d --- /dev/null +++ b/challenge-159/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,97 @@ +#! /usr/bin/node + +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 gcd (m0,n0) { + let m=m0 + let n=n0 + while (n != 0) { + [m,n]=[n,m % n] + } + return m +} + +function lcm (m,n) { + return m/gcd(m,n)*n +} + +function lcmseries(a0,b) { + let a=a0 + for (let i=a+1;i <= b;i++) { + a=lcm(a,i) + } + return a +} + +function farey (n) { + let l=lcmseries(2,n) + let d=new Map() + let s=[] + for (let i=1;i <= n;i++) { + let m=l/i + for (let j=0;j <= i;j++) { + let k=m*j + if (!d.has(k)) { + d.set(k,[j,i]) + s.push(k) + } + } + } + s.sort(function(a,b) { + return a-b; + }) + return s.map(i => d.get(i)) +} + +if (deepEqual(farey(5),[ + [0, 1], [1, 5], [1, 4], [1, 3], [2, 5], [1, 2], [3, 5], [2, 3], + [3, 4], [4, 5], [1, 1] +])) { + process.stdout.write("Pass") +} else { + process.stdout.write("FAIL") +} +process.stdout.write(" "); + +if (deepEqual(farey(7),[ + [0, 1], [1, 7], [1, 6], [1, 5], [1, 4], [2, 7], [1, 3], [2, 5], + [3, 7], [1, 2], [4, 7], [3, 5], [2, 3], [5, 7], [3, 4], [4, 5], + [5, 6], [6, 7], [1, 1] +])) { + process.stdout.write("Pass") +} else { + process.stdout.write("FAIL") +} +process.stdout.write(" "); + +if (deepEqual(farey(4),[ + [0, 1], [1, 4], [1, 3], [1, 2], [2, 3], [3, 4], [1, 1] +])) { + process.stdout.write("Pass") +} else { + process.stdout.write("FAIL") +} +process.stdout.write("\n"); diff --git a/challenge-159/roger-bell-west/javascript/ch-2.js b/challenge-159/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..619b239213 --- /dev/null +++ b/challenge-159/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,94 @@ +#! /usr/bin/node + +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 primefactor (n) { + let f=new Map() + let m=n + for (let p of genprimes(Math.floor(Math.sqrt(n)))) { + while (m % p == 0) { + m=Math.floor(m/p) + if (f.has(p)) { + f.set(p,f.get(p)+1) + } else { + f.set(p,1) + } + if (m == 1) { + break + } + } + } + if (m > 1) { + if (f.has(m)) { + f.set(m,f.get(m)+1) + } else { + f.set(m,1) + } + } + return f +} + +function moebius (n) { + let z=0 + for (let v of primefactor(n).values()) { + if (v > 1) { + return 0 + } + z++ + } + if (z % 2 == 0) { + return 1 + } + return -1 +} + +if (moebius(5) == -1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (moebius(10) == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (moebius(20) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); |
