aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-25 18:58:00 +0200
committerAbigail <abigail@abigail.be>2021-10-25 18:58:00 +0200
commit1ef7e3e41c765b9c0d1c4fef3683d685494dbc29 (patch)
tree4bd2d85c380a08c6d5c10ec00655446258a21384
parent82be0eb30df9c7d10749f4f75cd13a50437781a3 (diff)
downloadperlweeklychallenge-club-1ef7e3e41c765b9c0d1c4fef3683d685494dbc29.tar.gz
perlweeklychallenge-club-1ef7e3e41c765b9c0d1c4fef3683d685494dbc29.tar.bz2
perlweeklychallenge-club-1ef7e3e41c765b9c0d1c4fef3683d685494dbc29.zip
Node.js solutions for week 136
-rw-r--r--challenge-136/abigail/README.md2
-rw-r--r--challenge-136/abigail/node/ch-1.js37
-rw-r--r--challenge-136/abigail/node/ch-2.js21
3 files changed, 60 insertions, 0 deletions
diff --git a/challenge-136/abigail/README.md b/challenge-136/abigail/README.md
index 436e6a57e4..06e1bd7918 100644
--- a/challenge-136/abigail/README.md
+++ b/challenge-136/abigail/README.md
@@ -6,6 +6,7 @@
* [Bash](bash/ch-1.sh)
* [C](c/ch-1.c)
* [Lua](lua/ch-1.lua)
+* [Node.js](node/ch-1.js)
* [Perl](perl/ch-1.pl)
## Part 2
@@ -13,4 +14,5 @@
* [AWK](awk/ch-2.awk)
* [C](c/ch-2.c)
* [Lua](lua/ch-2.lua)
+* [Node.js](node/ch-2.js)
* [Perl](perl/ch-2.pl)
diff --git a/challenge-136/abigail/node/ch-1.js b/challenge-136/abigail/node/ch-1.js
new file mode 100644
index 0000000000..08331ea39f
--- /dev/null
+++ b/challenge-136/abigail/node/ch-1.js
@@ -0,0 +1,37 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-1.js < input-file
+//
+
+//
+// Find the GCD, using Euclids algorithm
+// (https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations)
+//
+function gcd (a, b) {
+ while (b > 0) {
+ [a, b] = [b, a % b]
+ }
+ return (a)
+}
+
+//
+// Precalculate the powers of 2. We're losing precision around 2^53
+//
+let power_of_2 = {};
+let power = 1;
+for (let i = 1; i < 53; i ++) {
+ power *= 2;
+ power_of_2 [power] = 1;
+}
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', line => {
+ let [m, n] = line . trim () . split (' ') . map (x => +x)
+ console . log (power_of_2 [gcd (m, n)] || 0)
+})
diff --git a/challenge-136/abigail/node/ch-2.js b/challenge-136/abigail/node/ch-2.js
new file mode 100644
index 0000000000..7d6c4538fb
--- /dev/null
+++ b/challenge-136/abigail/node/ch-2.js
@@ -0,0 +1,21 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-2.js < input-file
+//
+
+function count (target, this_fib, prev_fib) {
+ return target < this_fib ? 0
+ : target == this_fib ? 1
+ : count (target - this_fib, this_fib + prev_fib, this_fib) +
+ count (target, this_fib + prev_fib, this_fib)
+}
+
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', line => console . log (count (+line, 1, 1)))