diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-08-19 12:36:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-19 12:36:37 +0100 |
| commit | b7f26191da7480dd098b30c9bd0c7a8b79c61492 (patch) | |
| tree | 288ec39d893dfcadd4dd24be4294a9b76efaf1a3 /challenge-335/roger-bell-west/javascript | |
| parent | 72115ca8dee469436857991c88d7002158725057 (diff) | |
| parent | b3d35809f9e728cd1e057ccc7980e0d77f6970f4 (diff) | |
| download | perlweeklychallenge-club-b7f26191da7480dd098b30c9bd0c7a8b79c61492.tar.gz perlweeklychallenge-club-b7f26191da7480dd098b30c9bd0c7a8b79c61492.tar.bz2 perlweeklychallenge-club-b7f26191da7480dd098b30c9bd0c7a8b79c61492.zip | |
Merge pull request #12548 from Firedrake/rogerbw-challenge-335
RogerBW solutions for challenge no. 335
Diffstat (limited to 'challenge-335/roger-bell-west/javascript')
| -rwxr-xr-x | challenge-335/roger-bell-west/javascript/ch-1.js | 101 | ||||
| -rwxr-xr-x | challenge-335/roger-bell-west/javascript/ch-2.js | 73 |
2 files changed, 174 insertions, 0 deletions
diff --git a/challenge-335/roger-bell-west/javascript/ch-1.js b/challenge-335/roger-bell-west/javascript/ch-1.js new file mode 100755 index 0000000000..7c002de222 --- /dev/null +++ b/challenge-335/roger-bell-west/javascript/ch-1.js @@ -0,0 +1,101 @@ +#! /usr/bin/node + +"use strict" + +function commoncharacters(a) { + let mc = new Map; + let first = true; + for (let s of a) { + const mk = counterify(s.split("")); + if (first) { + mc = mk; + first = false; + } else { + for (let k of mc.keys()) { + if (mk.has(k)) { + mc.set(k, Math.min(mc.get(k), mk.get(k))); + } else { + mc.delete(k); + } + } + } + } + let out = []; + let kl = [...mc.keys()]; + kl.sort(); + for (let c of kl) { + for (let n = 1; n <= mc.get(c); n++) { + out.push(c); + } + } + return out; +} + +function counterify(a) { + let cc = new Map; + for (let x of a) { + if (!cc.has(x)) { + cc.set(x, 0); + } + cc.set(x, cc.get(x) + 1); + } + return cc; +} + +// 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; + } +} + +if (deepEqual(commoncharacters(['bella', 'label', 'roller']), ['e', 'l', 'l'])) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (deepEqual(commoncharacters(['cool', 'lock', 'cook']), ['c', 'o'])) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (deepEqual(commoncharacters(['hello', 'world', 'pole']), ['l', 'o'])) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (deepEqual(commoncharacters(['abc', 'def', 'ghi']), [])) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (deepEqual(commoncharacters(['aab', 'aac', 'aaa']), ['a', 'a'])) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-335/roger-bell-west/javascript/ch-2.js b/challenge-335/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..a3eda21565 --- /dev/null +++ b/challenge-335/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,73 @@ +#! /usr/bin/node + +"use strict" + +function findwinner(a) { + let board = [ [0, 0, 0], [0, 0, 0], [0, 0, 0] ]; + let player = 1; + for (let play of a) { + board[play[0]][play[1]] = player; + player = 3 - player; + } + for (let pattern of [ + [0, 0, 1, 0], + [0, 1, 1, 0], + [0, 2, 1, 0], + [0, 0, 0, 1], + [1, 0, 0, 1], + [2, 0, 0, 1], + [0, 0, 1, 1], + [0, 2, 1, -1] + ]) { + let cellvals = new Set; + for (let i = 0; i <= 2; i++) { + const x = pattern[0] + i * pattern[2]; + const y = pattern[1] + i * pattern[3]; + cellvals.add(board[y][x]); + } + if (cellvals.size == 1) { + let winner = [...cellvals][0]; + if (winner == 1) { + return "A"; + } else if (winner == 2) { + return "B"; + } + } + } + if (a.length == 9) { + return "Draw"; + } else { + return "Pending"; + } +} + +if (findwinner([[0, 0], [2, 0], [1, 1], [2, 1], [2, 2]]) == 'A') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (findwinner([[0, 0], [1, 1], [0, 1], [0, 2], [1, 0], [2, 0]]) == 'B') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (findwinner([[0, 0], [1, 1], [2, 0], [1, 0], [1, 2], [2, 1], [0, 1], [0, 2], [2, 2]]) == 'Draw') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (findwinner([[0, 0], [1, 1]]) == 'Pending') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); +if (findwinner([[1, 1], [0, 0], [2, 2], [0, 1], [1, 0], [0, 2]]) == 'B') { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); |
