aboutsummaryrefslogtreecommitdiff
path: root/challenge-211/roger-bell-west/javascript/ch-2.js
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2023-04-06 11:36:26 +0100
committerRoger Bell_West <roger@firedrake.org>2023-04-06 11:36:26 +0100
commit22437e2fa18fda4713254cc11efdc21f4ece082a (patch)
tree6888c7cfa7106271b77d0410daff4aea00d84a76 /challenge-211/roger-bell-west/javascript/ch-2.js
parent8995f1e0c60ae53e54c0e4cd05dfa27cd3f1a841 (diff)
downloadperlweeklychallenge-club-22437e2fa18fda4713254cc11efdc21f4ece082a.tar.gz
perlweeklychallenge-club-22437e2fa18fda4713254cc11efdc21f4ece082a.tar.bz2
perlweeklychallenge-club-22437e2fa18fda4713254cc11efdc21f4ece082a.zip
RogerBW solutions for challenge no. 211
Diffstat (limited to 'challenge-211/roger-bell-west/javascript/ch-2.js')
-rwxr-xr-xchallenge-211/roger-bell-west/javascript/ch-2.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/challenge-211/roger-bell-west/javascript/ch-2.js b/challenge-211/roger-bell-west/javascript/ch-2.js
new file mode 100755
index 0000000000..75870a79b1
--- /dev/null
+++ b/challenge-211/roger-bell-west/javascript/ch-2.js
@@ -0,0 +1,69 @@
+#! /usr/bin/node
+
+"use strict"
+
+function combinations(arr, k) {
+ let c = [];
+ for (let i = 0; i < k; i++) {
+ c.push(i);
+ }
+ c.push(arr.length);
+ c.push(0);
+ let out = [];
+ while (true) {
+ let inner = [];
+ for (let i = k-1; i >= 0; i--) {
+ inner.push(arr[c[i]]);
+ }
+ out.push(inner);
+ let j = 0;
+ while (c[j] + 1 == c[j + 1]) {
+ c[j] = j;
+ j += 1;
+ }
+ if (j >= k) {
+ break;
+ }
+ c[j] += 1;
+ }
+ return out;
+}
+
+function splitsameaverage(a) {
+ let ss = a.reduce((x, y) => x + y, 0);
+ let ml = a.length;
+ let mx = Math.floor(ml / 2);
+ let ssa = false;
+ for (let n = 1; n <= mx; n++) {
+ for (let c of combinations(a, n)) {
+ let ca = c.reduce((x, y) => x + y, 0);
+ if (ca / n == (ss - ca) / (ml - n)) {
+ ssa = true;
+ break;
+ }
+ }
+ if (ssa) {
+ break;
+ }
+ }
+ return ssa;
+}
+
+if (splitsameaverage([1, 2, 3, 4, 5, 6, 7, 8])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (!splitsameaverage([1, 3])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write(" ");
+if (splitsameaverage([1, 2, 3])) {
+ process.stdout.write("Pass");
+} else {
+ process.stdout.write("FAIL");
+}
+process.stdout.write("\n");