diff options
| author | Abigail <abigail@abigail.be> | 2021-06-29 00:07:16 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-06-30 20:51:32 +0200 |
| commit | 47aed72bba5278f49f73829de5a79e7d822a8710 (patch) | |
| tree | fb2385eecff960b868a6f73d82d898b6d869367a /challenge-119/abigail/node | |
| parent | cdbc2bb40b6c79ddae6896768daecb3fd70db92f (diff) | |
| download | perlweeklychallenge-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.js | 39 |
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/, "") +} |
