aboutsummaryrefslogtreecommitdiff
path: root/challenge-214/roger-bell-west/javascript/ch-2.js
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-214/roger-bell-west/javascript/ch-2.js')
-rwxr-xr-xchallenge-214/roger-bell-west/javascript/ch-2.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/challenge-214/roger-bell-west/javascript/ch-2.js b/challenge-214/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..aabc5e43dc
--- /dev/null
+++ b/challenge-214/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,70 @@
+#! /usr/bin/node
+
+"use strict"
+
+function collectpoints(a) {
+ let m = [];
+ let st = 0;
+ while (st < a.length) {
+ const k = a[st];
+ let e = st;
+ while (e < a.length && a[e] == k) {
+ e += 1;
+ }
+ m.push([k, e - st]);
+ st = e;
+ }
+ let rv = 0;
+ let stack = [[m, 0]];
+ while (stack.length > 0) {
+ const s = stack.pop();
+ if (s[0].length == 0) {
+ rv = Math.max(rv, s[1]);
+ } else {
+ for (let i = 0; i < s[0].length; i++) {
+ let ss = JSON.parse(JSON.stringify(s));
+ ss[1] += ss[0][i][1] * ss[0][i][1];
+ ss[0].splice(i, 1);
+ let j = i;
+ while (true) {
+ if (j > 0 &&
+ j < ss[0].length &&
+ ss[0][j][0] == ss[0][j - 1][0]) {
+ ss[0][j][1] += ss[0][j - 1][1];
+ ss[0].splice(j - 1, 1);
+ j -= 1;
+ } else {
+ break;
+ }
+ }
+ stack.push(ss);
+ }
+ }
+ }
+ return rv;
+}
+
+if (collectpoints([2, 4, 3, 3, 3, 4, 5, 4, 2]) == 23) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (collectpoints([1, 2, 2, 2, 2, 1]) == 20) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (collectpoints([1]) == 1) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (collectpoints([2, 2, 2, 1, 1, 2, 2, 2]) == 40) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");