aboutsummaryrefslogtreecommitdiff
path: root/challenge-119/abigail/node
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-06-29 00:07:16 +0200
committerAbigail <abigail@abigail.be>2021-06-30 20:51:32 +0200
commit47aed72bba5278f49f73829de5a79e7d822a8710 (patch)
treefb2385eecff960b868a6f73d82d898b6d869367a /challenge-119/abigail/node
parentcdbc2bb40b6c79ddae6896768daecb3fd70db92f (diff)
downloadperlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.tar.gz
perlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.tar.bz2
perlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.zip
AWK, C, Lua, Node.js and Perl solutions for week 119, part 2.
Diffstat (limited to 'challenge-119/abigail/node')
-rw-r--r--challenge-119/abigail/node/ch-2.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/challenge-119/abigail/node/ch-2.js b/challenge-119/abigail/node/ch-2.js
new file mode 100644
index 0000000000..656c218f54
--- /dev/null
+++ b/challenge-119/abigail/node/ch-2.js
@@ -0,0 +1,39 @@
+#!/usr/local/bin/node
+
+//
+// See ../README.md
+//
+
+//
+// Run as: node ch-2.js < input-file
+//
+
+ require ('readline')
+. createInterface ({input: process . stdin})
+. on ('line', (num) => {
+ let number = "0";
+ for (let i = 0; i < + num; i ++) {
+ number = next_number (number)
+ }
+ console . log (number)
+})
+
+
+function next_number (prev_number) {
+ //
+ // Grab the trailing 3s (tail), its preceding number (num), and
+ // anything before that (prefix).
+ //
+ let [match, prefix, num, tail] =
+ ("0" + prev_number) . match (/^(.*)([012])(3*)$/)
+
+ //
+ // First, we take the prefix, and add (num + 1) to it,
+ // then the tail, where we have replaced each 3 by a 1.
+ // Then replace any '11' with '12' (we can only have 11s at the end).
+ // Finally, remove any leading 0.
+ //
+ return (prefix + (+ num + 1) + (tail . replace (/3/g, "1"))) .
+ replace (/11/g, "12") .
+ replace (/^0/, "")
+}