aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-148/abigail/node/ch-2.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/challenge-148/abigail/node/ch-2.js b/challenge-148/abigail/node/ch-2.js
new file mode 100644
index 0000000000..e4de579767
--- /dev/null
+++ b/challenge-148/abigail/node/ch-2.js
@@ -0,0 +1,101 @@
+#!/usr/local/bin/node
+
+//
+// See https://theweeklychallenge.org/blog/perl-weekly-challenge-148
+//
+
+//
+// Run as: node ch-2.js
+//
+
+
+let COUNT = 5
+let A = 0
+let B = 1
+let C = 2
+let SUM = 3
+let out = []
+for (let i = 0; i < COUNT; i ++) {
+ out . push ([999999, 999999, 999999, 999999 * 3])
+}
+
+let max_index = 0
+
+for (let k = 0; 3 * k + 2 <= out [max_index] [SUM]; k ++) {
+ let a = 3 * k + 2
+ let f1 = k + 1
+ let f2 = 8 * k + 5
+
+ //
+ // Find divisors of f1
+ //
+ let d1 = []
+ for (let i = 1; i * i <= f1; i ++) {
+ if (f1 % i == 0) {
+ d1 . push (i)
+ if (i != f1 / i) {
+ d1 . push (f1 / i)
+ }
+ }
+ }
+
+ //
+ // Find square divisors of f2
+ //
+ let d2 = []
+ for (let i = 1; i * i <= f2; i ++) {
+ if (f2 % i == 0) {
+ let s1 = Math . floor (Math . sqrt (i))
+ let s2 = Math . floor (Math . sqrt (f2 / i))
+ if (s1 * s1 == i) {
+ d2 . push (s1)
+ }
+ if (s2 * s2 == f2 / i && s1 != s2) {
+ d2 . push (s2)
+ }
+ }
+ }
+
+ for (let i = 0; i < d1 . length; i ++) {
+ for (let j = 0; j < d2 . length; j ++) {
+ let b = d1 [i] * d2 [j]
+ let c = f1 * f1 * f2 / (b * b)
+ if (a + b + c < out [max_index] [SUM]) {
+ let seen = false
+ for (let l = 0; l < COUNT; l ++) {
+ if (out [l] [A] == a && out [l] [B] == b) {
+ seen = true
+ }
+ }
+ if (seen) {
+ break
+ }
+
+ out [max_index] [A] = a
+ out [max_index] [B] = b
+ out [max_index] [C] = c
+ out [max_index] [SUM] = a + b + c
+
+ //
+ // Find new max_index
+ //
+
+ max_index = 0
+ let max_sum = out [max_index] [SUM]
+ for (let m = 1; m < COUNT; m ++) {
+ if (max_sum < out [m] [SUM]) {
+ max_index = m
+ max_sum = out [m] [SUM]
+ }
+ }
+ }
+ }
+ }
+}
+
+const printf = require ('printf')
+
+for (let i = 0; i < COUNT; i ++) {
+ printf (process . stdout,
+ "%d %d %d\n", out [i] [A], out [i] [B], out [i] [C])
+}