aboutsummaryrefslogtreecommitdiff
path: root/challenge-335/roger-bell-west/javascript
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-08-19 12:36:37 +0100
committerGitHub <noreply@github.com>2025-08-19 12:36:37 +0100
commitb7f26191da7480dd098b30c9bd0c7a8b79c61492 (patch)
tree288ec39d893dfcadd4dd24be4294a9b76efaf1a3 /challenge-335/roger-bell-west/javascript
parent72115ca8dee469436857991c88d7002158725057 (diff)
parentb3d35809f9e728cd1e057ccc7980e0d77f6970f4 (diff)
downloadperlweeklychallenge-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-xchallenge-335/roger-bell-west/javascript/ch-1.js101
-rwxr-xr-xchallenge-335/roger-bell-west/javascript/ch-2.js73
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");